webrtc 代码_开源Asterisk媒体服务器支持WebRTC客户端

如何配置Asterisk支持WebRTC 客户端

0bcc5544a8fa1069ef57d23c74d891f5.png

浏览器WebRTC呼叫对接Asterisk平台

总览

本章节内容将指导用户通过一步步配置Asterisk来支持WebRTC 客户端。

笔者已经在微信公众号发布了关于如何配置Asterisk/FreePBX来支持WebRTC的示例,通过配置语音板卡,语音网关支持WebRTC/SIP的呼入呼出。读者可以访问微信公众号:asterisk-cn获得更多内容。现在,我们主要讨论结果构建的步骤。

配置Asterisk,用户将需要执行以下几个主要的步骤。

  • 修改和创建一个 Asterisk HTTPS TLS 服务器端。
  • 创建一个PJSIP WebSocket transport.
  • 创建一个PJSIP Endpoint,AOR 和Authentication 对象来表示一个WebRTC客户端。

配置前准备

Asterisk 安装:

用户应该已经安装好了一个可以工作的Asterisk,使用了chan_pjsip通道。以前的chan_sip也可以测试使用,但是,建议用户使用chan_pjsip作为今后测试的系统通道。安装的版本最好是基于Asterisk-15.5以上版本。用户安装的Asterisk可以是源代码安装方式或者通过其他Asterisk发布版本。如果没有安装的话,用户参考安装文档安装好这些我们要求的内容。满足了以上所说条件后,几个核心的模块也需要安装,主要可以支持websockets 和WebRTC:

  • res_crypto
  • res_http_websocket
  • res_pjsip_transport_websocket
  • codec_opus (optional but highly recommended for high quality audio)

我们推荐用户通过Asterisk源代码安装的方式来安装Asterisk,这样可以确保所需要的模块顺利安装

Certificates:

从技术的角度来看,一个客户端可以使用WebRTC通过非安全的websocket连接Asterisk。但是,因为WebRTC客户端很多部署在外网环境中,为了安全的考虑,在实际使用场景中,大部分的浏览器需要基于TLS支持的websocket。用户可以使用自签证书来创建Asterisk TLS server,浏览器可以接受这些证书,也可以工作。如果部署在生产环境的话,笔者强烈建议用户使用可信任的安全证书或者一些免费证书,例如 LetsEncrypt 或者其他商业安全证书。

如果用户已经有了证书文件 (certificate,key,CA certificate),是否是自签证书或者其他可信任的证书,用户可以跳获此部分内容,如果需要创建一个自签证书的话,需要继续下面的步骤。

创建证书Certificates

Asterisk 提供了一个脚本工具ast_tls_cert ,此文件安装的默认路径是 contrib/scripts 代码路径。我们将使用此脚本工具来创建一个自签证书签权和对Asterisk的证书进行签权处理。

使用工作台,访问Asterisk系统后台,用户需要切换到脚本文件的工作路径下执行脚本命令。用户需要输入一个组织名称和一个域名/IP地址来创建CA 密钥。建议用户使用容易记忆的名称来替换示例中的名称。使用用户自己的IPPBX主机名称或者IP地址替换掉 "pbx.example.com" ,使用自己的组织名称替换掉"My rganization"。

创建好证书以后,这些证书会默认安装在Asterisk的默认路径下,后续配置文件将自己调用这些文件。

$ sudo mkdir /etc/asterisk/keys$ sudo contrib/scripts/ast_tls_cert -C pbx.example.com -O "My Organization" -d /etc/asterisk/keys No config file specified, creating '/etc/asterisk/keys/tmp.cfg'You can use this config file to create additional certs withoutre-entering the information for the fields in the certificateCreating CA key /etc/asterisk/keys/keys/ca.keyGenerating RSA private key, 4096 bit long modulus............................................................................++.....................++e is 65537 (0x010001)Enter pass phrase for /etc/asterisk/keys/ca.key:********Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:********Creating CA certificate /etc/asterisk/keys/ca.crtEnter pass phrase for /etc/asterisk/keys/ca.key:********Creating certificate /etc/asterisk/keys/asterisk.keyGenerating RSA private key, 1024 bit long modulus........++++++............++++++e is 65537 (0x010001)Creating signing request /etc/asterisk/keys/asterisk.csrCreating certificate /etc/asterisk/keys/asterisk.crtSignature oksubject=CN = pbx.example.com, O = My OrganizationGetting CA Private KeyEnter pass phrase for /etc/asterisk/keys/ca.key:********Combining key and crt into /etc/asterisk/keys/asterisk.pem$ ls -l /etc/asterisk/keystotal 32-rw------- 1 root root 1204 Mar  4  2019 asterisk.crt-rw------- 1 root root  574 Mar  4  2019 asterisk.csr-rw------- 1 root root  887 Mar  4  2019 asterisk.key-rw------- 1 root root 2091 Mar  4  2019 asterisk.pem-rw------- 1 root root  149 Mar  4  2019 ca.cfg-rw------- 1 root root 1736 Mar  4  2019 ca.crt-rw------- 1 root root 3311 Mar  4  2019 ca.key-rw------- 1 root root  123 Mar  4  2019 tmp.cfg
HTTP 服务器端将使用asterisk.crt 和asterisk.key 文件配置。

Asterisk 配置

配置Asterisk内置的HTTP 守护进程

如果需要和websocket 客户端进行通信的话, Asterisk需要使用自己内置的HTTP daemon来实现。因此,我们需要进一步配置内置的http服务器进程,具体配置文件路径在/etc/asterisk/http.conf ,注意这里使用的端口和证书路径,还有开启证书设置。配置较为的参数如下:

[general]enabled=yesbindaddr=0.0.0.0bindport=8088tlsenable=yestlsbindaddr=0.0.0.0:8089tlscertfile=/etc/asterisk/keys/asterisk.crttlsprivatekey=/etc/asterisk/keys/asterisk.key

说明:如果用户没有使用刚才我们自己创建的自签证书的话,用户需要根据证书提供商说明的证书路径,修改 "tlscertfile"和 "tlsprivatekey",修改为相应的证书存放路径。

修改好以后,保存文件。如果重新启动Asterisk,并且确认TLS server是无错误信息,正常运行状态:

现在,HTTPS 服务器端已经启动,TLS绑定的端口是 [::]:8089 并且开启了 /ws URI 。

配置PJSIP

前面笔者已经说明,用户需要首先成功安装了chan_pjsip,并且已经基本熟悉了相关配置文件。如果用户不熟悉的话,请参考配置文件先了解配置。

PJSIP WSS Transport

这里,我们需要针对websockets定义一个基本的 PJSIP Transport。

PJSIP Endpoint,AOR和Auth

我们需要创建一个基本的PJSIP对象实体来表示我们的客户端。这里,客户端称之为 webrtc_client ,用户可以定义自己的名称,和Asterisk的分机号码类似。配置中,我们仅需要最小配置即可方便测试。注意,pjsip.conf文件中可以支持同一名称的多项实体示例,只要它们的类型不同就可以。为了用户使用方便,最好还是有各自不同含义明了的客户端名称。

在配置页面有非常详细地配置介绍,这里简要重复一下:

  • 声明了一个endpoint,关联前面设置的aor和auth。
  • 提示Asterisk 使用了AVPF profile (secure RTP)。
  • 创建了媒体加密的DTLS method。
  • 指定了证书文件,实现TLS协商和相关参数。
  • 开启了 ICE support
  • 通知 Asterisk 发送媒体使用同样的传输方式,此传输方式和我们接收到一致。
  • 在同一socket开启RTP的mux-ing和RTCP events。
  • 通过拨号规则中的“default”,从此endpoint接受呼叫。
  • 关闭相关的编码,开启可选编码,例如使用Opus (这里我们假设Opus codec模块已经成功安装,如果没有安装的话,用户需要重新编译Asterisk,并且添加Opus模块的支持。

重启Asterisk

重新启动Asterisk,如果用户有防火墙设置的话,开启支持TCP port 8089,主要客户端可以通过8089访问到asterisk。

总结

到这里为止,用户的 WebRTC 客户端应该可以注册和实现呼叫功能。如果用户使用的是自签证书的话,浏览器可能不允许访问连接,因为此URL不是一个由用户提供的URL地址,用户可能收到一些提示告警。用户需要让浏览器接受此证书设置,可以直接访问"https://pbx.example.com:8089/ws" 接受访问。通常情况下,因为用户知道这是自己的自签证书,浏览器会提示告警,用户可以接受这个自签证书,接受这个意外操作。如果用户的证书是由其他证书提供商生成的证书,用户可以导入证书,并且保存起来以便后用。具体证书提供商的配置方式,网络有很多证书提供商的官方文档,用户可以查阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值