WebRTC教程 - 使用SIPML5
原文地址: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配置文件,以确保它们未被显式禁用。
创建证书
#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进行了首次呼叫!
WebRTC教程 - 使用SIPML5相关推荐
- WebRTC 教程四: WebRTC聊天室设计和搭建
这篇文章主要介绍了 WebRTC 聊天室设计和搭建,主要包括信令服务器及客户端网页设计. WebRTC 教程一:WebRTC信令.架构和 API 入门 WebRTC 教程二:WebRTC API 和 ...
- WebRTC 教程三:WebRTC特性,调试方法以及相关服务器搭建方法
WebRTC 教程一:WebRTC信令.架构和 API 入门 WebRTC 教程二:WebRTC API 和 Leak 本文是 WebRTC 的第三篇教程,主要介绍了 WebRTC 的一些特性,调试方 ...
- WebRTC 教程五:WebRTC搭建视频聊天室
这篇文章主要介绍了 WebRTC 聊天室的整体演示,以及 WebRTC 视频聊天的功能设计,代码逻辑以及整体演示. 目录 WebRTC 聊天室:总体演示 WebRTC 视频聊天: 设计 WebRTC ...
- WebRTC 教程六:WebRTC 可扩展性网络拓扑结构
这篇文章是 WebRTC 教程系列的最后一篇,主要介绍了 WebRTC 可扩展性的一些网络拓扑结构. WebRTC 教程一:WebRTC信令.架构和 API 入门 WebRTC 教程二:WebRTC ...
- android webrtc教程,WebRTC 入门教程(一)| 搭建WebRTC信令服务器
作者:李超,音视频技术专家.本入门教程将分为三篇内容,分别讲述信令服务器的搭建.媒体服务器的搭建.Android 端的 WebRTC 应用实现,全文采用开源框架来搭建,适用于大多数入门的开发者.转载请 ...
- webrtc详细教程
cdsn博客不支持word文件,所以这里显示不完全.可到本人资源中下载word文档: v0.3:http://download.csdn.net/detail/kl222/6961491 v0.1:h ...
- Android WebRTC语音视频通话demo
Android WebRTC简介 https://blog.csdn.net/Charon_Chui/article/details/80510945?utm_term=%E6%89%8B%E6%9C ...
- WebRtc datachannel简介
webrtc的RTCdatachannel是一个双工通道,是点对点连接的,中间没有server中转,所使用的协议是SCTP协议. (双工通道这个,我没有找到相关论据,所以存疑.) SCTP和TCP\U ...
- 音视频技术开发周刊 | 238
每周一期,纵览音视频技术领域的干货. 新闻投稿:contribute@livevideostack.com. 整个世界都是你的绿幕:这个视频抠图换背景的方法着实真假难辨 绿幕是影视剧中抠图.换背景的利 ...
- 音视频技术开发周刊 | 248
每周一期,纵览音视频技术领域的干货. 新闻投稿:contribute@livevideostack.com. 音视频开发之旅(11) OpenGL ES矩阵变换与坐标系统 OpenGL大量使用向量和矩 ...
最新文章
- Open3d学习计划—高级篇 5(RGBD融合)
- 如何确定软件测试结束的标准
- Linux 网络 tcp C/S通信模型
- 15 redis-分布式锁
- centos系统中mysql密码_CentOS系统找回mysql登录密码
- 软件工程进度条-第十五周
- 堆栈溢出回答了我们不知道的Java首要问题
- switch语句php,PHPswitch 语句 - PHP教程
- 循环打印三角形 java 0913
- WebApi单元测试记录
- JAVA项目实训struts2_JavaWeb学习:Struts2与Spring的IOC练习
- python 括号 垃圾_Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?
- uoj#422. 【集训队作业2018】小Z的礼物(MIn-Max容斥+插头dp)
- android+省电播放器,真的能省电?五款Android省电应用实测
- BIOS不识别硬盘,DIY解决希捷固件门(图解)
- YOLOV5 + 双目测距(python)
- 计算机应用 一级学科,一级学科、二级学科,考研专业哪个包含了计算机考研方向...
- 笔记本锁定计算机功能键,笔记本键盘锁定键在哪_笔记本电脑的“键盘锁”是哪一个键-win7之家...
- 安防摄像头互联网直播方案LiveGBS设计文档
- 基于pytorch的sque2suqe with attention实现与介绍