WebRTC:我需要 TURN 服务器吗? (这会有帮助吗?)

WebRTC: do I need a TURN server? (Would it help?)

我有一个使用 WebRTC 和 mediasoup 服务器的网络摄像头聊天室应用程序(因此它是多对多视频共享)。

我遇到一些问题,我的一些用户无法使传入的视频源正常工作。这是一个难题,因为我根本无法重现它,而且我也不能轻易 "remote-debug" 这个问题,因为我的大多数用户都不是技术人员。到目前为止,我唯一可以肯定的是它似乎与网络相关,而不是与浏览器相关,因为我收到了来自使用 Firefox、Chrome、Safari 和 Edge 的人的错误报告。我 运行 我的服务器(mediasoup v2)在端口 443 上,服务器框上没有防火墙,所以应该使门尽可能宽。我只是不知道确切的问题是什么,所以我在黑暗中摸索。

所以,我正在尝试解决方案。我不认为(?)我设置了 TURN 服务器,但从我读到的内容来看,添加一个服务器似乎肯定不会有什么坏处,并且可以帮助解决我的情况。

我不完全理解整个 WebRTC 协议或 RFC 7118(这东西真的很复杂!)或者 what/where/how 一个 TURN 服务器适合更大的图景。这会有所帮助,对吧?大量谷歌搜索导致没有明确的答案。会喜欢一些帮助!谢谢!

WebRTC 会尽其所能建立 p2p 连接,但有时会失败。转弯服务器充当最后的手段,以便对等点都可以通过转弯服务器进行连接。显然这不是 p2p 连接,因此会有额外的延迟,您必须确保您的 turn 服务器有足够的带宽来覆盖您期望的所有连接。

TL;DR,如果你需要 100% 的连接率,你应该有一个回合服务器。

我相信 AWS 有一个现成的实例,您可以启动,或者如果您可以使用这个开源 coturn 服务器 https://github.com/coturn/coturn

关于调试说明...检查您的 ice candidates 类型。如果你只有一个 STUN 服务器,你应该看到 host 和 srflx,但如果你有一个 TURN 服务器,你也会看到 relay。您可以通过丢弃具有 host 和 srflx 类型的 ice candidates 来重现此问题。

I'm running my server (mediasoup v2) on port 443 with no firewall on the server box, so that should make the door as wide as possible

那就是websocket。 UDP 上的媒体流量 运行s 通常和 mediasoup 使用随机端口。在 udp 端口​​ 443 上配置的 TURN 服务器可能 在某些情况下有所帮助。 另一个问题是 UDP 被阻止,这很容易通过本地防火墙重现。Mediasoup 支持一种叫做 ice-tcp 的东西,它允许媒体通过 TCP 连接 运行。您应该检查您的 mediasoup 安装是否使用 ice-tcp。如果没有,TURN/TCP 的 TURN 服务器会有所帮助。