原文地址: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进行了首次呼叫!

WebRTC教程 - 使用SIPML5相关推荐

  1. WebRTC 教程四: WebRTC聊天室设计和搭建

    这篇文章主要介绍了 WebRTC 聊天室设计和搭建,主要包括信令服务器及客户端网页设计. WebRTC 教程一:WebRTC信令.架构和 API 入门 WebRTC 教程二:WebRTC API 和 ...

  2. WebRTC 教程三:WebRTC特性,调试方法以及相关服务器搭建方法

    WebRTC 教程一:WebRTC信令.架构和 API 入门 WebRTC 教程二:WebRTC API 和 Leak 本文是 WebRTC 的第三篇教程,主要介绍了 WebRTC 的一些特性,调试方 ...

  3. WebRTC 教程五:WebRTC搭建视频聊天室

    这篇文章主要介绍了 WebRTC 聊天室的整体演示,以及 WebRTC 视频聊天的功能设计,代码逻辑以及整体演示. 目录 WebRTC 聊天室:总体演示 WebRTC 视频聊天: 设计 WebRTC ...

  4. WebRTC 教程六:WebRTC 可扩展性网络拓扑结构

    这篇文章是 WebRTC 教程系列的最后一篇,主要介绍了 WebRTC 可扩展性的一些网络拓扑结构. WebRTC 教程一:WebRTC信令.架构和 API 入门 WebRTC 教程二:WebRTC ...

  5. android webrtc教程,WebRTC 入门教程(一)| 搭建WebRTC信令服务器

    作者:李超,音视频技术专家.本入门教程将分为三篇内容,分别讲述信令服务器的搭建.媒体服务器的搭建.Android 端的 WebRTC 应用实现,全文采用开源框架来搭建,适用于大多数入门的开发者.转载请 ...

  6. webrtc详细教程

    cdsn博客不支持word文件,所以这里显示不完全.可到本人资源中下载word文档: v0.3:http://download.csdn.net/detail/kl222/6961491 v0.1:h ...

  7. Android WebRTC语音视频通话demo

    Android WebRTC简介 https://blog.csdn.net/Charon_Chui/article/details/80510945?utm_term=%E6%89%8B%E6%9C ...

  8. WebRtc datachannel简介

    webrtc的RTCdatachannel是一个双工通道,是点对点连接的,中间没有server中转,所使用的协议是SCTP协议. (双工通道这个,我没有找到相关论据,所以存疑.) SCTP和TCP\U ...

  9. 音视频技术开发周刊 | 238

    每周一期,纵览音视频技术领域的干货. 新闻投稿:contribute@livevideostack.com. 整个世界都是你的绿幕:这个视频抠图换背景的方法着实真假难辨 绿幕是影视剧中抠图.换背景的利 ...

  10. 音视频技术开发周刊 | 248

    每周一期,纵览音视频技术领域的干货. 新闻投稿:contribute@livevideostack.com. 音视频开发之旅(11) OpenGL ES矩阵变换与坐标系统 OpenGL大量使用向量和矩 ...

最新文章

  1. Open3d学习计划—高级篇 5(RGBD融合)
  2. 如何确定软件测试结束的标准
  3. Linux 网络 tcp C/S通信模型
  4. 15 redis-分布式锁
  5. centos系统中mysql密码_CentOS系统找回mysql登录密码
  6. 软件工程进度条-第十五周
  7. 堆栈溢出回答了我们不知道的Java首要问题
  8. switch语句php,PHPswitch 语句 - PHP教程
  9. 循环打印三角形 java 0913
  10. WebApi单元测试记录
  11. JAVA项目实训struts2_JavaWeb学习:Struts2与Spring的IOC练习
  12. python 括号 垃圾_Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?
  13. uoj#422. 【集训队作业2018】小Z的礼物(MIn-Max容斥+插头dp)
  14. android+省电播放器,真的能省电?五款Android省电应用实测
  15. BIOS不识别硬盘,DIY解决希捷固件门(图解)
  16. YOLOV5 + 双目测距(python)
  17. 计算机应用 一级学科,一级学科、二级学科,考研专业哪个包含了计算机考研方向...
  18. 笔记本锁定计算机功能键,笔记本键盘锁定键在哪_笔记本电脑的“键盘锁”是哪一个键-win7之家...
  19. 安防摄像头互联网直播方案LiveGBS设计文档
  20. 基于pytorch的sque2suqe with attention实现与介绍

热门文章

  1. 网站订单销售统计电商后台前端模板
  2. 基于java飞机大战游戏
  3. 飞机大战(Java)
  4. java之jsoup爬虫
  5. 三人表决器Verilog
  6. Unable to run mksdcard SDK tool
  7. Excel线性回归分析
  8. 海康威视工业相机SDK的开发使用笔记
  9. MATLAB图像的读取和显示
  10. Swift Alamofire SwiftyJson