深圳市宝安区华美居

0086-18665301040

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

本文章介绍如何在Centos环境下配置AsteriskWebRTC和网关,实现通过WebRTC呼叫外部手机号码,外部电话呼入,WebRTC接听的功能。同时,内部SIP分机和WebRTC之间实现互打拨号。很多用户可以通过WebRTC实现和企业内部应用集成,方便企业用户对业务方面的支持,同时极大降低了业务集成的开发难度。

测试环境

系统CentOS-7

SIP 媒体服务器:asterisk-15.7.2

客户端sipML5网页端、eyeBeam

谷歌浏览器

内网呼叫:SIPWebRTC在同一内网环境

通过网关呼入呼出

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

更多关于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

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

完成后如上图表示,以下下载图省略

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目录下应该有这几个压缩包,接下来就是要解压缩和编译。

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

//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查看,大概如下图所显示

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

接下来进行编译步骤,必须先编译除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格式包,下载时间可能会比较长,等待时间由网速而定

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

出现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页面下输入“!”退出

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

进入前

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

进入后

使用module show like +模块名 查看模块

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

注:笔者在安装完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 //查看模块状态

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

到此,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后接asteriskIP地址-O后接组织名-d后接存放路径。

注意:脚本运行成功时,系统将提示您为CA密钥设置密码,之后系统会要求您重

复输入相同的密码短语几次。出现下图提示后,证书创建成功

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

cd /etc/asterisk/keys/

ls //查看证书是否创建,你的文件夹中应该有这几个文件

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

接下来配置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服务器正常运行

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

之后验证是否能访问证书页面:

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击高级

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击继续前往

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

到现在,证书的创建,及浏览器加载完成

接下来,我们将创建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官网,有对各参数进行详细说明,请自行查阅

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

配置完成图

sipML5客户端登陆:

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击后,进入下一个页面

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

在配置完成后,点击专家模式

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

按图中所勾选选型,在第一行中输入wss://asterisk ip地址:8089/ws,完成后点击save!返回第二个页面。

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击login,若出现Connected则代表登陆成功。

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

登陆成功后,我们检查后台信息,若有红框内的内容则代表登陆正常。
现在,我们说明登陆异常情况:

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

当出现服务器不可达提升时,请检查你是否添加了自签证书,以及asterisk是否启动,未添加自签证书或者没启动asterisk是无法正常登陆的。同时在asterisk中不能看到报错信息。

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

当出现这个提升时,代表你的密码输入错误,在asterisk可以看到信息

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在我们以及成功了一大半了,现在我们进行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

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

配置文件如图所示。

现在我们编写简单的测试拨号规则:

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()

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

配置完成后如图

cd /etc/asterisk

vim rtp.conf

//配置文件如下

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在进行通话测试,拓扑图如下:

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在注册eyebeam软电话

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击,之后选择“sip账号设定”进入以下页面

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

下一步配置账号

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在软电话注册成功!可以登录到asterisk cli下查看上线日志

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

软电话上线日志

现在登录sipML5客户端

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击login登录,出现Connected代表登陆成功,在asterisk cli后台查看上线日志

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在进行sipML5呼叫软电话的测试

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

在右边输入你要拨打的号码,点击call点击Audio

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

记得在弹出的选型中,运行你的页面使用麦克风的权限!!

在右边的提示中,你的拨号会有三个状态的变更

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

这个状态代表在寻找拨号规则

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

这个状态代表拨号规则正常,正在振铃,对端会收到提示

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击接听

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

当对方摘机后,状态会变成in call代表通话以及建立

asterisk cli上可以查看到拨号信息

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在进行sipML5客户端之间的通话测试:

输入601进行拨号,

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

601的页面中会被振铃,并提示有来自600的呼叫,点击Answer呼叫建立

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

asterisk cli下查看通话记录

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在,恭喜你,你已经成功的配置好了sipML5的语音通话功能,实现了WebRTC的基础功能

现在进行进一步的测试,asterisk对接语音网关,让WebRTC可以呼入到运营商,运营商可以呼入到分机。

拓扑图

网关设置

点击SIP服务器,进入以下页面主用SIP服务器地址设置为asterisk ip地址端口使用默认的5060,你也可以中继修改。

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

点击端口,添加

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

进入端口的设置中,在端口中,输入运营商线路接入到网关的端口,并设置代拨号码,保存

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

添加IP中继,点击呼叫和路由,点击IP中继

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

中继配置,索引与名称随意配置,请记住,对端配置为asterisk ip地址和端口

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

Ip-tel路由配置:索引及描述随意,呼叫来源选择之前配置好的IP中继,主叫和被叫前缀为any

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

Tel-ip路由配置:索引及描述随意,呼叫来源选择any或者运营商接入到网关的端口,主叫和被叫前缀为any,呼叫目标选择ip中继

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

到此,网关侧的配置完成

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地址

配置完成后,应该如下图所示

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

现在我们在li3条目下增加运营商呼入呼出的拨号规则:

cd/etc/asterisk

vim extensions.conf

[li3]

exten =>015500000000,1,Dial(PJSIP/${EXTEN}@pstn)

//exten=>运营商号码,1Dial(PJSIP/${EXTEN}@中继名称)

exten =>015500000000,2,Dial(PJSIP/pstn/sip:1000${EXTEN:1}@192.168.1.33)

//exten =>运营商号码,2Dial(PJSIP/中继名称/sip:代拨号码${EXTEN:1}@网关地址)

exten =>015500000000,3,hangup()

exten =>1000,1,Dial(PJSIP/600)

//exten =>代拨号码,1Dial(PJSIP/接听的分机号码)

exten =>1000,2,hangup()

注:本地号码

不需要加0,异地号码需要加0

现在你的拨号规则配置文件应该如下

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

配置保持后,记得重启asterisk,使得配置生效

现在进行呼叫测试:

登陆sipML5客户端

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

当你手机成功接通电话后,通话成功建立。

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

这个时候可以进入asterisk cli页面下,查看拨号信息

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫现在,你已经成功的拨打了一个WebRTC呼叫到运营商的电话!

呼入测试

在你的手机上,拨打网关所接入的pstn线路号码,进行呼入测试

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

当你的sipML5客户端收到拨号时,点击answer接听拨号,成功建立通话

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

这个时候可以进入asterisk cli页面下,查看信息

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

注意事项:

1在每一步.conf文件修改后,记得重启使得配置生效

2测试时,建议直接关闭防火墙,避免rtp协商失败导致无语音

3以上配置拨号规则为简单测试用拨号规则

4 WebRTC对环境要求较高,在本次的测试环境语音通信成功,不保证其他环境下通信成功

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

CentOS环境下实现Asterisk-SIP-WebRTC-PSTN呼叫

SIPlab@知识星球学习SIP语音相关技术

asterisk@知识星球免费获取关于Asterisk的完整知识资料

关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享

Asterisk freepbx,FreeSBC技术文档: www.freepbx.org.cn

融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com

Asterisk/FreePBX中国合作伙伴,官方qq技术分享群(3000人):589995817

联系电话-18665301040
客服-3
客服-2
客服-1