问题描述
我们使用全局TURN服务器(Xirsys)的提供程序。在对等方之间建立连接时,每个对等方首先标识与其位置最近的TURN服务器,然后获取该服务器的凭据。然后,对等方交换ICE候选者,包括他们各自的TURN服务器URL。
如果这些对等设备位于不同的区域,则他们将建议使用不同的TURN服务器。根据对此问题的公认答案:TURN-Server for RTCConfiguration,各个TURN服务器将相互连接以中继来自Peer1 TURN1 TURN2 Peer2的流。但是,我无法使它正常工作。在客户端强制TURN(即没有直接的p2p连接),并尝试使用TURN服务器建立对等连接,例如美国到巴西,谈判总是失败。
这是因为服务器需要未在ICE候选中传递的凭据吗?也许这是Xirsys特有的问题?还是应该正常工作,而我们又做错了什么?
解决方法
不,这不是因为凭证。它们在客户端与其TURN服务器之间使用。 TURN服务器与远程端点之间的连接不使用任何身份验证。
实际上,每个TURN服务器都应该非常高兴地意识到远程方甚至是另一个TURN服务器。就他们而言,无论是浏览器,其他TURN服务器还是其他应用程序,它们都将数据包转发到远程端点相同。
,因此,虽然可以通过两个TURN服务器工作,但这绝对不容易。原因是第一台TURN服务器将生成具有给定端口的分配。第二个TURN服务器将需要将数据发送到此端口。但是,第一个TURN服务器如何知道将数据发送到哪里?第二个TURN服务器尚未分配!
通常,WebRTC应用程序使用单个TURN服务器。如果要使用两个,则意味着可以控制分配生成和SDP的按摩。