我已经尝试了所有的webrtc演示。它们中没有一个可以每次都连接。这只是一个本地主机连接。我不认为这是我的错。我有一个朋友也尝试过,通常它是有效的,但如果你重试足够多的演示,最终它将无法连接。
问题在于pc.connectionState == "failed"
webrtc是否真的无法保持一致的连接?怎么没人抱怨这件事呢?
这是我试过的一个更好的演示。https://scaledrone.github.io/webrtc-text-chat-tutorial/index.html源代码在这里https://github.com/ScaleDrone/webrtc-text-chat-tutorial
我向你挑战,让你试试。连接到你自己。关闭这两个选项卡,然后重试大约10次。它应该会卡住连接。有什么办法可以修复它吗?几个星期以来,我一直在处理所有演示的代码,但无法使任何东西稳定地连接起来!
我发现的唯一修复方法是,在pc.remoteDescription.type存在之前调用pc.addIceCandidate有时是一个竞争条件问题,修复这个问题似乎有帮助,但连接仍然卡住
我尝试了最新的chrome和firefox。我非常确定当我3年前第一次尝试webrtc时,它100%的时间都是连接的。
如果你有任何可以每次连接的webrtc代码,请将其作为答案发布,谢谢!
发布于 2020-05-19 05:32:44
即使在本地主机上使用它,也需要iceServers。这是因为,您正在使用datachannel。并且每当ice服务器不能建立连接时,它就可能失败。并且它也可能是由于在该过程中提供冲突。在这种情况下,您可以尝试重新协商同级:
在onconnectionstatechange事件中:(用于要约冲突)
if (pc.connectionState === 'failed') {
pc.restartIce()
}在oniceconnectionstatechange事件中:(用于ice服务器)
if (pc.iceconnectionState === 'failed') {
pc.restartIce()
}这将允许对等方通过negotiation:onnegotiationneeded事件重试连接。
https://stackoverflow.com/questions/61879184
复制相似问题