【问题标题】:DOMException: Error processing ICE candidateDOMException:处理 ICE 候选时出错
【发布时间】:2016-07-05 08:34:59
【问题描述】:

当我尝试添加冰候选时,我收到此错误DOMException: Error processing ICE candidate。这是候选人:

候选人:1278028030 1 udp 2122260223 10.0.18.123 62694 类型主机 第 0 代 ufrag eGOGlVCnFLZYKTsc network-id 1

此外,它并不总是会发生 - 其他时候一切都很顺利。我无法重现会引发此错误的一致模式。任何想法如何解决这个问题/调试它都将不胜感激!

【问题讨论】:

    标签: webrtc


    【解决方案1】:

    这个问题几乎完全没有记录,更糟糕的是,似乎只有 Google 正在实施 w3 webRTC 标准。他们也偏离了这个标准。

    但是,由于这很可能会在 Chrome 上发生(我没有检查过 Firefox,并且 Safari 没有实现 getUserMedia()),因此从控制台启动 Chrome 获得的此错误消息可能会有所帮助:

    [ERROR:rtc_peer_connection_handler.cc(1439)] Error processing ICE candidate.
    [ERROR:webrtcsession.cc(1134)] ProcessIceMessage: ICE candidates can't be added without any remote session description.
    

    因此,如果不根据最新版本的 Chrome 设置远程描述,您就无法添加 ICE 候选人,并且因为它是 2017 年,除了 Facebook Messenger 之外没有任何 webRTC 进展,这在可预见的未来看起来是有效的.

    所以记得打电话

    if(!peerConnection || !peerConnection.remoteDescription.type){
        //push candidate onto queue...
    }
    

    并在设置远程描述后,迭代队列以添加具有正确状态的对等连接的候选者!

    【讨论】:

    • 这真的很有帮助。我创建了一个空数组,然后当我在客户端上检测到 new-ice-candidate 时,我检查是否没有对等连接。如果没有,我将候选人推到阵列上。然后在视频报价和视频回答方法中,在我 setRemoteDescription 之后,我从数组中添加候选人,如下所示: if (candidatesOnQueue.length > 0) { CandidateOnQueue.forEach(function(c) { myPeerConnection.addIceCandidate(c) .catch( (err) => { logError(err.message); })}); }
    • 为什么要检查!peerConnection.remoteDescription.type?我相信!peerConnection.remoteDescription 是正确的检查。 .remoteDescription 属性可能为空。 .type 属性是不可为空的字符串
    • 这正是发生在我身上的事!通过在接收时排队候选人并仅在设置远程描述后添加它们来解决它。唯一的问题是,现在我必须确保在实际设置了远程描述之后,新的候选人会跳过队列直接进入addIceCandidate()。谢谢!
    【解决方案2】:

    如果有人仍在寻找答案,我的问题是我的 UI 在设置 localDescription 之前尝试使用 addIceCandidate(请记住 peerConnection.createAnswer())。我的来电者正在发送背靠背的 ICE 候选人,但他们都在接收者端失败并出现错误:DOMException: Error processing ICE candidate。这个简单的if 为我修复了它:

    // on receive-candidate
    ...
    if (peerConnection.localDescription) {
        peerConnection.addIceCandidate(new RTCIceCandidate(candidate))
            .catch(error => console.log(error));
    }
    

    【讨论】:

      【解决方案3】:

      如果您尝试连接到自己的对等(本地)ID,也会发生此错误。

      【讨论】:

        【解决方案4】:

        如果您保留了多个 RTCPeerConnection 对象,则必须确保将 ICE 候选对象和描述添加到正确的对象中。

        【讨论】:

          【解决方案5】:

          如果我进行第二轮提议-答案,它会起作用。我不确定为什么这是必要的。

          【讨论】:

            【解决方案6】:

            这可能已经过时了,但我有同样的错误,

            在 Chrome 上我得到了DOMException: Error processing ICE candidate

            在 Firefox 上,有一个错误,只显示DOMException

            附加消息是:"Invalid candidate (both sdpMid and sdpMLineIndex are null).",情况确实如此,从信令服务器收到的关于候选冰的响应中,我真的没有使用它们。

            当我收到信号时使用这 2 个值可以阻止此错误再次发生。

            希望这对其他人有所帮助。

            【讨论】:

            • 你找到解决这个问题的方法了吗?
            • “使用这两个值”是什么意思?如何以及在哪里?
            【解决方案7】:

            您是在调用 setRemoteDescription 之前添加候选人吗? Firefox 36 有一个问题,它会在远程描述之前发送候选,但这个问题已经解决了很久。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-18
              • 2016-08-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多