【问题标题】:Difference between STUN/TURN(coTURN) servers and Signaling servers (written with socket.io/websocket) in WebRTC?WebRTC中STUN/TURN(coTURN)服务器和信令服务器(用socket.io/websocket编写)之间的区别?
【发布时间】:2019-01-27 13:02:50
【问题描述】:

我正在建立这个视频教学网站并做了一些研究并得到了很好的理解,但除了这个东西。所以当一个用户想要连接到另一个用户时,P2P,我需要信令服务器来获取他们的公共 IP 来让他们连接。现在 STUN 正在做这项工作,如果对等方无法连接,TURN 将中继媒体。现在如果我用 WebSocket 编写信令服务器来传递 SDP 消息并让 ICE 工作,我需要安装 coTURN 吗?他们的工作具体会是什么工作呢?

我真正感到困惑的是我简单编写的 WebSocket Signaling 服务器的工作(来自我在不同教程中看到的)和我将安装的 coTURN 服务器的工作。以及如何将它们与我将安装的媒体服务器连接起来。

第二个问题,有没有办法在只有两/三个参与者的情况下使用 P2P 并让媒体服务器参与其中,这样我就不会过多地占用参与者的带宽?

【问题讨论】:

    标签: webrtc


    【解决方案1】:

    信令服务器需要在对等点(SDP 数据包)之间交换消息,直到它们建立 P2P 连接。

    STUN 服务器可以帮助对等方发现有关其公共 IP 的信息并打开防火墙端口。这要解决的主要问题是,许多设备位于小型专用网络中的 NAT 路由器后面; NAT 基本上允许传出请求及其响应,但会阻止任何其他“未经请求的”传入请求。因此,当两个对等点都在 NAT 路由器后面并且可以发出传出请求,但由于对等点没有公开任何内容来发出请求,因此无处可发送时,您就有了 Catch-22 场景到。 STUN 服务器充当临时中间人来发出请求,这会在 NAT 设备上打开一个端口以允许返回响应,这意味着现在有一个已知的开放端口可供其他对等方使用。这是hole-punching 的一种形式。

    TURN 服务器是一个可公开访问的位置的中继,以防 P2P 连接是不可能的。仍然存在打孔不成功的情况,例如由于更严格的防火墙。在这些情况下,两个对等点根本无法直接进行一对一通话,并且它们的所有流量都通过 TURN 服务器中继。这是一个第 3 方服务器,双方都可以无限制地连接到它,并且只是将数据从一个对等方转发到另一方。 TURN 服务器的一种流行实现是coturn。


    是的,基本上所有这些功能都可以由一台服务器完成,但它们是故意分开的。 WebRTC 规范对信令服务器完全没有什么可说的,因为信令机制对于每个应用程序都是非常独特的,并且可以采用多种不同的形式。 TURN 非常占用带宽,如果您希望扩展,通常必须将其委托给更大的服务器场,因此与其他两个功能中的任何一个混合是不切实际的。所以你最终得到了三个独立的组件。

    关于多人连接:是的,你可以建立一个 P2P 群聊就可以了。但是,每个对等点都需要连接到其他所有对等点,因此每个对等点的连接数和带宽会随着每个新对等点的增加而增加。对于 3 或 4 个对等点来说,这可能工作得很好,但除此之外,您可能会开始遇到单个对等点的带宽和 CPU 限制,尤其是在您进行质量不错的视频流时。

    【讨论】:

    • 嗨@deceze,感谢您的详细解释。所以澄清一下,我想使用 coTURN 作为 TURN 服务器和 OpenVidu(kurento)/Jitsi 作为媒体服务器,以防有超过 3/4 的对等点。大多数情况下,它将是一对一的,在某些情况下,是多用户的,但仅限于 5-7 个对等方。一次最多有 100/200 个用户在不同的房间进行交互。我想将应用程序托管在具有 4-8GB RAM 的 Digitalocean droplet 中。你能否解释一下机器是否足够并简要解释一下堆栈,比如实现过程是什么,我的意思是我必须做的部分?
    • 最后遇到这个问题确实解决了我的理解问题,即“从头开始”设置 WebRTC 连接需要哪些组件。因此,我想指出并总结 - 在我看来 - @deceze♦ 回答中最重要的部分:一个完整​​的 WebRTC 连接需要 三个 类似服务器的组件:第一个:媒体服务器发起连接;第二:信令服务器,用于在对等体之间交换 SDP/ICE 信息;第三:STUN/TURN 服务器来克服 NAT 问题。感谢@deceze♦ 的澄清!
    • 美丽的解释
    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多