您当前的位置是:  首页 > 资讯 > 文章精选 >
 首页 > 资讯 > 文章精选 >

在CentOS环境下编译asterisk和WebRTC实现通过网关呼入呼出

2019-08-01 09:15:29   作者:james.zhu   来源:Asterisk开源派   评论:0  点击:


  本文章介绍如何在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包
  完成后如上图表示,以下下载图省略
  wget //下载srtp包,WebRTC加密通话需要
  wget //asterisk编译需要
  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
  • 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格式包,下载时间可能会比较长,等待时间由网速而定
  出现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对环境要求较高,在本次的测试环境语音通信成功,不保证其他环境下通信成功
  关注本文作者:James.zhu@hiastar.com
  SIPlab@知识星球
  微信公众号:asterisk-cn
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

专题

CTI论坛会员企业