我正在同一网络上的两台笔记本电脑之间创建WebRTC连接。我希望不要选择TURN服务器作为连接,但目前是这样。我查看了ICE候选人,他们在优先次序方面似乎以我的转向服务器为底。这是我的状态的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服务器并使其正常工作来确认的。
答案 0 :(得分:1)
此statckoverflow post将为您提供帮助。简而言之
每个ICE都包含您网络的“节点”,直到到达外部为止。通过这种方式,您可以将这些ICE发送给其他对等方,以便他们知道可以通过哪些连接点到达您。将其视为一栋大建筑物:一个在建筑物中,需要告诉另一个(不熟悉的人)如何穿过建筑物。同样在这里,如果我有很多网络设备,则传入连接需要以某种方式找到通往计算机的正确方法。通过提供所有节点,RTC连接本身会找到最短的路由。因此,当您连接到旁边的计算机(连接到同一路由器/交换机/任何设备)时,它将使用所有ICE并确定最短的计算机,而这恰恰是通过该点。您的同事获得ICE候选人的人数减少与它必须通过的设备数量有关。请注意,您计算机中每个具有IP地址的网络适配器(我有来自hyper-v的vEthernet交换机),也会为它创建一个ICE