webrtc - 了解 WebRTC 中的 SFU、TURN 服务器

标签 webrtc kurento stun turn

如果我正在构建 WebRTC 应用程序并使用选择性转发单元媒体服务器,这是否意味着我不需要 STUN/TURN 服务器?

据我了解,STUN 服务器用于客户端发现其公共(public) IP/端口,而 TURN 服务器用于在客户端无法通过 STUN 直接相互连接时在客户端之间中继数据。

我的问题是,如果我使用公共(public)地址部署我的 SFU 媒体服务器,这是否消除了对 STUN 和 TURN 服务器的需求?由于数据将始终通过 SFU 中继,客户端/对等方将永远不会直接相互交谈?

但是,我注意到 Kurento(具有 SFU 功能的流行媒体服务器)的安装指南包含有关 configuring STUN or TURN servers 的部分。 .为什么需要 STUN 或 TURN 服务器?

最佳答案

运行 SFU 时仍应使用 TURN 服务器。稍微了解一下 ICE 会有所帮助。所有 SFU 的工作方式都略有不同,但对大多数人来说都是如此。

  • 对于每个 PeerConnection,SFU 将监听随机 UDP(有时是 TCP 端口)
  • 此 IP/端口组合将提供给随后尝试联系 SFU 的每个对等方。
  • SFU 然后检查传入的数据包是否包含有效的散列(由 upwd 确定)。这确保没有攻击者连接到该端口。

  • TURN 服务器的工作原理
  • 提供对等方可以连接到的单个分配端口。您可以使用 UDP、DTLS、TCP 或 TLS。您需要一个有效的用户名/密码。
  • 一旦通过身份验证,您就可以通过此连接发送数据包,然后 TURN 服务器会为您中继它们。
  • 然后,TURN 服务器将监听一个随机端口,以便其他人可以将内容发送回 Peer。

  • 所以 TURN 服务器有一些 SFU 没有的好东西
  • 你只需要监听一个公共(public)端口。如果您正在与不在 Internet 上的服务进行通信,您可以让您的客户端仅连接到分配
  • 您还可以通过 UDP、DTLS、TCP 和 TLS 使您的服务可用。大多数 ICE 实现只支持 UDP。

  • 这两个因素在政府/医院情况下非常重要。您的网络仅允许 TLS 流量通过端口 443。因此,TURN 服务器是您唯一的解决方案(您在 TLS 443 上运行分配)

    因此,您需要根据需要设计系统。但是 IMO 您应该始终在现实环境中运行配置良好的 TURN 服务器。

    关于webrtc - 了解 WebRTC 中的 SFU、TURN 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61287054/

    相关文章:

    webrtc - Kurento-client.js 可以在应用服务器中使用而不在浏览器中使用 kurento-utils.js 吗?

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

    angular - getTracks 在 Angular 中通过 typescript 的类型 'Blob' 错误消息中不存在

    Nginx代理webrtc kurento媒体服务器配置

    webrtc - Kurento WebRTC 连接在约 30% 的情况下失败

    webrtc - TURN 服务器如何将数据发送到 NAT 后面的对等点?

    ios - 如何使用 IPv6 设置 Restund Turn 服务器

    react-native - 无法在 native <WebView/> 中访问本地媒体

    javascript - WebRTC 性能 - 非常高的 CPU 负载

    javascript - WebRTC:确定所选的 ICE 候选者