在 Chrome 移动设备上因特网中断后 webRTC 没有重新连接

webRTC is not reconnecting after internet dropout on Chrome mobile

我有一个 webRTC 视频,它在 PC 上 Chrome 和移动设备上 Chrome 之间按预期工作,但如果移动设备上的互联网连接中断,它不会恢复 webRTC 视频。已重新联机,但如果 PC 上的 Chrome 网络中断,它将正确恢复。

无论设备或浏览器如何,它都使用相同的实现,chrome 移动设备似乎与桌面设备一样支持 webRTC (https://caniuse.com/?search=webrtc),为什么它在移动设备上可能会失败 chrome?

我有以下 'oniceconnectionstatechange' 功能:

 pc.oniceconnectionstatechange = event => {
     if (pc.iceConnectionState === 'failed') {
       pc.restartIce()
     }
  }

我认为您看到了不同的行为,因为您的 NAT Mappings。可能是其他原因,但根据我们掌握的详细信息,这是我的第一个猜测。

当桌面连接中断(然后 returns)时,您将保留 NAT 映射。当移动设备上的连接中断时,您可能正在获得一个新连接。您可以通过从 phone 发送 UDP 数据包并在全球可路由服务器上打印出 src 详细信息来自己确认行为。

重新连接点的正确方法是 ICE Restart。这确保即使您的网络路径发生变化,您也会重新连接。