为了测试我是否获得中继候选人,我使用此页面:http://googlechrome.github.io/webrtc/samples/web/content/peerconnection/trickle-ice/。为了从 chrome 40 进行测试,我在那里提供了我的转向网址和凭据。单击“收集候选者”后,我看不到任何中继候选者。在 Firefox 36 上进行相同的测试,我找到了中继候选者。可能的问题是什么?为了进一步调查这个问题,我查看了wireshark日志。我发现,来自 Firefox 的 stun 请求格式包括 -
STUN 146 Allocate Request UDP lifetime: 3600 user: lazy realm: with nonce
但是从 chrome 来看,这略有不同 -
STUN 70 Allocate Request UDP
好像请求码不一样。此外,来自 chrome 的请求不包括生命周期、用户和领域属性。
我知道这个问题已经有点老了,但是根据我的经验,TURN 服务器描述格式(关于身份验证)必须在 Chrome 和 Firefox 中采用不同的格式。
对于 Chrome,您可以使用:{"url": "turn:[email protected]", credential:"password"},
对于 Firefox,格式为: {“url”:“turn:turn.example.com”,'hasCredentials':true,用户名:“用户”,凭据:“密码”},
也许您可以检查源代码以了解示例中的轮次服务器是如何设置的。
编辑: 同时,规范中服务器列表的格式已更改(https://www.w3.org/TR/webrtc/#rtciceserver-dictionary)。目前我知道的所有实现都支持该格式:
{ "urls": ["turns:turn.example.org", "turn:turn.example.net"],
"username": "user",
"credential": "myPassword",
"credentialType": "password"
}
在 Edge 上,您似乎需要在 url 中包含查询字符串 ?transport=udp。
这个问题已经有好几年了,但我相信这和我刚才看到的问题是一样的。我正在 Android 移动设备上测试一个 Web 应用程序,并且遇到了我认为相同的问题:虽然我在 Web 端配置中设置了一个 Turn 服务器,但当我启动连接时,它不会连接并在 chrome 中查找: //webrtc-internals 我可以看到中继根本没有作为ice候选者出现。我捕获了主机端的流量,我可以看到,尽管服务器正在发送质询,但客户端从未尝试进行身份验证。我尝试了很多不同的方法,终于弄清楚了问题所在(并且在多次谷歌搜索后我无法找到任何内容)。我在服务器配置中将该领域留空。我不认为这会是一个问题,但如果领域为空,Android 实现似乎根本不会尝试发送凭据。一旦我将其设置为非空字符串,浏览器就会发送凭据并且工作正常。我可以在上面的问题中看到,由于消息的格式为
,因此您的领域可能也为空STUN 146 分配请求 UDP 生存期:3600 用户:惰性领域:带有随机数
所以......已经九年了,我猜你以某种方式解决了你的问题或放弃了这个,但我打赌这会解决它。