WebRTC RTCPeerConnection有时无法连接。

问题描述 投票:0回答:1

我试过所有的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演示在那里。

javascript networking webrtc
1个回答
1
投票

即使在localhost上使用,你也需要iceServers。这是因为,你使用的是 datachannel. 而每当冰雪服务器无法建立连接时,它可能会失败。也有可能是由于过程中的offer碰撞。在这种情况下,你可以尝试重新协商对等体。

在... onconnectionstatechange 事件。(对于报价碰撞)

if (pc.connectionState === 'failed') {
  pc.restartIce()
}

oniceconnectionstatechange 事件。(冰服务器)

if (pc.iceconnectionState === 'failed') {
  pc.restartIce()
}

这将让对等体通过协商重新尝试连接。onnegotiationneeded 事件:

© www.soinside.com 2019 - 2024. All rights reserved.