当不同网络上的对等点时,RTCPeerConnection 失败
Posted
技术标签:
【中文标题】当不同网络上的对等点时,RTCPeerConnection 失败【英文标题】:RTCPeerConnection fails when peers on different networks 【发布时间】:2021-10-30 07:23:01 【问题描述】:我有一个原型网络应用程序,它使用 WebRTC javascript API 进行(单向)实时视频流传输(使用 RTCPeerConnection API),旨在从桌面网络应用程序流式传输到 ios 混合应用程序。
在当前状态下,当两个设备处于同一 WiFi 连接时,应用程序成功地流式传输视频。但是,当我为 iOS 对等端关闭 WiFi,并使用移动数据/4G 连接,然后尝试重新协商 RTCPeerConnection 时,RTCPeerConnection 以失败状态结束。
我正在向 RTCPeerConnection 实例提供 Google 的公共 STUN 服务器。
const config: RTCConfiguration =
'iceServers': [
'urls': [
'stun:stun.l.google.com:19302',
'stun:stun1.l.google.com:19302',
'stun:stun2.l.google.com:19302',
'stun:stun3.l.google.com:19302',
'stun:stun4.l.google.com:19302',
]
,
]
let peer = new RTCPeerConnection(config)
我不确定还有哪些其他代码可以帮助调试它。同样,当对等方位于同一个 WiFi 网络上时,它会按预期工作。如果我将第二个对等点(iOS 设备)从 WiFi 中取出并使用移动数据,它会停止工作,并且 RTCPeerConnection 最终具有 ICE 连接状态failed
。如果设备都在 WiFi 上,但在不同的 WiFi 网络上,我无法测试会发生什么。
如果有人对调试有任何建议,我也将不胜感激。我附加了一些事件处理程序来尝试调试。
peer.oniceconnectionstatechange = (ev: Event) =>
console.log('RTCPeerConnection ICE state change', peer.iceConnectionState, JSON.stringify(ev))
peer.onicecandidateerror = (ev: RTCPeerConnectionIceErrorEvent) =>
console.log('ice candidate error', JSON.stringify(ev))
从第一个,我得到这个日志行:
RTCPeerConnection ICE state change disconnected "isTrusted":true
然而,后一个,on error handler,永远不会被调用。
【问题讨论】:
【参考方案1】:1/ STUN 服务器不保证可以建立连接。需要 TURN 服务器以获得更高的成功率。
2/ onicecandidate 错误仅处理与收集本地候选人相关的错误,而不是未能建立与对等点的连接,这是预期的。
【讨论】:
以上是关于当不同网络上的对等点时,RTCPeerConnection 失败的主要内容,如果未能解决你的问题,请参考以下文章
当工具提示在 ng-bootstrap 中到达 y 轴上的某个点时,是不是可以更改工具提示的位置?
Django - 当用户选择地图上的点时,如何以模式形式包含地图并将坐标保存到数据库?