Asterisk 架构--大图

在我们深入研究各种类型的模块之前,让我们先退一步看看Asterisk的整体架构。

Asterisk是一个包含许多组件的大型程序,具有复杂的关系。您不必非常详细地了解所有内容,就能使用它。下面是一个简化图,旨在说明一些主要组件之间以及Asterisk以外的实体之间的关系。了解组件如何与Asterisk之外的事物相关是很有用的,因为如果没有与本地系统上的其他网络设备或文件的某些连接或交互,Asterisk通常不会运行。

原图:请记住,这不是一个详尽的图表。它仅涵盖了某些组件之间的一些常见关系。

Asterisk 架构

Asterisk有一个可以与许多模块(modules)交互的核心(core)。称为通道驱动程序的模块提供遵循Asterisk拨号方案(dialplan)通道(channels),以执行编程行为并促进Asterisk之外的设备或程序之间的通信。通道常使用桥接(bridging)基础设施与其他通道进行交互。我们将在下面简要介绍其中的一些概念。

核心(core)

任何一个Asterisk系统的核心都是core(core,是指的PBX core),PBX core是提供大量基础设施的基本组件。在许多功能中,它读取配置文件,包括拨号方案和加载所有其他的模块(modules),提供更多功能的不同组件。

core加载并构建拨号方案,这是任何Asterisk系统的逻辑。拨号方案包含Asterisk应遵循的指令列表,以了解如何处理系统上的呼入和呼出。

模块(modules)

除了Asterisk核心提供的功能外,模块还提供其他所有功能。许多模块的源代码都与Asterisk一起分发,但其他模块可能来自社区成员甚至是制作商业模块的企业。与Asterisk一起分发的模块可以选择在安装Asterisk时构建。

模块不仅可以选择性地构建,而且可以在加载时影响它们是否将被加载,加载顺序甚至在运行时卸载/加载它们。大多数模块可独立配置,并具有自己的配置文件。某些模块支持从数据库后端静态或动态(实时)读取配置。

从逻辑角度来看,这些模块通常是具有.so文件扩展名的文件,它们位于Asterisk模块目录(通常是/usr/lib/asterisk/modules)中。当Asterisk启动时,它会加载这些文件并将其功能添加到系统中。

作为核心一部分的Asterisk模块的文件名看起来像 pbx_xxxxx.so。所有模块类型都在“Asterisk模块类型”一节中讨论。

一些模块示例

  • chan_pjsip 使用 res_pjsip 和许多其他res_pjsip模块为SIP设备提供SIP堆栈,以便通过Asterisk与Asterisk进行交互。

  • app_voicemail 提供传统的PBX类型语音邮件功能。

  • app_confbridge 提供具有许多可选功能的会议桥。

  • res_agi 提供Asterisk网关接口,这是一种允许从外部脚本和程序进行呼叫控制的API。

通话(Calls)和通道(Channels)

正如Asterisk中提到的瑞士军刀电话部分一样,Asterisk的主要目的是构建实时通信系统和应用程序的引擎。

在大多数情况下但并非所有情况下,这意味着您将处理 “Calls” 的概念。电话术语中的 Calls 通常是指通过媒介(例如PSTN线路)与另一电话通信(呼叫)。但是,对于Asterisk,呼叫通常会引用Asterisk中存在的一个或多个通道

以下是一些 “Calls” 示例:

  • 一部电话通过Asterisk拨打另一部电话。
  • 一部电话通过Asterisk一次呼叫多个电话(例如,寻呼)。
  • 电话呼叫应用程序或应用程序呼叫电话。例如,app_voicemail或app_queue
  • 创建本地通道并与应用程序或其他通道交互。

请注意,我主要使用手机作为示例,但您可以将任何通道或通道组称为通话。无论设备是电话还是其他设备都无关紧要,如报警系统传感器或车库门开启器。

通道(Channels)

通道由Asterisk使用通道驱动程序创建。他们可以利用Asterisk系统中的其他资源来促进一个或多个设备之间的各种类型的通信。通道可以桥接(bridged)到其他通道,并受应用程序(applications功能(functions的影响。通道可以使用其他模块或外部库提供的许​​多其他资源。例如,传递音频时的SIP通道将使用编解码器(codec)和格式(format)模块。频道可以同时与许多不同的模块交互。

拨号方案(Dialplan)

拨号方案是指导Asterisk行为的一种主要方法。拨号方案是内置的脚本语言,以AEL或LUA格式存在于文本文文件中(例如extensions.conf)。或者,可以从数据库中读取拨号方案以及其他模块配置。编写拨号方案时,您将大量使用应用程序(applications)方法(functions )来影响通道、配置和功能。

拨号方案还可以通过其他接口(如AGI)呼叫,以接收来自外部脚本和程序的呼叫控制指令。拨号方案部分详细介绍了拨号方案的用法。

results matching ""

    No results matching ""