了解 WebRTC 中的 SFU、TURN 服务器

shm*_*mth 14 stun webrtc turn kurento

如果我正在构建 WebRTC 应用程序并使用 Selective Forwarding Unit 媒体服务器,这是否意味着我将不需要 STUN / TURN 服务器?

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

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

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

Sea*_*ois 16

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

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

TURN 服务器通过

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

所以 TURN 服务器有一些 SFU 没有的好东西

  • 您只需要监听一个公共端口。如果您正在与不在 Internet 上的服务通信,您可以让您的客户端只连接到分配
  • 您还可以通过 UDP、DTLS、TCP 和 TLS 提供您的服务。大多数 ICE 实现仅支持 UDP。

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

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

  • @M.Rostami,如果您正在进行只有两个参与者的 p2p 呼叫,那么 SFU 不会增加太多价值,而是会增加一些延迟(除非您想要一些服务器端拦截来记录呼叫等)。在超过 3-4 个对等点上,SFU 可能会显示出更好的结果。然后,客户端可以建立一个连接(到 SFU),而不是多个连接(到所有对等点),从而节省上行带宽,它只需将视频发送到一个端点。 (3认同)