基于Asterisk的VoIP开发指南——(1)实现基本呼叫功能
2008/06/12
说明:图1-1 所有基于IP协议的协议族
由图1 -1可以看出,与VOIP相关的协议共分五层,每一层又由许多协议组成。目前有关IP电话制定的标准体现在应用层。而应用层又可分为信令控制协议、网关控制协议、媒体编码和传输协议和QOS协议等。
图3-1 VOIP通信系统功能模块图
Asterisk提供了很多的基本拨号语法及应用的拨号函数,它共有40多个配置文件,通过Asterisk特有的语法修改特有的配置文件,才能实现通话的基本功能,同时可以实现针对不同的用户实现不同的通信功能。它的配置文件的源文件采用的是C语言编写。但是基于Asterisk的Application
API编程接口,如AGI,对外部的应用程序可以使用PHP,Python,Perl,Java等语言编写。Asterisk运行操作系统平台的Linux内核要求大于等于2.
4. x的版本。
3 VoIP通信系统基本功能概述
如果是基于纯软件的实现方案,Asterisk是构建VoIP项目的核心,系统中所有与用户呼叫有关的功能和管理都通过它来实现,包括VoIP各种协议的互通和配置,以及各种呼叫设备的配置文件。本文档所讨论的VoIP通信系统基本功能如图3-2所示,一般的Asterisk的任务包括了两方面,一是与呼叫有关的,包括基本呼叫处理、主叫号码透传、呼叫纪录和日志生成等,二是与呼叫控制有关,即终端用户的认证计费功能。
图3-1 VOIP通信系统功能模块图
4 基于Asterisk实现VOIP通信系统基本功能
PBX是专用交换机,俗话叫集团电话。广泛地运用在企业办公机构中,极大地提高了企业的办事效率。但传统的PBX存在缺点有:
图 4-1 VOIP系统的基本组成
IP- PBX主要功能组件如图4-1所示,下面讨论这些基本功能组件。
1. 呼叫控制器
IP电话系统的智能部分,它负责提供一切传统PBX系统的中心-PBX交换机所能提供的服务。负责控制所有的呼叫建立和呼叫管理,能轻易提供大部分基本服务(如呼叫保持、呼叫转移、呼叫等待等),以及配置电话的分机号码(Extension
Number)、功能按钮、通话管理和路由决策功能。此外,它还控制所有的PC虚拟电话功能,如语音邮件、统一消息、自动话务员、交互式语音响应(IVR)和自动呼叫分配等。
2. 媒体网关
在IP-PBX系统中,媒体网关用来实现IP网络和传统电路交换网的通信,负责把呼叫转接到PSTN网,完成异种网络的电话呼入和呼出。它除了具有接通被叫的功能外,还可以把来自PSTN的呼叫连接到IP电话系统。媒体网关在整个VoIP系统中起着非常关键的作用。它不仅使VoIP系统能够连接PSTN用户,而且能够增加整个系统的可靠性,使系统具有处理紧急呼叫的能力。媒体网关还需要完成语音编码转换,通信协议转换以及LAN/WAN-PSTN之间的呼叫建立拆除等功能。
3. 局域网接入模块
提供IP-PBX系统各组件之间的连接。在局域网的环境中,该模块可以使用局域网交换机来代替。
4. 控制中心
包括资源管理系统、计费系统、网管系统、语音信箱等。
5. 信令网关
提供和其它信令网络的互通功能,可以支持H.323,IAX,SIP,MGCP等的全部或者部分功能。
6. 应用服务器
为IP-PBX系统提供增值应用。
7. I P话机终端
包括终端部分软件PC Phone,I P-Phone等。
8. 模拟终端普通电话,传真机等传统模拟设备。
本文档IP-PBX系统的基本组件
1.VoIP软终端X-Lite,对应图4-1的PC PHONE:PC用户使用SIP软终端(目前只使SIP协议作为输入信令)访问IP-PBX服务器软交换后台,对普通座机或手机发起呼叫,实现PC2Phone的通讯。
2.IP-PBX(VoIP 软交换),对应图4-1的呼叫控制器:基于开源软交换平台Asterisk,接受VoIP软终端(或其它能发起SIP/H323请求的硬件终端)发起的呼叫信令、解析被叫号码、构建VoIP语音数据包发送到IP网络中。
3.语音网关,对应图4-1的媒体网关、信令网关,因为实际使用中大部分的媒体网关设备都集成了信令网关功能:提供模拟语音信号和VoIP信令的转换,即从IP网络进入的VOIP数据包被转换成模拟语音,通过与PBX相连的数字中继线路进入到PBX(数字程控交换机)。
4.数字程控交换机(PBX):用于电话交换网的交换设备,它以计算机程序控制电话的接续,从语音网关的E1数字中继线路送出来的7号信令或1号信令或PRI信令以及模拟语音数据包进入到数字程控交换机。
4.3 VOIP系统的软硬件平台
第1节已经简单介绍过Asterisk,它是一个非常灵活的软件,可以轻松的安装在任何Linux平台上。Asterisk的资源需求与其它的嵌入式、实时的应用系统很类似,都是通过优先级的方式来访问CPU和总线,并规定系统上的任何函数都不能直接调用比Asterisk优先的进程。对于非专业的系统而言,这也许不是很重要,如果目标是商用系统,这种优先级方式带来的性能上的缺陷会引起通话质量的问题。比如,经常出现回声、噪音等等。这种情况在手机超出服务区外的时候常常出现。由于对于Linux的内核代码和优化技巧不是很了解,选择一个高的配置,而不是重新对内核进行编程,是一个比较好的主意。
硬件平台
表4-1可以对系统的硬件配置有一个大概的认识
表4-1 VOIP 系统的硬件配置
系统 | 并发通话数量 | 最小要求 |
非专业系统 | <5 | 400M CPU 256M内存 |
SOHO系统 | 5-10 | 1G CPU 512M内存 |
小型商用系统 | 10-15 | 3G CPU 1G 内存 |
中等商用系统 | >15 | 双处理器,在分布式构架里采用多个服务器集群 |
对于要安装Asterisk的计算机,如果在预算有限的情况下,下面是一些建议:系统的稳定性及质量取决于所选择主板的结构设计,考虑使用服务器主板是一个很好的主意。比如服务器主板提供的PCI插槽有3.5V和5.0V,服务器主板可以给主板提供更稳定的电压和电流。而且,语音卡常常会造成每秒100个以上的中断请求,所以对于主板来说,一定要仔细考察芯片组是否能供支持。
安装PCI显卡,而不是AGP显卡,因为AGP通道会造成内存的高占用率和CPU中断占用。如果采用工控机/服务器构架,根本没有安装显卡,而是使用Console来管理系统。对于CPU而言,由于Asterisk使用CPU进行信号的模数转换(也就是说CPU具有DSP的作用),所以浮点运算能力是非常重要的,同时CPU的L2Cache也应该尽量的大。
1. 专有板卡的准备
如果准备连接Asterisk系统到任何电信设备上去,必须需要一个专有硬件的支持。板卡的主要功能是连接PSTN和LAN/WAN。为了桥接电路交换的电信网络和包交换的数据网络,最流行和最经济的连接PSTN的方法是使用接口卡,接口卡有好几种,这里仅仅讨论常见的两种情况。
(a)模拟接口卡
PSTN介入情况是普通的电话线或者模拟中继电话线的时候,就需要这种卡。
最流行的Asterisk模拟接口卡也许是TDM400P(实际上这款卡和时分复用没有任何关系,仅仅是这么叫好听而已),由Digium公司制造。TDM400P是一个4口卡,可以插4块子卡,既可以提供FXO口,也可以提供FXS口。这个卡是贵的,当然最有名气。
(b)数字接口卡
如果需要多于10条电路或者需要数字连接的时候,就要购买或者寻找T1或El卡了。但是要注意,El的接入的价格由信息产业部统一规定,在一些地区可以找到非常便宜的PSTN接入价格(落地价格),有关这方面的内容在这不细述。
2. 硬件的需求
针对中小型公司,硬件的要求一般不是很高,普通的网络设备就可以满足要求。如果想采用很好的语音质量,可以采用专门的语音网关来处理语音信息。因为,采用通信的硬件设备目前大多是PSTN电话终端,因此要求附加一个硬件来将PSTN电话转化为“IP”电话。目前大多采用ATA设备来转换PSTN的电话终端。当然也可以使用IP电话,如X-Lite等。
对于本文档的VoIP开发环境说明如下:
(点击看大图)
第二部分——VoIP网关、PSTN网络层
这部分是本文档所讨论的开源软交换平台(Asterisk)通信的VoIP语音网关,如图4-3所示,经过它出局的数字中继是一个E1接口(又称一个PCM),是一对引自数字程控交换机的同轴电缆线,在电缆线上数据传输速率是2.048
Mbps可以同时容纳32时隙
*64Kbps的语音数据。
图4-4 简单拓扑图
软终端Xlite注册到软交换Asterisk上
图4-5 软终端设定
4.5.1 IP-PBX服务器Asterisk抓包分析
图4-7 SIP_REGISTER_2
X-Lite(UA) ------> asterisk PBX(读取SIP INVITE消息)
图4-8 IP_INVITE_1
Asterisk PBX 针对上面的分析情况,响应X-Lite会话继续下去:
Transmitting to X-Lite(202.108.12.6)
图4-9 SIP_INVITE_2
图4-10 SIP_TRYING
执行拨号方案
图4-11 dialplan
Asterisk然后开始与华为8010语音网关建立H323通信
① Call set up.
H.225/Q.931 Call Setup
(点击看大图)
图4-13 h323_SETUP_2
②ALERT/PROGRESS 表示被叫已经正在响铃…
图4-14 h323_3_ALERT
这时候,Asterisk PBX将被叫手机正在响铃的信号以SIP消息 的形式发送到客户端X-Lite,这是一种sip_indicate类型的SIP消
息。
图4-15 SIP_Ringing
Asterisk响应会话继续的SIP消息
图4-16 SIP_183_SESSION_PROGRESS
Asterisk与华为8010语音网关的H323连接已经成功建立
③Connect
表示软交换Asterisk与华为8010语音网关的H323连接已经成功建立
图4-17 H323_ESTABLISHED
Asterisk与X-Lite之间发送OK与ACK响应消息,表示SIP软终端已经跟H323语音网关建立了连接,并且被叫已经接听,开始成功通话
图4-18 SIP_200ok_ack 被叫先挂断,Asterisk与华为8010语音网关的H323连接在此释放
④Release Complete
表示软交换Asterisk与华为8010语音网关的H323连接在此释放
(点击看大图)
图4-19 H323_RELEASE Asterisk向软终端X-Lite发送BYE消息
图4-21 SIP_BYE_OK
4.5.2 结论
通过观察上面这个流程图可以容易的看出,语音网关在收到INVITE消息后立即发送SETUP消息,反之亦然.
所以可以得到如下的H.323和SIP的消息对应关系:
H.323 消息 | SIP 消息 |
Setup | Invite |
Call Proceeding | 100 Trying |
Alerting | 180 Ringing |
Connect | 200 OK |
Release Complete | BYE |
基于Asterisk的VoIP开发指南—Asterisk模块编写指南 2008-06-12 |
基于Asterisk的VoIP开发—Asterisk AGI程序编写指南 2008-06-12 |
无线IPPBX系统的设计与实现 2008-06-12 |
浅论美国宽带电话(VOIP)监管的新动向 2008-06-11 |
网络电话(VoIP)成功应用美军军事系统 2008-06-06 |