龙空技术网

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

SIP实验室 166

前言:

如今姐妹们对“webrtccentos”大体比较讲究,咱们都需要知道一些“webrtccentos”的相关内容。那么小编在网上网罗了一些对于“webrtccentos””的相关知识,希望大家能喜欢,小伙伴们快快来学习一下吧!

​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 //选择下载路径

wget //使用wget + 下载链接,下载asterisk包

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

wget下载srtp包,WebRTC加密通话需要

wget编译需要

wget下载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/

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 //查看模块状态

到此,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

//在官网,有对各参数进行详细说明,请自行查阅

配置完成图

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技术文档:

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

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

标签: #webrtccentos