本文章介绍如何在Centos环境下配置Asterisk,WebRTC和网关,实现通过WebRTC呼叫外部手机号码,外部电话呼入,WebRTC接听的功能。同时,内部SIP分机和WebRTC之间实现互打拨号。很多用户可以通过WebRT
实现和企业内部应用集成,方便企业用户对业务方面的支持,同时极大降低了业务集成的开发难度。
实现和企业内部应用集成,方便企业用户对业务方面的支持,同时极大降低了业务集成的开发难度。
测试环境:
- 系统CentOS-7
- 环境asterisk-15.7.2
- 客户端 sipML5网页端、eyeBeam
- 谷歌浏览器
- 内网呼叫:SIP,WebRTC在同一内网环境
安装步骤:
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 //选择下载路径
wget //使用wget + 下载链接,下载asterisk包
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093131919.png)
完成后如上图表示,以下下载图省略
wget //下载srtp包,WebRTC加密通话需要
wget //asterisk编译需要
wget //下载opus包,为WebRTC提供高质量的通话编码
注:上述链接不确定长久有效,在链接失效的情况下,请自行查找下载链接。
在下载完成后,你的usr/local/src目录下应该有这几个压缩包,接下来就是要解压缩和编译。
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093133508.png)
- //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查看,大概如下图所显示
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093133463.png)
接下来进行编译步骤,必须先编译除asterisk以外的包,再对asterisk进行编译
在/usr/local/src目录下:
- cd libsrtp-1.5.4
- ./configure
- make
- ake 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格式包,下载时间可能会比较长,等待时间由网速而定
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093136808.png)
出现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页面下输入“!”退出
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093136952.png)
进入前
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094009540.jpg)
进入后
使用module show like + 模块名 查看模块
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093136214.png)
注:笔者在安装完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/
wget
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 //查看模块状态
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093137737.png)
到此,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密钥设置密码,之后系统会要求您重复输入相同的密码短语几次。出现下图提示后,证书创建成功
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093139537.png)
cd /etc/asterisk/keys/
ls //查看证书是否创建,你的文件夹中应该有这几个文件
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801093132102.png)
接下来配置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服务器正常运行
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094530869.png)
之后验证是否能访问证书页面:
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094531979.png)
点击高级
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094531271.png)
点击继续前往
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094532760.png)
到现在,证书的创建,及浏览器加载完成
接下来,我们将创建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
//在官网,有对各参数进行详细说明,请自行查阅
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801095034718.png)
配置完成图
sipML5客户端登陆:
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094534145.png)
点击后,进入下一个页面
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094535743.png)
在配置完成后,点击专家模式
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801094536955.png)
按图中所勾选选型,在第一行中输入wss://asterisk ip地址:8089/ws,完成后点击save!返回第二个页面。
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801095804793.png)
点击login,若出现Connected则代表登陆成功。
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801095806653.png)
登陆成功后,我们检查后台信息,若有红框内的内容则代表登陆正常。
现在,我们说明登陆异常情况:
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801095806223.png)
当出现服务器不可达提升时,请检查你是否添加了自签证书,以及asterisk是否启动,未添加自签证书或者没启动asterisk是无法正常登陆的。同时在asterisk中不能看到报错信息。
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801095807163.png)
当出现这个提升时,代表你的密码输入错误,在asterisk可以看到信息
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801101517442.png)
现在我们以及成功了一大半了,现在我们进行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
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801100648548.png)
配置文件如图所示。
现在我们编写简单的测试拨号规则:
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()
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801101720896.png)
配置完成后如图
cd /etc/asterisk
vim rtp.conf
//配置文件如下
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801101924886.png)
现在进行通话测试,拓扑图如下:
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801101925862.png)
现在注册eyebeam软电话
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102234861.png)
点击,之后选择“sip账号设定”进入以下页面
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102251261.png)
下一步配置账号
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102304693.png)
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102324324.png)
现在软电话注册成功!可以登录到asterisk cli下查看上线日志
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102423318.png)
软电话上线日志
现在登录sipML5客户端
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102526164.png)
点击login登录,出现Connected代表登陆成功,在asterisk cli后台查看上线日志
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801101946232.png)
现在进行sipML5呼叫软电话的测试
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801101948170.png)
在右边输入你要拨打的号码,点击call点击Audio
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102650826.png)
记得在弹出的选型中,运行你的页面使用麦克风的权限!!
在右边的提示中,你的拨号会有三个状态的变更
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102651773.png)
这个状态代表在寻找拨号规则
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102651773.png)
这个状态代表拨号规则正常,正在振铃,对端会收到提示
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102835440.png)
点击接听
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102659912.png)
当对方摘机后,状态会变成in call代表通话以及建立
在asterisk cli上可以查看到拨号信息
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102702242.png)
现在进行sipML5客户端之间的通话测试:
输入601进行拨号,
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102703452.png)
在601的页面中会被振铃,并提示有来自600的呼叫,点击Answer呼叫建立
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102703317.png)
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102704625.png)
在asterisk cli下查看通话记录
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801102707944.png)
现在,恭喜你,你已经成功的配置好了sipML5的语音通话功能,实现了WebRTC的基础功能
现在进行进一步的测试,asterisk对接语音网关,让WebRTC可以呼入到运营商,运营商可以呼入到分机。
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103052184.png)
拓扑图
网关设置:
点击SIP服务器,进入以下页面主用SIP服务器地址设置为asterisk ip地址端口使用默认的5060,你也可以中继修改。
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103053303.png)
点击端口,添加
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103053950.png)
进入端口的设置中,在端口中,输入运营商线路接入到网关的端口,并设置代拨号码,保存
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103054315.png)
添加IP中继,点击呼叫和路由,点击IP中继
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103055569.png)
中继配置,索引与名称随意配置,请记住,对端配置为asterisk ip地址和端口
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103055867.png)
Ip-tel路由配置:索引及描述随意,呼叫来源选择之前配置好的IP中继,主叫和被叫前缀为any
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103056120.png)
Tel-ip路由配置:索引及描述随意,呼叫来源选择any或者运营商接入到网关的端口,主叫和被叫前缀为any,呼叫目标选择ip中继
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103057518.png)
到此,网关侧的配置完成
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地址
配置完成后,应该如下图所示
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103058212.png)
现在我们在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
现在你的拨号规则配置文件应该如下
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103100342.png)
配置保持后,记得重启asterisk,使得配置生效
现在进行呼叫测试:
登陆sipML5客户端
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103521907.png)
当你手机成功接通电话后,通话成功建立。
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103522127.png)
这个时候可以进入asterisk cli页面下,查看拨号信息
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103525323.png)
现在,你已经成功的拨打了一个WebRTC呼叫到运营商的电话!
呼入测试:
在你的手机上,拨打网关所接入的pstn线路号码,进行呼入测试
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103526652.png)
当你的sipML5客户端收到拨号时,点击answer接听拨号,成功建立通话
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103527346.png)
这个时候可以进入asterisk cli页面下,查看信息
![](http://www.ctiforum.com/uploadfile/2019/0801/20190801103529572.png)
注意事项:
- 在每一步。conf文件修改后,记得重启使得配置生效
- 测试时,建议直接关闭防火墙,避免rtp协商失败导致无语音
- 以上配置拨号规则为简单测试用拨号规则
- WebRTC对环境要求较高,在本次的测试环境语音通信成功,不保证其他环境下通信成功
SIPlab@知识星球
微信公众号:asterisk-cn