王小飞
Qunar软件工程师,重要 从过后 端开辟 工作。个人博客地点 :https://www.jianshu.com/users/0d5a83b32e8f/latest_articles
随着出境旅游的需求不绝 攀升 ,出境WIFI 、本地 玩乐、在线领导 等服务受到了更多客户青睐,去哪儿必要 在游客走出国门之后,做好从接机、接洽 本地 领导 到落地欢迎 等团体 服务升级 ,才华 赢得口碑,留住客户 。
怎样 让游客在国外也能找到回家的感觉,随时随地 、轻轻松松地和去哪儿取得接洽 ,在碰到 困难的时间 ,可以或许 及时 地向去哪儿寻求资助 ,是去哪儿不停 在积极 提拔 的地方。
为了包管 游客在国外也能和国内无缝衔接,去哪儿App的用户可以直接通过免费网络电话拨打国内的客服电话。在没有任何宣传推广的环境 下 ,上线7天已经有高出 30%的用户选择网络电话入口呼唤 接入,这个数据表现 用户对于网络电话的承认 度是很高的 。
下面我们来看一下网络电话的团体 办理 方案。
一、VOIP先容
VOIP即网络电话,Voice over Internet Protocol,通过把语音信号颠末 数字化处理 惩罚 、压缩编码打包、通过网络传输,然后解压 、把数字信号还原成声音 ,让通话对方听到。 话音从源端到达目标 端的根本 过程是: 声 -- 电转换:通过压电陶瓷等雷同 装置将声波变更 为电信号。
量化采样:将模仿 电信号按照某种采样方法(比如 脉冲编码调制,即PCM)转换成数字信号;
封包:将肯定 时长的数字化之后的语音信号组合为一帧,随后 ,按照国际电联(ITU-T)的标准 ,这些话音帧被封装到一个RTP(即及时 传输协议,Realtime Transport Protocol)报文中 ,并被进一步封装到UDP报文和IP报文中 。
传输:IP报文在IP网络由源端转达 到目标 端 去抖动:去除因封包在网络中传输速率 不匀称 所造成的抖动音 拆包 电声转换 一个完备 的、可以大规模商用运营的IP电话体系 包罗 如下一些技能 (暂不完全):寻址 话音编解码 回声消除和回声克制 传输 IP报文时延控制功能 去抖动 IP报文的去抖动(de-jitter)功能 。
二、VOIP与传统电话的比力
简单 地来说,VOIP网络电话免费(流量 、wifi),传统电话更稳固 点。不外 如今 网络电话行业发展快,很多 产物 稳固 性都高出 了传统电话 ,比如 mimicall、vp3000等,以是 如今 越来越多的人风俗 了利用 网络电话去举行 沟通 。
三、开源软PBX(软互换 )的选择
国内比力 盛行 和拥有活泼 用户群的是FreeSwitch(https://freeswitch.org/)和Asterisk(https://www.asterisk.org/),由于之前对Asterisk有肯定 的应用履历 ,以是 选择了Asterisk。二者都基于sip协议。
四 、客户端开源sip协议库的选取
如今 比力 盛行 的开源的SIP协议库是PJSIP(https://www.pjsip.org/),它实现了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]
type=auth
auth_type=userpass
password=8005
username=8005
[8005]
type=aor
max_contacts=1
[8006]
type=endpoint
context=from-external
disallow=all
allow=ulaw
transport=transport-udp
auth=8006
aors=8006
[8006]
type=auth
auth_type=userpass
password=8006
username=8006
[8006]
type=aor
max_contacts=1
4)拨号方案的设置
拨号方案的设置 在 /etc/asterisk/extensions.conf 中 增长 设置
[from-external]
exten = _80XX,1,NoOp()
same = n,Dial(PJSIP/${EXTEN})
启动asterisk
service asterisk start
控制台毗连
sudo asterisk -rvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
注册分机8005 8006
Asterisk 控制台输出
拨打测试 戴上耳机就可以听到你的声音啦
demo用例图
六、Asterisk 负载均衡 的搭建
美满 的线上办理 方案是不答应 单点的出现,作为pbx 也是一样。
负载均衡 软件选取 ,sip层的负载均衡 可以选取硬件,但是本钱 缘故起因 我们可以用软件代替 ,行业中有不少做sbc的厂家 ,提供硬件和软件的办理 方案,我们可选取kamailio (https://www.kamailio.org/w/) 大概 opensips (https://www.opensips.org/),着实 二者是一家 ,差别 的分支而已 此中 的故事我就不在这里说了,这里我们选取 kamailio。
1)kamailio安装
安装过程这里不做过细讲授 这里必要 留意 将kamailio做成service服务启动方式大概 init脚本启动方式必要 做以下操纵 ,同时必要 留意 权限题目
cp pkg/kamailio/rpm/kamailio.init /etc/init.d/
mv /etc/init.d/kamailio.init /etc/init.d/kamailio
chmod 755 /etc/init.d/kamailio
/etc/init.d/kamailio start
2) 设置 asterisk的转发
cd /usr/local/etc/kamailio/
vim dispatcher.list
1 sip:192.168.0.1 0 1 weight=50
1 sip:192.168.0.2 0 1 weight=50
vim kamailio.cfg(kamailio设置 比力 多官方有文档(https://www.kamailio.org.cn/data/pages/cookbooks/4.3.x/stable.html)这里罗列 重要 的设置 )
listen=udp:192.168.0.3:5060
modparam("dispatcher", "list_file", "/usr/local/etc/kamailio/dispatcher.list")
Route设置 中参加
if(!ds_select_dst("$var(dispatcher_group)", "9"))
{
send_reply("404", "No destination dispatcher");
exit;
}
关于dispatcher 的选项设置
3)重启 kamailio
/etc/init.d/kamailio restart
此时呼唤 可以查察 kamailio的日记 大概 asterisk控制台 发现已经按照我们的设置 按权重做了转发 。
Asterisk负载均衡 用例图
七 、kamailio的HA
此时发现固然 办理 了asterisk的单点题目 ,但是没有办理 kamailio的单点题目 。我们选取keepalived办理 kamailio的HA。Keepalived 引入必要 vrrp(假造 ip)的共同 ,这里我们指定192.168.1.4是192.168.1.5和192.168.1.6vrrp (这个必要 在路由器端设置 ) 。
1)Keepalived(https://www.keepalived.org/)安装
必要 主备两台服务器 地点 分别对应192.168.1.5和192.168.1.6。两台都得安装。
2)Keepalived 设置
两台呆板 的设置 ,根本 同等 只是一台是master一台是backup
还必要 修改 /etc/sysctl.conf文件输入
net.ipv4.ip_nonlocal_bind = 1
这条设置 是答应 linux的服务可以绑定假造 ip,这里我们的kamailio必要 绑定假造 ip 。
3)启动keepalived
service keepalived start
两台都启动
修改kamailio的设置 文件 绑定假造 ip
listen=udp:192.168.1.4
重启kamailio 这里已经是两台了 主备
/etc/init.d/kamailio restart
这是时间 拨打假造 ip就可以了
4)HA的主备切换的查验
针对kamailio 我们必要 引入sipsak小软件 ,做sip探测比力 符合
安装sipsak
yum install sipsak
向kamailio发送探测 下令 格式
sipsak -s sip:s@192.168.1.4:5060
根据返回值判定 echo $?
编写监测脚本 做逻辑处理 惩罚
这里大抵 说下脚本思绪 :利用 sipsak 向kamailio发送探测下令 ,根据返回值是否为0判定 kamailio是否存活,根据失败次数做keepalived的关闭如许 就可以实现vrrp指向另一台呆板 。连合 crontab 和shell脚本可以实现风雅 到每秒实行 一次监测。
Kamailio HA后的用例图
八、回拨方案的办理
实际 中手机上并未启动voip电话 ,此时拨打用户是打不通的 。为了办理 这个题目 我们计划 了回拨方案,重要 思绪 是当一方呼入电话时我们将这通电话hold起来,根据业务方式关照 到另一方(比如 push关照 ) ,当对方上线后我们放行这通电话就可以正常通话了,另一种方式是集会 会议 室方式,将呼入方先参加 集会 会议 室 ,业务关照 (同样可以push大概 短信等)另一方,另一方收到关照 后主动 参加 集会 会议 室,此时两边 就可以通话啦。
回拨方案的序列图
九、NAT 题目 简述
在企业服务中通常公司都有防火墙和DNS服务器,我熟知的一样平常 是bind服务 ,在对外网开放的时间 ,必要 开放端口,同时必要 做端口和ip转发。对应的外网地点 转发到对应的内网地点 上 ,这一点必要 留意 。在asterisk和kamailio中都有对NAT的支持,做对应的设置 即可,此中 的坑只能本身 动手去踩坑 ,比力 杂,这里就不做过多阐明 ,假如 公司气力 强大 ,还可以搭建stun服务器,免费的一样平常 不靠谱,如许 既能办理 端口题目 又能办理 NAT题目 。
十 、TLS和SRTP的支持
对于对外的服务来说 ,假如 不想让别人看到你的数据和听到你的通话,必要 在协议层引入TLS 语音层引入SRTP。tls和srtp都是必要 单独安装的模块,在kamailio中编译安装的时间 就必要 指定tls.so的参加 。Asterisk编译安装的时间 也必要 提前编译安装tls和srtp 。至于证书没须要 去购买 自署名 的即可。Kamailio是可以单独设置 rtpproxy的,以是 这些服务都可以细分。
十一、题目 排查
实际 搭建过程中肯定会碰到 各种各样的题目 ,如网络题目 可以采取 小工具netcat(https://www.jianshu.com/p/fa4eeac44e5c)举行 排查,假如 是分析sip协议哪步出的题目 linux的 tcpdump是很好的工具,假如 采取 了tls协议 ,则有相对应的工具ssldump 。末了 保举 个非常实用的抓包软件wireshark,这款软件无论是分析sip协议还是 丢包率,还是 语音质量方面都黑白 常好用的。
十二、总结
如图是比力 简单 的voip接入呼唤 中心 的架构图 ,实际 的应用项目中尚有 很多 监控的事变 ,比如 宕机的关照 之类的事变 这里和业务相干 的就不多说了,真正搭建的过程中会碰到 许很多 的题目 ,在此只是一个小的总结,盼望 对各人 有所资助 。
欢迎 留言交换 或投稿,和我们一起分享知识 。
Qunar技能 沙龙