是否有可能在提供需要凭据的不同 TURN 服务器的对等方之间成功协商 WebRTC 连接?
Is it possible to successfully negotiate a WebRTC connection between peers who are offering different TURN servers that require credentials?
我们使用全球 TURN 服务器提供商 (Xirsys)。在对等点之间建立连接时,每个对等点首先识别距离它们位置最近的 TURN 服务器,然后获取该服务器的凭据。然后,对等点交换 ICE 候选者,包括他们各自的 TURN 服务器 URL。
如果那些peer在不同的地区,他们会建议不同的TURN服务器。根据这个问题的公认答案: 各个 TURN 服务器将 相互连接 以中继来自 Peer1 <> TURN1 <> TURN2 <> Peer2 的流。但是,我一直无法让它发挥作用。在客户端中强制 TURN(即没有直接的 p2p 连接),并尝试使用 TURN 服务器建立 peerConnection,例如美国对巴西,谈判总是失败。
这是因为服务器需要在 ICE 候选人中未通过的凭据吗?或者这可能是 Xirsys 特有的问题?或者它实际上应该工作正常而我们做错了什么?
不,不会因为凭据。它们在客户端和它的 TURN 服务器之间使用。 TURN 服务器和远程端点之间的连接不使用任何身份验证。
事实上,每个 TURN 服务器都应该幸福地不知道对方甚至是另一个 TURN 服务器。就他们而言,无论是浏览器、另一个 TURN 服务器还是其他应用程序,他们都以相同的方式将数据包转发到远程端点。
因此,虽然可以通过两个 TURN 服务器工作,但这绝对不容易。原因是第一个 TURN 服务器将生成具有给定端口的分配。第二个 TURN 服务器需要将数据发送到此端口。但是,第一个 TURN 服务器如何知道将数据发送到哪里?第二个 TURN 服务器还没有分配!
通常,WebRTC 应用程序使用单一的 TURN 服务器。如果要使用两个,则意味着可以控制 SDP 的分配生成和消息传递。
我们使用全球 TURN 服务器提供商 (Xirsys)。在对等点之间建立连接时,每个对等点首先识别距离它们位置最近的 TURN 服务器,然后获取该服务器的凭据。然后,对等点交换 ICE 候选者,包括他们各自的 TURN 服务器 URL。
如果那些peer在不同的地区,他们会建议不同的TURN服务器。根据这个问题的公认答案:
这是因为服务器需要在 ICE 候选人中未通过的凭据吗?或者这可能是 Xirsys 特有的问题?或者它实际上应该工作正常而我们做错了什么?
不,不会因为凭据。它们在客户端和它的 TURN 服务器之间使用。 TURN 服务器和远程端点之间的连接不使用任何身份验证。
事实上,每个 TURN 服务器都应该幸福地不知道对方甚至是另一个 TURN 服务器。就他们而言,无论是浏览器、另一个 TURN 服务器还是其他应用程序,他们都以相同的方式将数据包转发到远程端点。
因此,虽然可以通过两个 TURN 服务器工作,但这绝对不容易。原因是第一个 TURN 服务器将生成具有给定端口的分配。第二个 TURN 服务器需要将数据发送到此端口。但是,第一个 TURN 服务器如何知道将数据发送到哪里?第二个 TURN 服务器还没有分配!
通常,WebRTC 应用程序使用单一的 TURN 服务器。如果要使用两个,则意味着可以控制 SDP 的分配生成和消息传递。