如何调试ICE候选人的选择



我正在同一网络上的两台笔记本电脑之间创建WebRTC连接。我希望TURN服务器不会被选为连接,但目前是这样。我看了一下ICE候选人,他们似乎把我的TURN服务器作为优先级的垫底。以下是我的状态的JSON表示:

"connection": {
"version": 4,
"ip": "64.227.54.86\r\n"
},
"candidates": [
{
"foundation": 175723363,
"component": 1,
"transport": "udp",
"priority": 2122260223,
"ip": "192.168.86.64",
"port": 64242,
"type": "host",
"generation": 0,
"network-id": 1,
"network-cost": 50,
"_priority": "126 | 32542 | 255"
},
{
"foundation": 2335266263,
"component": 1,
"transport": "udp",
"priority": 1686052607,
"ip": "24.6.16.241",
"port": 64242,
"type": "srflx",
"raddr": "192.168.86.64",
"rport": 64242,
"generation": 0,
"network-id": 1,
"network-cost": 50,
"_priority": "100 | 32542 | 255"
},
{
"foundation": 1157279635,
"component": 1,
"transport": "tcp",
"priority": 1518280447,
"ip": "192.168.86.64",
"port": 64852,
"type": "host",
"tcptype": "passive",
"generation": 0,
"network-id": 1,
"network-cost": 50,
"_priority": "90 | 32542 | 255"
},
{
"foundation": 1039353576,
"component": 1,
"transport": "udp",
"priority": 41885695,
"ip": "64.227.54.86",
"port": 38537,
"type": "relay",
"raddr": "24.6.16.241",
"rport": 64242,
"generation": 0,
"network-id": 1,
"network-cost": 50,
"_priority": "2 | 32543 | 255"
},
{
"foundation": 1936767512,
"component": 1,
"transport": "udp",
"priority": 25108223,
"ip": "64.227.54.86",
"port": 57994,
"type": "relay",
"raddr": "24.6.16.241",
"rport": 64851,
"generation": 0,
"network-id": 1,
"network-cost": 50,
"_priority": "1 | 32542 | 255"
}
],

我的问题是,有没有一种方法可以调试为什么一个特定的ICE候选人会被选中而不是其他人?我很想知道为什么要选择一个特定的。

为了提供更多的上下文,当存在完全有效的非TURN连接路径时,ICE选择TURN服务器作为连接。这是通过从ICE服务器列表中删除TURN服务器并使所有工作正常来确认的。

此Stack Overflow帖子将对您有所帮助。

简而言之:

每个ICE都包含网络的"一个节点",直到它到达外部。这样,你就可以将这些ICE发送给另一个对等体,这样他们就知道可以通过什么连接点联系到你。把它看作一栋大建筑:一栋在大楼里,需要告诉另一栋(不熟悉的人(如何穿过它。这里也是一样,如果我有很多网络设备,传入的连接需要找到通往我电脑的正确方法。通过提供所有节点,RTC连接自己找到最短的路由。因此,当你连接到你旁边的计算机,该计算机连接到同一个路由器/交换机/任何东西时,它会使用所有的ICE并确定最短的,这是直接通过该点的。你的同事获得的ICE候选人较少,这与它必须通过的设备数量有关。请注意,您计算机中每个有IP地址的网络适配器(我有一个来自hyper-v的vEthernet交换机(也会为其创建一个ICE

PeerConnectionObserver的一个名为onSelectedCandidatePairChanged的回调方法。

最新更新