大家好,欢迎来到IT知识分享网。
CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫
本文章介绍如何在Centos环境下配置Asterisk,WebRTC和网关,实现通过WebRTC呼叫外部手机号码,外部电话呼入,WebRTC接听的功能。同时,内部SIP分机和WebRTC之间实现互打拨号。很多用户可以通过WebRTC实现和企业内部应用集成,方便企业用户对业务方面的支持,同时极大降低了业务集成的开发难度。
测试环境:
系统CentOS-7
SIP 媒体服务器: asterisk-15.7.2
客户端sipML5网页端、eyeBeam
谷歌浏览器
内网呼叫:SIP,WebRTC在同一内网环境
通过网关呼入呼出
更多关于SIP方面的技术文档,关注siplabSIP技术知识点
安装步骤:
CentOS安装asterisk依赖包和附加支持包:
yum install -y gcc gcc-c++ lynx bison mysql-devel mysql-server php php-mysql php-pear php-mbstring tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git subversion kernel-devel php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel libtool sqlite-devel unixODBC mysql-connector-odbc bzip2 patch libedit-devel
下载环境包:
cd/usr/local/src //选择下载路径
wgethttps://downloads.asterisk.org/pub/telephony/asterisk/asterisk-15-current.tar.gz //使用wget + 下载链接,下载asterisk包
完成后如上图表示,以下下载图省略
wgethttps://github.com/cisco/libsrtp/archive/v1.5.4.tar.gz//下载srtp包,WebRTC加密通话需要
wgethttp://www.digip.org/jansson/releases/jansson-2.11.tar.gz//asterisk编译需要
wgethttps://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz//下载opus包,为WebRTC提供高质量的通话编码
注:上述链接不确定长久有效,在链接失效的情况下,请自行查找下载链接。
在下载完成后,你的usr/local/src目录下应该有这几个压缩包,接下来就是要解压缩和编译。
//tar -zxvf +压缩包名,进行解压操作
tar -zxvf asterisk-15-current.tar.gz
tar -zxvf jansson-2.11.tar.gz
tar -zxvf opus-1.3.1.tar.gz
tar -zxvf v1.5.4.tar.gz
解压完成后,在文件夹/usr/local/src目录下应该成功的多出了4个文件夹,使用ls查看,大概如下图所显示
接下来进行编译步骤,必须先编译除asterisk以外的包,再对asterisk进行编译
在/usr/local/src目录下:
cd libsrtp-1.5.4
./configure
make
make install
在/usr/local/src目录下:
cd opus-1.3.1
./configure
make
make install
在/usr/local/src目录下:
cd jansson-2.11
./configure
make
make install
现在已经安装好了Asterisk前置包,接下来进行asterisk的安装
在/usr/local/src目录下:
cd asterisk-15.7.3
./configure
注意:在编译过程中,会下载一个.bz2格式包,下载时间可能会比较长,等待时间由网速而定
出现asterisk的星号标识,就代表asterisk编译的第一步成功了,接下来在该目录下使用
make
make install
make samples
一步一步的进行编译
在编译完成后通过命令我们就可以启动asterisk了
asterisk -vvvvvvvvvvvvvvvvgc //v代表等级,v越多显示信息越多
接下来,我们检查一下asterisk模块的加载是否正常,其中最重要的模块主要有以下几个,
res_crypto.so
res_http_websocket.so
res_pjsip_transport_websocket.so
codec_opus.so
在CentOS下使用asterisk -r进入asterisk cil页面,cli页面下输入“!”退出
进入前
进入后
使用module show like + 模块名 查看模块
注:笔者在安装完asterisk发现,oups模块没能正常的加载上,发现是在/usr/lib/asterisk/modules路径下没有oups.so的语言格式模块,于是手动下载codec_opus.so模块并加载,加载成功的可以省略该步骤。
转到链接, http://downloads.digium.com/pub/telephony/codec_opus/在这里寻找所对应asterisk版本的opus模块。在本次测试环境中使用的是codec_opus-15.0_1.3.0-x86_64.tar.gz
cd /usr/local/src/
wgethttp://downloads.digium.com/pub/telephony/codec_opus/asterisk-15.0/x86-64/codec_opus-15.0_1.3.0-x86_64.tar.gz
tar -zxvf codec_opus-15.0_1.3.0-x86_64.tar.gz //解压
cd codec_opus-15.0_1.3.0-x86_64 //进入文件夹
cp codec_opus.so /usr/lib/asterisk/modules
//将codec_opus.so文件复制到Asterisk模块目录中
cp codec_opus_config-en_US.xml /var/lib/asterisk/documentation/thirdparty
//将codec_opus_config-en_US.xml文件复制到Asterisk外部文档目录中
asterisk -r //进入asterisk
core restart now //重启asterisk
asterisk -r
core reload //重新加载模块
module show like codec_opus.so //查看模块状态
到此,asterisk环境正常搭建
创建证书:
在测试中,我们在网页使用的是自签证书,现在进行证书的创建以及http服务器的搭
建。Asterisk 在其 contrib / scripts 源目录中提供了一个实用脚本ast_tls_cert。我们将使用它为我们的新权限签署的Asterisk制作自签名证书颁发机构和服务器证书。
mkdir /etc/asterisk/keys //创建证书存放路径,请记住你的证书路径!
cd /usr/local/src/asterisk-15.7.3 //进入asterisk源目录
contrib/scripts/ast_tls_cert -C 192.168.1.49 -O hiastar -d /etc/asterisk/keys/
//创建证书-C 后接asterisk的IP地址-O后接组织名-d后接存放路径。
注意:脚本运行成功时,系统将提示您为CA密钥设置密码,之后系统会要求您重
复输入相同的密码短语几次。出现下图提示后,证书创建成功
cd /etc/asterisk/keys/
ls //查看证书是否创建,你的文件夹中应该有这几个文件
接下来配置Asterisk的内置HTTP守护进程
cd /etc/asterisk/
vim http.conf
//配置文件如下
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/asterisk.crt //你的证书路径
tlsprivatekey=/etc/asterisk/keys/asterisk.key //你的证书路径
现在我们将asterisk重新启动,之后查看tls服务器是否运行
asterisk -vvvvgc
http show status
出现了红框内的提示,则代表tls服务器正常运行
之后验证是否能访问证书页面:
点击高级
点击继续前往
到现在,证书的创建,及浏览器加载完成
接下来,我们将创建wss的通道以及pjsip.conf的账号,供sipML5登陆:
现在,我们需要创建一个pjsip的通道,以及PJSIP账号
注意:“//”及后接内容记得删除
cd /etc/asterisk
vim pjsip.conf
//配置文件如下
[transport-wss]
type=transport
protocol=wss
bind=0.0.0.0
[600]
type=aor
max_contacts=5
remove_existing=yes
[600]
type=auth
auth_type=userpass
username=600 //分机账号
password=600 //分机密码
[600]
type=endpoint
aors=600
auth=600
use_avpf=yes
webrtc=yes
media_encryption=dtls
dtls_ca_file=/etc/asterisk/keys/ca.crt
dtls_cert_file=/etc/asterisk/keys/asterisk.pem
dtls_verify=fingerprint
dtls_setup=yes
ice_support=yes //ice功能确保打开
use_avpf=yes
force_avp=yes
media_use_received_transport=yes
rtcp_mux=yes
context=li3 //这边选择引用的extension拨号规则
allow=opus,ulaw
//在https://wiki.asterisk.org/wiki/display/AST/Asterisk+15+Configuration_res_pjsip官网,有对各参数进行详细说明,请自行查阅
配置完成图
sipML5客户端登陆:
点击后,进入下一个页面
在配置完成后,点击专家模式
按图中所勾选选型,在第一行中输入wss://asterisk ip地址:8089/ws,完成后点击save!返回第二个页面。
点击login,若出现Connected则代表登陆成功。
登陆成功后,我们检查后台信息,若有红框内的内容则代表登陆正常。
现在,我们说明登陆异常情况:
当出现服务器不可达提升时,请检查你是否添加了自签证书,以及asterisk是否启动,未添加自签证书或者没启动asterisk是无法正常登陆的。同时在asterisk中不能看到报错信息。
当出现这个提升时,代表你的密码输入错误,在asterisk可以看到信息
现在我们以及成功了一大半了,现在我们进行sipML5的通讯测试,在测试中我们将再创建一台sipML5的分机,eyeBame进行通讯测试。
cd /etc/asterisk
vim pjsip.conf
//配置文件如下
[601]
type=aor
max_contacts=5
remove_existing=yes
[601]
type=auth
auth_type=userpass
username=601
password=601
[601]
type=endpoint
aors=601
auth=601
use_avpf=yes
webrtc=yes
media_encryption=dtls
dtls_ca_file=/etc/asterisk/keys/ca.crt
dtls_cert_file=/etc/asterisk/keys/asterisk.pem
dtls_verify=fingerprint
dtls_setup=yes
ice_support=yes
use_avpf=yes
force_avp=yes
media_use_received_transport=yes
rtcp_mux=yes
context=li3
allow=opus,ulaw
//sipML5分机创建
软电话分机创建:
//配置文件如下
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
[777]
type=endpoint
context=li3
disallow=all
allow=alaw,ulaw
transport=udp-transport
auth=auth777
aors=777
[auth777]
type=auth
auth_type=userpass
password=777
username=777
[777]
type=aor
max_contacts=5
配置文件如图所示。
现在我们编写简单的测试拨号规则:
cd /etc/asterisk
vim extensions.conf
//配置文件如下
[li3] //请与之前创建分机的contaxt名字保持一致
exten =>600,1,Dial(pjsip/600)
exten =>600,2,hangup()
exten =>601,1,Dial(pjsip/601)
exten =>601,2,hangup()
exten =>777,1,Dial(pjsip/777)
exten =>777,2,hangup()
配置完成后如图
cd /etc/asterisk
vim rtp.conf
//配置文件如下
现在进行通话测试,拓扑图如下:
现在注册eyebeam软电话
点击,之后选择“sip账号设定”进入以下页面
下一步配置账号
现在软电话注册成功!可以登录到asterisk cli下查看上线日志
软电话上线日志
现在登录sipML5客户端
点击login登录,出现Connected代表登陆成功,在asterisk cli后台查看上线日志
现在进行sipML5呼叫软电话的测试
在右边输入你要拨打的号码,点击call点击Audio
记得在弹出的选型中,运行你的页面使用麦克风的权限!!
在右边的提示中,你的拨号会有三个状态的变更
这个状态代表在寻找拨号规则
这个状态代表拨号规则正常,正在振铃,对端会收到提示
点击接听
当对方摘机后,状态会变成in call代表通话以及建立
在asterisk cli上可以查看到拨号信息
现在进行sipML5客户端之间的通话测试:
输入601进行拨号,
在601的页面中会被振铃,并提示有来自600的呼叫,点击Answer呼叫建立
在asterisk cli下查看通话记录
现在,恭喜你,你已经成功的配置好了sipML5的语音通话功能,实现了WebRTC的基础功能
现在进行进一步的测试,asterisk对接语音网关,让WebRTC可以呼入到运营商,运营商可以呼入到分机。
拓扑图
网关设置:
点击SIP服务器,进入以下页面主用SIP服务器地址设置为asterisk ip地址端口使用默认的5060,你也可以中继修改。
点击端口,添加
进入端口的设置中,在端口中,输入运营商线路接入到网关的端口,并设置代拨号码,保存
添加IP中继,点击呼叫和路由,点击IP中继
中继配置,索引与名称随意配置,请记住,对端配置为asterisk ip地址和端口
Ip-tel路由配置:索引及描述随意,呼叫来源选择之前配置好的IP中继,主叫和被叫前缀为any
Tel-ip路由配置:索引及描述随意,呼叫来源选择any或者运营商接入到网关的端口,主叫和被叫前缀为any,呼叫目标选择ip中继
到此,网关侧的配置完成
Asterisk侧配置
中继配置:同样的,asterisk也需要配置中继指向网关设备,配置如下
cd /etc/asterisk
vim pjsip.conf
//pjsip.conf
[pstn] //中继名称随意,需要保持一致
type=aor
[pstn]
type=endpoint
transport=udp-transport
context=li3 //调用同一条拨号规则
disallow=all
allow=alaw,ulaw
aors=pstn
direct_media=no
[pstn]
type=identify
endpoint=pstn
match=192.168.1.33 //输入网关ip地址
配置完成后,应该如下图所示
现在我们在li3条目下增加运营商呼入呼出的拨号规则:
cd/etc/asterisk
vim extensions.conf
[li3]
exten =>015500000000,1,Dial(PJSIP/${EXTEN}@pstn)
//exten=>运营商号码,1,Dial(PJSIP/${EXTEN}@中继名称)
exten =>015500000000,2,Dial(PJSIP/pstn/sip:1000${EXTEN:1}@192.168.1.33)
//exten =>运营商号码,2,Dial(PJSIP/中继名称/sip:代拨号码${EXTEN:1}@网关地址)
exten =>015500000000,3,hangup()
exten =>1000,1,Dial(PJSIP/600)
//exten =>代拨号码,1,Dial(PJSIP/接听的分机号码)
exten =>1000,2,hangup()
注:本地号码
不需要加0,异地号码需要加0
现在你的拨号规则配置文件应该如下
配置保持后,记得重启asterisk,使得配置生效
现在进行呼叫测试:
登陆sipML5客户端
当你手机成功接通电话后,通话成功建立。
这个时候可以进入asterisk cli页面下,查看拨号信息
现在,你已经成功的拨打了一个WebRTC呼叫到运营商的电话!
呼入测试:
在你的手机上,拨打网关所接入的pstn线路号码,进行呼入测试
当你的sipML5客户端收到拨号时,点击answer接听拨号,成功建立通话
这个时候可以进入asterisk cli页面下,查看信息
注意事项:
1在每一步.conf文件修改后,记得重启使得配置生效
2测试时,建议直接关闭防火墙,避免rtp协商失败导致无语音
3以上配置拨号规则为简单测试用拨号规则
4 WebRTC对环境要求较高,在本次的测试环境语音通信成功,不保证其他环境下通信成功
SIPlab@知识星球学习SIP语音相关技术
asterisk@知识星球免费获取关于Asterisk的完整知识资料
关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享
Asterisk freepbx,FreeSBC技术文档: www.freepbx.org.cn
融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com
Asterisk/FreePBX中国合作伙伴,官方qq技术分享群(3000人):589995817
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/46303.html