MQTT作为WebRTC信令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MQTT作为WebRTC信令相关的知识,希望对你有一定的参考价值。

参考技术A Stun Server是开源的coTurn穿透服务器,Signal Server是开源的Apache Active MQ。

Signal Server用的是开源的Apache ActiveMQ,网上有很多花里胡哨的方法,这个是简单能搭建成功的过程, 搭建过程 。

穿透服务器用的是开源的coturn, 搭建过程

SDP交换
根据MQTT协议订阅发布机制:
订阅同一个主题:(实现接收消息)
发布同一个主题:(实现发布消息)

对于每一个客户端来说唯一标示是ClientId,客户端发布消息时设置的主题也是ClientId.

1、客户端连接到ActiveMQ服务器

这里的ClientId,就是在ActiveMQ服务端添加的

这里主要是连接到ActiveMQ的流程

首先,呼叫方initCall,主要作用是创建PeerConnection对象,设备,将音视频数据封装成MediaStream添加到然后打开本地音视频PeerConnection中,显示呼叫页面。
然后呼叫方startCall,主要作用是CreateOffer,SendOffer,所以要发布Topic:呼叫方Message;
假如ClientA呼叫ClientB,首先ClientA订阅主题ClientB,然后ClientB订阅主题ClientA。

Client A给Client B发送消息时,发布主题Client_A_ID和Message。
Client B给Client A发送消息时,发布主题Client_B_ID和Message。

zjf001连接到服务器
根据前面文章,看一下基本流程

WebRTC 上的信令通道

【中文标题】WebRTC 上的信令通道【英文标题】:Signaling channel on WebRTC 【发布时间】:2014-01-25 13:43:50 【问题描述】:

我的目标是创建一个 WebRTC 聊天(视频/音频)应用程序,我看到的大多数教程和演示都使用以下信号通道:

signaling.simplewebrtc.com:8888

我什至找到了this 很棒的演示,其中开发人员表示它不依赖于这个信号通道,但是当我浏览代码时我发现它在那里。

谁能解释一下,我怎样才能用我自己的信号通道代替它?

【问题讨论】:

您需要做的就是添加一个信令服务器来交换 SDP 和候选冰。通过一些简单的谷歌搜索,您可以使用大量的选项和教程。 【参考方案1】:

我不完全理解你的问题。我猜你提供的 URL 指向一个 websocket 服务器。 Websockets 通常用于发送信号,因为它们提供永久的全双工连接(这意味着服务器能够在没有先前请求的情况下将消息推送到客户端)。

由于 NAT 和防火墙等原因,您必须在想要建立 RTCPeerConnection 的两方之间交换网络信息……如何交换该信息不是 WebRTC 规范的一部分。你可以使用任何你想要的协议,HTTP、Websockets,甚至是电子邮件(但是实现起来会很丑:))。但是,如果您想使用 node.js 构建自己的信号服务器,您可以查看我目前正在编写的教程。它详细解释了如何使用 WebRTC 和托管在 uberspace.de 上的节点服务器设置您自己的非常简单的视频聊天:

Tutorial: Create your own Videochat-Application with HTML and JavaScript

如果你使用我的教程,如果你能告诉我它是否可以理解,那就太好了。

编辑: 由于我仍然收到对这个旧教程的请求,请使用像这样的最新教程: https://www.baeldung.com/webrtc

https://www.html5rocks.com/en/tutorials/webrtc/basics/

【讨论】:

如果我想构建 WebRTC 应用程序并且我想使用 SIP Servlet 作为信令?由于我创建了连接到 sip servlet 的 android jain sip 客户端。我可以这样做吗?在此先感谢:) 正如我在上面写的,你可以使用任何你想要的技术,只要你能够在客户端之间交换文本数据。当然,您需要从客户端访问该数据,即从 javascript @FelixHagspiel,教程链接失效。我收到带有system/database/connectors/mysql.php on line 54 的未捕获异常错误页面。 @BReddy 这个教程已经5年多了,建议你找一个新的,比如这个blog.logrocket.com/… 兄弟,您博客的链接无法加载:'(【参考方案2】:

请查看可用于 WebRTC 的 excellent blog on the signaling options。

我有listed a few important blogs and sample WebRTC applications,您可能还想查看它以帮助您构建聊天应用程序。

【讨论】:

【参考方案3】:
    我从Install NodeJS 安装了nodejs,并在signalmaster安装了所需的依赖项

    在 cmd 中运行 node server.js。 服务器开始运行。

    PS:更改 simplewebrtc.bundle.js 中存在的 url 选项

如果您遇到任何问题,请告诉我

【讨论】:

【参考方案4】:

我想知道为什么到目前为止还没有人提到这一点。您还可以使用基于 sip 框架的 webrtc 库和客户端,例如 sipml5、jssip 等。此外,由于您提到您希望自己的服务器设置来满足信令请求,您将有多种基于 websockets 的 sip 服务器可供选择,例如 officeip、kamailio、mobicents 等。

【讨论】:

【参考方案5】:

您可以在https://code.google.com/p/sipservlets/wiki/HTML5WebRTCVideoApplication 尝试修改 Mobicents 随附的最新应用程序,以便您进行聊天和视频聊天。

【讨论】:

以上是关于MQTT作为WebRTC信令的主要内容,如果未能解决你的问题,请参考以下文章

带有手动信令的 WebRTC 数据通道,请举例?

WebRTC 上的信令通道

WebRTC[50] - WebRTC支持SVC时SDP信令的协商过程

WebRTC[50] - WebRTC支持SVC时SDP信令的协商过程

使用 Express 和“websocket”包的 WebRTC 信令服务器

Socket.io vs RTCDataChannel,作为信令服务器?