javascript - 两个 WebRTC 对等体同时启动 ICE 重启
问题描述
我对 webRTC 相当陌生。该问题与 ICE 重启有关。假设有 2 个对等方使用 webRTC 连接,其中一个失去连接。现在,对等连接将首先进入“断开连接”状态。不久之后,如果仍然没有连接,则进入“失败”状态。
现在,我明白一旦达到这种失败状态,我必须执行 ICE 重启。问题是即使一个对等点失去连接,两个对等点都会报告“失败”状态并尝试执行 ICE 重启,我认为这应该是有问题的。这是代码片段:
if (peer.localConnection.iceConnectionState == "failed") {
// create an offer
peer.localConnection.createOffer({
iceRestart : true
}).then(function(offer) {
peer.localConnection.setLocalDescription(offer);
// forward the offer to the signaling server
var msg = createMsg("OFFER", myId, peerId, offer);
sendToSignallingServer(msg);
}, function(error) {
//error
});
}
我了解,在发现现在有两个报价时,其中一个对等方应使用 RTCSessionDescription("rollback") 执行“回滚”。但是我很困惑这是否会起作用,因为两个对等方都可能尝试执行回滚。
我如何确保只有一个对等方执行回滚?
解决方案
避免这种情况的一种方法(因为回滚尚未广泛实施)是仅在您的连接端发送初始报价时才进行冰重启。
推荐阅读
- keras - 自动keras模型优化崩溃
- servicestack - ServiceStack 缓存用户角色和权限的方法
- angular - Angular 7.xx 在静态页面上的anchorScroll?
- php - 使用 dompdf 或 tcpd 将 html/css 代码呈现为 pdf 时出错
- authorization - 在清漆中取消设置授权标头,但还将标头发送到后端
- vmware-clarity - clr validate 图标未在无效输入中触发,并且始终显示错误消息
- node.js - 控制特定的音频输出,例如减少来自 Electron 中浏览器的音频
- python - Python Lambda - Lambda 函数中 API 调用的基本身份验证
- python-3.x - Python 向多个通道发送消息
- java - 启用 Spring Cloud 配置使 Angular 的资产不可见