WebRTC教程 - 使用SIPML5
原文地址:https://wiki.asterisk.org/wiki/display/AST/WebRTC+tutorial+using+SIPML5教程概述本教程演示了Asterisk中基本的WebRTC支持和功能。Asterisk将配置为支持远程WebRTC客户端sipml5客户端,用于在Firefox Web浏览器中拨打/从Asterisk拨打电话。
原文地址: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_websocket和res_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配置文件,以确保它们未被显式禁用。
创建证书
现代浏览器需要使用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”选项是键的输出目录。
- 您将被要求为/etc/asterisk/keys/ca.key输入一个密码短语,放入您以后记住的内容。
- 这将创建/etc/asterisk/keys/ca.crt文件。
- 系统将要求您再次输入密码,然后将创建/etc/asterisk/keys/asterisk.key文件。
- 将自动生成/etc/asterisk/keys/asterisk.crt文件。
- 系统会要求您第三次输入密码,并且将会创建与/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对象:aor,auth和端点。
你的 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:
配置星号拨号计划
我们将制作一个简单的拨号计划,以从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
首先,返回并阅读上一节,并确保您已经在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进行了首次呼叫!
更多推荐
所有评论(0)