首页 > 代码库 > linux服务之asterisk

linux服务之asterisk

由于Asterisk过于专业且复杂,所以目前也存在大量衍生自Asterisk但简化过的通信系统,以让用户较容易使用。比如在欧美比较流行的elastix、trixbox、或以简体中文为基础的Freeiris等。

Asterisk[1] 是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案。Asterisk[1]是一种功能非常齐全的应用程序,提供了许多电信功能,能够把你的x86机 器变成你自己的交换机,还能够当作一台企业级的商用交换机。Asterisk[1]让人激动的事情是它在小企业预算可承受的范围内提供了商业交换机的功能和可伸 缩性。你可以使用一台老式的奔腾3计算机,让你的机构看起来就同世界上的大企业一样。

从架构的角度看来,Asterisk是由许多不同的模块组成的。在设计基于Asterisk的系统时,这种模块化的特性,提供了几乎无限的灵活必。作为Asterisk系统管理员,你拥有选择加载模块的权利。你所加载的每一个模块,都提供了不同的系统功能。比如说,有的模块能够让你的Asterisk与模拟电话线路通信,有的模块则提供话务报告的功能。后续,我们还将讨论到各种模块的功能和类别。

http://www.cnblogs.com/einyboy/archive/2012/11/08/2759969.html
http://blog.csdn.net/yetyongjin/article/details/7520567

asterisk的sip功能

Asterlsk 能够支持传统的线路:

TDM (Time Division Multiplexing)
T1/ E1 PRI/ PRA & RBS (Robbed Bit Signal)
modesAnalog phone lines/ phones (POTS)
ISDN (Integrated Services Digital Network)
Both BRI (Basic Rate)and PRI (Primary Rate)

Asterisk 支持的协议包括:

Session Initiation Protocol (SIP)
H. 323 (ITU standard, contributed support)
Inter- Asterisk eXchange (IAX)
Media Gateway Control Protocol (MGCP)

Asterisk的模块类型

通道驱动模块
       框架图的顶部,蓝色部分描述的就是通道驱动。通道驱动程序与Asterisk外部的设备通信,并为内核转换某种特定的信令或协议。
所有从外部呼入的呼叫,在抵达内核之前,都要经过某种通道驱动;所有外呼的呼叫,在抵达外围设备之前,也一定要经过某种通道驱动。
        例如:SIP通道驱动,用于与使用SIP协议的终端设备通信。它为内核转换SIP信令。这意味着Asterisk的内核是与信令无关的。因此,Asterisk不仅仅是SIP PBX,它是多协议的PBX。

所有通道驱动都以 chan_xxxxx.so命名,比如说chan_sip.so、chan_dahdi.so

拨号规则应用模块
           Application为系统提供呼叫相关的功能。这些应用可能是应答、播放提示音、挂机等功能。

应用模块为系统提供呼叫功能。这些应用,在拨号方案中按(草种)顺序脚本化。比如说,一个呼叫进入Asterisk拨号方案,可能会有一个应用作出应答;另一个应用从磁盘中读取一个文件,播放一段提示音;第三个应用,则让呼叫方在指定的语音信箱中留言。

有关拨号计划应用的更详细信息,请参考: Dialplan Fundamentals

         所有应用模块,都以app_xxxxx.so命名,比如说 app_voicemail.so

拨号规则功能模块
        从某种程度上来说,拨号规则的功能类似于应用,但是,它们不是作用于某个特定通道或呼叫,而是简单地检索或设置通道上的某个设定,或者执行文本操作。比如说,某个功能模块会检索呼叫的主叫ID信息,过滤某些文本,或为来电者设置一个超时时间。

         拨号规则功能模块,都以 func_xxxxx.so命名,比如说func_callerid.so

资源模块
        顾名思义,资源就是Asterisk需要用到的资源服务。常见资源如呼叫保持音乐、呼叫停泊等。

资源模块为Asterisk提供可以在呼叫过程中任意时刻调用的一些扩展功能,即使另一个应用正在某个通道上执行,也能够调用。资源模块典型应用于事件同步,比如说在呼叫置保持或挂起时播放音乐。

        资源模块以res_xxxxx.so命名,比如说 res_musiconhold.so

编解码模块
           一种CODEC,就是某种音频或视频的编解码模块。通常用于压缩媒体,以减少带宽消耗。

        编解码模块都以codec_xxxxx.so命名,比如说codec_alaw.so、 codec_ulaw.so

        编解码模块提供媒体流的编码和解码算法。Asterisk在接收和发送媒体(音频和视频)时,都用到编解码模块。这个模块还完成不同编码算法间的转换工作。

        Asterisk提供了多种媒体格式的支持,包括:ADPCM, 32kbit/s、G.711 alaw, 64kbit/s、G.711 ulaw, 64kbit/s、G.726, 32kbit/s、G.726, 32kbit/s、GSM, 13kbit/s、LPC-10, 2.4kbit/s。

        其它的如G.729A、G.723.1,是需要专利许可的。

文件格式驱动模块
      这些模块让Asterisk能够支持的一系列文件格式。Asterisk利用文件模块从网络上获取媒体流(音频或视频),转换成文件,存储在磁盘中;或者反过来从磁盘中读取文件并转换为媒体流。这些模块常常关系到编解码模块,对于某种编解码来说,磁盘上可能存在多种可用的文件格式。

       文件格式模块以format_xxxxx.so命名,比如说 format_wav.so、format_xxxxx.so

呼叫详细记录(CDR)驱动
       CDR模块的用途是把呼叫详细记录按不同的格式要求存储。常用的存储机制包括CSV文件、关系型数据库(比如PostgreSQL)。通常每一通呼叫生成一条通话记录,记录内容包括主叫、被叫、通话时长等等。

       CDR模块都以cdr_xxxxx.so命名,比如说cdr_csv.so、 cdr_pgsql.so

呼叫事件日志(Call Event Log)驱动
         CEL和CDR类似,但它更侧重于记录在呼叫过程中,Asterisk内部发生了什么。

         CEL记录呼叫过程中发生的各种事件。正因如此,它通常记录了比CDR更详尽的事情。比如说CEL可能会记录下这样的内容:ALICE呼叫BOB;BOB的电话在振铃20秒后,BOB的移动电话响铃了,再过15秒,呼叫转到BOB的语音信箱去了,然后ALICE留下一条25秒长的语音留言,然后挂机。系统还能够自定义需要记录的事件。

         CEL模块以cel_xxxxx.so命名,比如cel_custom.so、cel_adaptive_odbc.so

桥接模块
        从Asterisk1.6.2开始,Asterisk引入了桥接呼叫的一种新方法。它依赖各种桥接模块,控制为呼叫参与者间的媒体流混频方式。新的桥接方式,是一种更灵活、更高效的设计。

        桥接模块以 bridge_xxxxx.so命名,比如bridge_simple.so、 bridge_multiplexed.so.