当我尝试添加冰候选者时,我收到此错误DOMException: Error processing ICE candidate
。这是候选人:
候选人:1278028030 1 udp 2122260223 10.0.18.123 62694 typ host 第0代ufrag eGOGlVCnFLZYKTsc network-id 1
此外,它并不总是发生 - 其他时间一切顺利。我无法重现一致的模式,它会抛出此错误。任何想法如何解决这个/调试它将不胜感激!
答案 0 :(得分:23)
这个问题几乎完全没有记录,更糟糕的是,Google似乎只是在实施w3 webRTC标准。他们也偏离了这个标准。
但是,由于很可能会在Chrome上发生这种情况(我没有检查过Firefox,而且Safari没有实现[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获得的此错误消息可能会有所帮助:
if(!peerConnection || !peerConnection.remoteDescription.type){
//push candidate onto queue...
}
那么,根据最新的Chrome版本,您无法设置ICE候选人而无需设置远程描述,因为2017年除了Facebook Messenger之外没有webRTC进度,这看起来对于可预见的未来。
所以记得打电话
<!DOCTYPE html>
<html>
<body>
<p id="demo">Click the button to change the text in this paragraph.</p>
<img id="img" src="#">
<button onclick="myFunction()">Try it</button>
<script>
function myFunction() {
document.getElementById("demo").innerHTML = "Hello World";
var i = true;
if(i) {
document.getElementById("img").src = "https://www.w3schools.com/css/trolltunga.jpg";
} else {
document.getElementById("img").src = "http://wallpaper- gallery.net/images/image/image-13.jpg";}
}
</script>
</body>
</html>
并且在设置远程描述之后,迭代队列以添加对等连接处于正确状态的候选者!
答案 1 :(得分:2)
如果您要保留多个RTCPeerConnection
对象,则必须确保将ICE候选人和说明添加到正确的对象中。
答案 2 :(得分:2)
这可能已经过时,但我有同样的错误,
在Chrome上我获得了DOMException: Error processing ICE candidate
,
在Firefox上,出现了一个错误,只是说明了DOMException
。
附加消息是:"Invalid candidate (both sdpMid and sdpMLineIndex are null)."
,情况确实如此,我真的没有从信号服务器得到的关于候选冰的响应中使用它们。
当我收到信号时使用这两个值会停止再次发生此错误。
希望这有助于其他人。
答案 3 :(得分:1)
如果我做出第二轮的报价答案,那就有效了。我不知道为什么这是必要的。
答案 4 :(得分:1)
您是否在调用setRemoteDescription之前添加候选者? Firefox 36遇到了一个问题,它在远程描述之前发送了候选者,但很久以来就已经解决了这个问题。
答案 5 :(得分:1)
如果您尝试连接到自己的对等(本地)ID,也会发生此错误。
答案 6 :(得分:0)
如果有人仍在寻找答案,我的问题是我的 UI 在设置 addIceCandidate
之前尝试 localDescription
(记住 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));
}