如何调试ICE候选者的选择?

时间:2020-08-24 23:48:53

标签: webrtc

我正在同一网络上的两台笔记本电脑之间创建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服务器并使其正常工作来确认的。

1 个答案:

答案 0 :(得分:1)

此statckoverflow post将为您提供帮助。简而言之

每个ICE都包含您网络的“节点”,直到到达外部为止。通过这种方式,您可以将这些ICE发送给其他对等方,以便他们知道可以通过哪些连接点到达您。将其视为一栋大建筑物:一个在建筑物中,需要告诉另一个(不熟悉的人)如何穿过建筑物。同样在这里,如果我有很多网络设备,则传入连接需要以某种方式找到通往计算机的正确方法。通过提供所有节点,RTC连接本身会找到最短的路由。因此,当您连接到旁边的计算机(连接到同一路由器/交换机/任何设备)时,它将使用所有ICE并确定最短的计算机,而这恰恰是通过该点。您的同事获得ICE候选人的人数减少与它必须通过的设备数量有关。请注意,您计算机中每个具有IP地址的网络适配器(我有来自hyper-v的vEthernet交换机),也会为它创建一个ICE