Javascript 两个WebRTC对等方同时启动ICE重启

Javascript 两个WebRTC对等方同时启动ICE重启,javascript,webrtc,p2p,sdp,Javascript,Webrtc,P2p,Sdp,我是webRTC的新手。问题与ICE重启有关。假设有两个对等点使用webRTC连接,其中一个失去连接。现在,对等连接将首先进入“断开”状态。不久之后,如果仍然没有连接,就会进入“失败”状态 现在,我明白了一旦达到这个失败状态,我必须执行ICE重启。问题是,即使一个对等方失去连接,两个对等方都会报告“失败”状态并尝试执行ICE重启,我认为这应该是有问题的。以下是代码片段: if (peer.localConnection.iceConnectionState == "failed") {

我是webRTC的新手。问题与ICE重启有关。假设有两个对等点使用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(“回滚”)执行“回滚”。但我不知道这是否有效,因为两个对等方都可能尝试执行回滚


如何确保只有一个对等方执行回滚?

避免这种情况的一种方法(因为回滚尚未广泛实施)是仅在您的连接端发送初始报价时重新启动ice。

感谢您的回复。假设我们有peer_A和peer_B。我面临的情况是:peer_A失去连接。对等点A和对等点B都进入断开连接状态。在15秒(我使用Chrome)超时后,peer_A和peer_B进入失败状态,执行ICE重启并发送他们的报价。这就是我对如何阻止只有一个对等方发送报价感到困惑的地方。由于两个节点运行相同的代码,我如何区分它们。注意:如果我能增加15秒的超时时间,我的问题就会得到解决,但不幸的是,它看起来是由浏览器强制执行的,无法更改。您通常知道最初是否调用了createOffer,并且需要自己存储该状态。感谢您的帮助。这似乎是一个很好的解决办法。另一件令我困惑的事情是冰重启。那么,让我们假设对等方A第一次连接并创建一个报价并发送它。在这种情况下,iceRestart参数应为false。然后,假设发生连接丢失,对等方使用参数true重新启动ice。这应该行得通。但是如果连接丢失再次发生,它将不再起作用,因为之前的服务也有iceRestart true。这就是我从Taylor的cmt中了解到的:正确吗?即使您不想使用,在步骤3中调用createOffer()也不是您想要的,因为您可以简单地访问本地描述,包括候选的pc.localDescription。的确,我可以按您指定的方式访问本地描述。但我对您不调用createOffer()的评论感到困惑。如何在不调用createOffer()的情况下执行ICE重启?