我试过所有的webrtc演示,没有一个能每次都能连接,这只是一个本地主机的连接,我不认为这是我的错,我有一个朋友也试过,通常它的工作,但如果你重试演示足够多,最终它将无法连接。
问题是 pc.connectionState == "failed"
是webrtc实际上无法连接一致吗? 怎么没有人抱怨这个?
这是我试过的一个比较好的演示。https:/scaledrone.github.iowebrtc-text-chat-tutorialindex.html。源码在这里 https:/github.comScaleDronewebrtc-text-chat-tutorial。
我挑战你来试试。连接到你自己,关闭两个标签页,然后再试10次。
我发现的唯一修复方法是,在pc.remoteDescription.type存在之前调用pc.addIceCandidate有时是一个竞赛条件问题,解决这个问题似乎有帮助,但连接还是会卡住。
我尝试了最新的chrome和firefox。我敢肯定,当我第一次尝试webrtc 3年前,它连接100%的时间。
如果你有任何webrtc代码,可以连接每一次,张贴它作为一个答案,谢谢!我已经尝试了每一个webrtc演示在那里。
即使在localhost上使用,你也需要iceServers。这是因为,你使用的是 datachannel
. 而每当冰雪服务器无法建立连接时,它可能会失败。也有可能是由于过程中的offer碰撞。在这种情况下,你可以尝试重新协商对等体。
在... onconnectionstatechange
事件。(对于报价碰撞)
if (pc.connectionState === 'failed') {
pc.restartIce()
}
在 oniceconnectionstatechange
事件。(冰服务器)
if (pc.iceconnectionState === 'failed') {
pc.restartIce()
}
这将让对等体通过协商重新尝试连接。onnegotiationneeded
事件: