WebRTC:Firefox 中缺少中继候选人

WebRTC: Missing relay candidates in Firefox

当涉及到 firefox 并且需要 TURN 服务器时,我无法建立 WebRTC 连接。 使用此测试工具可重现原因:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

尝试以下 stun 服务器配置:

URI:turn:numb.viagenie.ca

用户名:l1787875@mvrht.com

密码:test

chrome中出现了接力候选人。在 firefox 中缺少。但是为什么?

结果为 Chrome 56.0.2924.87(64 位): Time Component Type Foundation Protocol Address Port Priority 0.002 1 host 2969322736 udp 192.168.178.29 58537 126 | 30 | 255 0.002 1 host 1665573758 udp 2001::34ad:4890:3ce5:1be4:aa2b:d831 58538 126 | 10 | 255 0.002 2 host 2969322736 udp 192.168.178.29 58539 126 | 30 | 254 0.003 2 host 1665573758 udp 2001::34ad:4890:3ce5:1be4:aa2b:d831 58540 126 | 10 | 254 0.544 1 srflx 842163049 udp 85.212.39.206 58537 100 | 30 | 255 0.553 2 srflx 842163049 udp 85.212.39.206 58539 100 | 30 | 254 0.658 1 relay 3433799847 udp 66.228.45.110 57491 2 | 30 | 255 0.677 2 relay 3433799847 udp 66.228.45.110 57492 2 | 30 | 254 0.678 Done

在 Firefox 51.0.1(32 位)中的结果: Time Component Type Foundation Protocol Address Port Priority 0.008 1 host 0 UDP 192.168.178.29 52762 126 | 32512 | 255 0.009 1 host 3 UDP 2001:0:9d38:6abd:82d:1d5a:aa2b:d831 52763 126 | 32256 | 255 0.009 2 host 0 UDP 192.168.178.29 52764 126 | 32512 | 254 0.009 2 host 3 UDP 2001:0:9d38:6abd:82d:1d5a:aa2b:d831 52765 126 | 32256 | 254 11.234 Not reachable?

当我测试它时,TURN 服务器响应 486 "Allocation Quota Reached"。从现在开始,我没有通过 Chrome 或 Firefox 获得中继候选人,我猜您的 TURN 提供商已禁用您在此处发布的凭据。 如果您可以重现它,我建议您在 Firefox 中查看 about:webrtc。它应该有一些日志消息表明出了什么问题。如果您在日志中看到一些可疑的东西,那可能是一个值得在 bugzilla.mozilla.org.

上填写的错误

更新:我能够重现问题。它是 Firefox TURN 客户端中的一个错误。我为此创建了这个错误跟踪问题 https://bugzilla.mozilla.org/show_bug.cgi?id=1338384

更新 2:该错误已在 Firefox 54 中修复。长篇解释是 coturn 在其对 Firefox 的回复消息中包含带宽属性。此带宽属性从未被正式标准化。并且该带宽属性所在的范围要求,如果客户端不理解该属性,则将其视为解析失败。除了bandwidth属性的expired draft特别说了了解bandwidth属性的含义是可选的。所以一个糟糕的规范尝试 + 一个实现了从未正式规范的东西的服务器 + 一个不理解结果的客户端。

对于那些回答这个问题但没有答案的人,我的问题是 Firefox(在 v.92 上测试)不支持没有设置凭据的 turn 服务器。我总是只得到主机类型的候选人。

我在 about:webrtc

中遇到以下错误
short term auth failed
Error processing response: Operation rejected, stun error code 0.
Message does not correspond to any registered stun 

设置 coturn 配置:

lt-cred-mech
user=yourUser:yourPassword
realm=domain.com

同时在您的客户端应用程序中设置 name/password,您现在应该也会获得 relay/srflx。

Turn 需要其身份验证过程的领域。

出于某种原因,如果 firefox 找不到空域,它会附加一个空域,但是 chrome 而 edge 不会附加任何默认域。由于 chrome 和 edge 没有附加任何领域,您的 TURN 服务器将无法进行身份验证。如果您使用 wireshark 捕获数据包,您会看到它充斥着 "Authentication failed" 用于 stun 协议。

解决方法是在您的 TURN 服务器配置中提供一个领域。否则,您将在 chrome 和 edge 中看不到中继候选人,因为他们没有经过身份验证的转弯服务器。

因此打开您的 TURN 服务器配置并添加以下行。

realm : <any-string>