原文地址:https://wiki.asterisk.org/wiki/display/AST/WebRTC+tutorial+using+SIPML5


教程概述

本教程演示了Asterisk中基本的WebRTC支持和功能。Asterisk将配置为支持远程WebRTC客户端sipml5客户端,用于在Firefox Web浏览器中拨打/从Asterisk拨打电话。

对于本教程,假设您以root用户身份登录  。还假定您正在运行的版本至少为13.15.0或14.4.0,并具有最新版本的Firefox,例如54.0。

 

检查星号依赖关系

要将sipml5客户端连接到Asterisk,Asterisk必须已经构建,支持  res_crypto,  res_http_websocketres_pjsip_transport_websocket 资源模块。为了可选地在Asterisk和sipml5客户端之间启用高质量的呼叫,需要Asterisk的  Opus编解码器模块。如果Opus没有安装到星号,低质量的呼叫仍然是可能的。要检查这些可以执行的模块的存在:

#ls -w 1 / usr / lib / asterisk / modules / {* crypto *,* websocket *,* opus *}

你应该看到类似的东西:

/usr/lib/asterisk/modules/codec_opus.so 
/usr/lib/asterisk/modules/res_crypto.so 
/usr/lib/asterisk/modules/res_format_attr_opus.so 
/usr/lib/asterisk/modules/res_http_websocket.so 
/ usr /lib/asterisk/modules/res_pjsip_transport_websocket.so

如果没有找到这些模块,请返回到您选择的Asterisk配置。 

接下来,为了确保这些模块由Asterisk加载,您可以执行以下操作:

# asterisk -rx "module show like crypto"
# asterisk -rx "module show like websocket"
# asterisk -rx "module show like opus"

你应该看到类似的东西:

# asterisk -rx "module show like crypto"
Module                         Description                              Use Count  Status      Support Level
res_crypto.so                  Cryptographic Digital Signatures         1          Running              core
1 modules loaded

# asterisk -rx "module show like websocket"
Module                         Description                              Use Count  Status      Support Level
res_http_websocket.so          HTTP WebSocket Support                   3          Running          extended
res_pjsip_transport_websocket.so PJSIP WebSocket Transport Support        0          Running              core
2 modules loaded
 
# asterisk -rx "module show like opus"
Module                         Description                              Use Count  Status      Support Level
codec_opus.so                  OPUS Coder/Decoder                       0          Running          extended
res_format_attr_opus.so        Opus Format Attribute Module             1          Running              core
3 modules loaded

如果未加载模块,请检查  /etc/asterisk/modules.conf配置文件,以确保它们未被显式禁用。

图标

Opus编解码器模块可以使用Asterisk的menuselect工具直接安装,可以在Codec Translators类别的External部分找到。或者,您可以在使用该实用程序,或直接浏览到下载服务器

 

创建证书

现代浏览器需要使用TLS和  DTLS-SRTP进行WebRTC信令和媒体加密。要使星号使用TLS和DTLS-SRTP,需要加载证书。在本教程中,我们将创建一个自签名的证书颁发机构和服务器证书。有些浏览器需要使用公开签名的证书。获得公开签署的证书不属于本教程的范围。

Asterisk  在其  contrib / scripts源目录中提供了一个实用程序脚本  ast_tls_cert。我们将使用它来创建一个自我签发的证书颁发机构和Asterisk的服务器证书,由我们的新授权机构签署。

首先,让我们为我们的证书找个地方:

#mkdir / etc / asterisk / keys

接下来,调用脚本:

# ./ast_tls_cert -C pbx.example.com -O "My Super Company" -d /etc/asterisk/keys
  • “-C”选项用于定义我们的主机 - DNS名称或我们的IP地址。
  • “-O”选项定义了我们的组织名称。
  • “-d”选项是键的输出目录。
  1. 您将被要求为/etc/asterisk/keys/ca.key输入一个密码短语,放入您以后记住的内容。
  2. 这将创建/etc/asterisk/keys/ca.crt文件。
  3. 系统将要求您再次输入密码,然后将创建/etc/asterisk/keys/asterisk.key文件。
  4. 将自动生成/etc/asterisk/keys/asterisk.crt文件。
  5. 系统会要求您第三次输入密码,并且将会创建与/etc/asterisk/keys/asterisk.pem(asterisk.key和asterisk.crt文件)的组合。

然后,您可以检查您的  / etc / asterisk / keys目录,以验证新文件是否已创建,因此:

#ls -w 1 / etc / asterisk / keys

你应该看到:

asterisk.crt 
asterisk.csr 
asterisk.key 
asterisk.pem 
ca.cfg 
ca.crt 
ca.key 
tmp.cfg

 

配置Asterisk的内置HTTP守护进程

sipml5客户端使用Websocket作为其传输方法。为了与Websocket客户端进行通信,Asterisk使用其内置的HTTP守护进程。配置  /etc/asterisk/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.pem
 

在这里,我们启用了HTTP守护程序,并设置了HTTP守护进程的基本操作所需的绑定地址和端口。我们还启用了TLS支持,并设置了TLS绑定地址和端口以及服务器密钥(我们在上一步中所做的)。

要验证Web服务器是否运行,请执行以下操作:

#netstat -an | grep 8089

你应该看到:

tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN  

配置PJSIP

接下来,我们需要配置PJSIP。sipml5客户端使用Websocket作为传输,并连接到Asterisk的HTTP守护程序,但它使用SIP协议。Asterisk用于SIP通信的默认通道驱动程序是PJSIP。有关Asterisk中PJSIP的更多信息,请参阅  配置res_pjsip页面。  

PJSIP WSS运输

像Asterisk的HTTP守护程序(需要配置为监听Websocket传输),PJSIP需要配置Websocket传输。在这种情况下,我们将使用“Secure Websocket”传输标识符wss为Websocket配置PJSIP传输  。您的  /etc/asterisk/pjsip.conf中,您应该添加:

[transport-wss] 
type = transport 
protocol = wss 
bind = 0.0.0.0

PJSIP AoR和Auth

接下来,我们需要在PJSIP中配置一个实体来接受基于浏览器的sipml5客户端的注册。为此,我们将在/etc/asterisk/pjsip.conf配置文件中创建三个PJSIP对象:aorauth端点

你的  aor和你的  auth应该看起来像:

[199] 
type = aor 
max_contacts = 1 
remove_existing = yes 
 
[199] 
type = auth 
auth_type = userpass 
username = 199 
password = 199; 这是一不安全的密码

在这里,我们确定,与我们注册的事情将在内部被称为“199”,它将使用  199  和  199  作为其用户名和密码注册凭证。请注意,这不是安全的,如果您遵循这些说明,您应该选择更好的密码。

PJSIP端点

接下来,我们需要创建一个  端点对象,该对象将引用此  aor和  auth,并提供特定于WebRTC客户端的配置参数。/etc/asterisk/pjsip.conf中的端点  应该如下所示:

[199] 
type = endpoint 
aors = 199 
auth = 199 
use_avpf = 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 = actpass 
ice_support = yes 
media_use_received_transport = yes 
rtcp_mux = yes 
context = default 
disallow = all 
allow = opus 
allow = ulaw

有关这些设置参数的说明可以在  Asterisk 13 Configuration_res_pjsip页面上找到。简述:

  • 声明一个引用我们以前制作的aor和auth的端点。  
  • 通知Asterisk预期AVPF配置文件(安全RTP)
  • 设置媒体加密的DTLS方法。
  • 指定用于与此端点进行TLS协商的证书文件以及我们的验证和设置方法。
  • 启用ICE支持
  • 将星号传送到我们收到的相同的运输中。
  • 启用将RTP和RTCP事件复用到同一套接字上。
  • 将接收到的呼叫发送到名为“默认” 的Asterisk  Dialplan上下文中
  • 然后首先禁用所有的设备,然后选择性地启用Opus(假定您已经安装了本星期开始提到的Asterisk的Opus编解码器),然后G.711 u-law。

 

配置chan_sip

如果您仍然使用Asterisk的旧SIP通道驱动程序chan_sip代替现代PJSIP通道驱动程序,则可以使用以下内容来配置  sip.conf

  sip.conf示例设置
[general] 
udpbindaddr = 0.0.0.0:5060 
realm = 123.123.123.123;替换为您的星号服务器公共IP地址或主机
transport= udp,ws,wss 
[199] host = dynamic secret = 199; 这是一个不安全的密码context = default type = friend encryption = yes avpf = yes force_avp = yes icesupport = yes directmedia = no disallow = all allow = opus allow = ulaw dtlsenable = yes dtlsverify = fingerprint dtlscertfile = / etc / asterisk / keys / asterisk.pem dtlscafile = /etc/asterisk/keys/ca.crtdtlssetup = actpass rtcp_mux = yes

 

配置星号拨号计划

我们将制作一个简单的拨号计划,以从sipml5客户端接收测试呼叫。

[default]
exten => 200,1,Answer()
same => n,Playback(demo-congrats)
same => n,Hangup()

这将指示星号接听“200”的呼叫,播放名为“演示合同”的文件(包含在Asterisk的核心声音文件包中),并挂断电话。

防火墙配置

防火墙配置不在本教程的范围之内,不过这里是我简单的FireWall服务的输出,可以显示您可能需要打开的内容:

To                         Action      From
--                         ------      ----
5060                       ALLOW IN    Anywhere
8089/tcp                   ALLOW IN    Anywhere
10000:20000/udp            ALLOW IN    Anywhere

您可能希望将服务重新配置为非标准端口,或者缩小可能的源地址以实现其他安全性。

5060:这是SIP通信的标准端口
8089:这是与Asterisk内置HTTP服务器一起使用的Secure Websockets的标准端口
10000:20000:这是rtp.conf中配置的音频流的端口范围。

重新启动星号

接下来,我们将执行Asterisk的正常重新启动,在Asterisk停止之前允许进行中的呼叫完成,以便它可以接收我们对其配置所做的更改。从Linux控制台执行:

# asterisk -rx "core restart when convenient"

你会看到:

# asterisk -rx "core restart when convenient"
Waiting for inactivity to perform restart

 

浏览器和WSS

当使用WSS作为传输时,默认情况下,Chrome和Firefox将不允许您使用WSS连接到具有自签名证书的服务器。相反,您必须在Asterisk中安装公开签名的证书。或者,您必须将我们之前制作的自签名证书导入到浏览器的钥匙串中,这个不在此维基范围之内。  

或者,对于Firefox和Chrome,您可以打开单独的浏览器选项卡,并将其指向Asterisk的HTTP端口和WS路径,例如http:// [ip of asterisk server]:8089 / ws,您可以手动确认安全性例外。


配置SIPML5

 

图标

SIPML5是测试星号的有用客户端。许多真实世界的用户可以探索其他可能包括滚动您自己的客户端的选项。

首先,返回并阅读上一节,并确保您已经在Firefox中打开了一个新标签页,并访问了http:// [ip of asterisk server]:8089 / ws,并确认了安全性异常。我们在这里进行测试和开发,而不是部署到实际生产中,所以这是“好的”。

接下来,使用Firefox,请访问  https://sipml5.org  - 您将被重定向到  https://www.doubango.org/sipml5/

一旦在那里,点击“享受我们的现场演示”链接直接到sipml5客户端。

在注册框中,使用类似于以下的配置:

在这里,我们输入以下内容:

  • 显示名称是一个自由格式的字符串
  • 私人身份是我们的PJSIP auth对象的用户名
  • 公共身份的格式如下: 
    • sip:(我们的PJSIP aor对象的名称)@(星号系统的IP地址)
  • 密码是我们的PJSIP认证对象的密码
  • 领域是“asterisk.org”

接下来,点击“专家模式?” 表单按钮。它将打开一个新的浏览器标签。在专家设置框中,使用类似于以下的配置:

在这里,我们进行了以下更改:

  • 选中“禁用视频”框
  • 使用以下格式填写在WebSocket服务器URL中:
    • wss://(星号的ip地址):8089 / ws
  • 检查“禁用3GPP早期IMS”框

单击“保存”,并使用“注册”框返回到另一个演示选项卡。

接下来,点击“登录”,你应该看到这样连接

您应该在Asterisk CLI上看到相应的连接。您可以通过执行以下操作登录Asterisk CLI:

#asterisk -vvvr

 

然后,您可以LogOut并登录,看到如下:

== WebSocket connection from '10.27.74.22:54984' for protocol 'sip' accepted using version '13'
  -- Added contact 'sips:199@10.27.74.22:54984;transport=ws;rtcweb-breaker=no' to AOR '199' with expiration of 200 seconds
== Contact 199/sips:199@10.27.74.22:54984;transport=ws;rtcweb-breaker=no has been created
== Endpoint 199 is now Reachable

进行测试呼叫

在sipml5呼叫控制箱输入  200。然后按通话按钮。你会看到一个下拉列表:

选择“音频”继续。一旦这样做,Firefox将显示一个弹出窗口要求使用麦克风的权限:

点击“允许”。

接下来,呼叫控制框将指示呼叫正在进行:

最后,当呼叫连接时,您将看到  呼叫

您会听到“恭喜您已成功安装和执行Asterisk开源PBX ...”

您刚刚通过WebRTC使用Asterisk进行了首次呼叫!


Logo

致力于链接即构和开发者,提供实时互动和元宇宙领域的前沿洞察、技术分享和丰富的开发者活动,共建实时互动世界。

更多推荐