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>
当涉及到 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>