一、VOIP介绍
VOIP即网络电话,Voice over Internet Protocol,通过把语音信号经过数字化处理、压缩编码打包、通过网络传输,然后解压、把数字信号还原成声音,让通话对方听到。 话音从源端到达目的端的基本过程是: 声 – 电转换:通过压电陶瓷等类似装置将声波变换为电信号。
量化采样:将模拟电信号按照某种采样方法(比如脉冲编码调制,即PCM)转换成数字信号;
封包:将一定时长的数字化之后的语音信号组合为一帧,随后,按照国际电联(ITU-T)的标准,这些话音帧被封装到一个RTP(即实时传输协议,Realtime Transport Protocol)博主weixin@yuyinjiqiren报文中,并被进一步封装到UDP报文和IP报文中。
传输:IP报文在IP网络由源端传递到目的端 去抖动:去除因封包在网络中传输速度不均匀所造成的抖动音 拆包 电声转换 一个完整的、可以大规模商用运营的IP电话系统包括如下一些技术(暂不完全):寻址 话音编解码 回声消除和回声抑制 传输 IP报文时延控制功能 去抖动 IP报文的去抖动(de-jitter)功能 。
二、VOIP与传统电话的比较
简单地来说,VOIP网络电话免费(流量、wifi),传统电话更稳定点。不过现在网络电话行业发展快,很多产品稳定性都超过了传统电话,好比mimicall、vp3000等,所以现在越来越多的人习惯了使用网络电话去进行沟通。
三、开源软PBX(软交换)的选择
国内比较流行和拥有活跃用户群的是FreeSwitch和Asterisk,由于之前对Asterisk有一定的应用经验,所以选择了Asterisk。二者都基于sip协议。
四、客户端开源sip协议库的选取
目前比较流行的开源的SIP协议库是PJSIP,它实现了SIP、SDP、RTP、STUN、TURN和ICE。PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。PJSIP同时支持语音、视频、状态呈现和即时通讯。PJSIP具有非常完善的文档,对开发者非常友好支持。
五、调研评估和Demo搭建
目前市场上对于voip的应用已经比较成熟,好多公司都在做。微信电话本等的推出说明voip完全可行。相对于去哪儿呼叫中心更好的服务于去哪儿用户解决海外用户拨打人工服务的困难,尽最大努力降低用户的成本,voip完全可行。
1)Demo的快速搭建
找一台linux机器首先下载安装pjsip软件 安装过程这里不做过细讲解
用ldconfig命令 验证pjsip的动态链接是否创建
ldconfig -p | grep pj
安装Asterisk 13(注意只有12以上才支持了pjsip)
这里注意在编译的时候其实可以查询系统的位数,我的是64位所以直接指定了64,查询指定的命令如下:
ARCH=$(getconf LONG_BIT | grep “64”)
./configure –libdir=/usr/lib${ARCH}
用make menuselect命令选择安装的模块
做选择需要编译安装的modules,查看确保pjsip相关的module已选择
然后make config 命令是将asterisk作为linux service的服务
还有一点就是Asterisk 13 requires pjsip >= 2.4. 所以选取版本的时候也 需要注意。
2)demo客户端软件选取
PjSua是开源的客户端代码,同时支持ios和android等主流操作系统,做测试用的话eyeBeam,X-Lite,Blink 都可以作为PC客户端,Blink PC客户端做tls测试的时候比较方便。
这里可以同时下载eyeBeam,X-Lite两台互拨便于测试。
3)Asterisk的配置
Demo可以配置两个测试的分机号(可以认为是用户名和密码)
配置是在 /etc/asterisk/pjsip.conf 中
监听地址端口配置为本机ip和5061端口,协议配置成udp
分别再配置两个号 8005和8006
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5061
[8005]
type=endpoint
context=from-external
disallow=all
allow=ulaw
transport=transport-udp
auth=8005
aors=8005
[8005]
t