是否可以在提供要求凭据的不同TURN服务器的对等方之间成功协商WebRTC连接?

问题描述

我们使用全局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的按摩。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...