如何使用 coturn (stun/turn) 服务器在 Web 应用程序中建立对等连接

How to establish peer connection in web app using coturn (stun/turn) server

我正在构建一个用于摄像头广播的网络应用程序。我将 Django 用于 Web 应用程序,将 coturn 用作 (STUN/TURN) 信令服务器。我的目标是用 WebRTC 来实现。

我不知道如何将对等点连接到信令服务器以便其他对等点可以访问。所以我需要知道的是如何建立"PeerConnection"。 在 web 应用程序中,我拥有我需要的一切(我认为):user.id、共享密钥、信令服务器 IP 和端口,...但我不知道如何将它混合在 HTML JS 脚本中连接 coturn 服务器。

我已阅读 coturn 服务器文档并搜索了一些示例,但找不到这部分的示例。

谁能给我举个例子?

我觉得你有点糊涂了,coturn 不是信令服务器,它是 TURN/STUN 服务器。

信令服务器是在对等方获得直接对等连接之前交换 sdp、ice candidates 和其他数据的东西,coturn 不这样做。

我无法解释所有位,但要点是 STUN 用于提供 public 对等方的 IP,而 TURN 用于代理点,用于在无法提供时从对等方传输和接收数据直接访问,在大多数情况下,您只需要一个 STUN 服务器。他们唯一一次参与你的 WebRTC 应用程序是当你创建 PeerConnection 对象时,你在配置对象中传递 STUN/TURN 服务器详细信息,示例:

let pc = new RTCPeerConnection({
  "iceServers": [
    {"urls": "stun:example.com"},  // STUN Server address
    {"urls": "turn:example.com", "credential": "test", "username": "test"}  // TURN Server address
  ] 
}); 

So as I understand I will not need to use coturn, just one signalling server like SignalMaster or any other like it. Am I wrong?

您仍然可能需要 coTurn 或任何其他 STUN/TURN 服务器来实现 peer-to-peer 或在 host-host 无法连接时中继连接。 STUN/TURN ICE 需要 server-reflexive 和中继候选人来执行 ICE 并保证连接。

WebRTC 作为 offer-answer 模型工作,因此您需要某种信令方法,如 SIP/Jingle 或其他信令机制来在双方之间交换 SDP。您可以使用 WebRTC 实现上面的一些第三方解决方案,或者您可以编写自己的简单信号栈。