首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebRTC RTCPeerConnection有时无法连接

WebRTC RTCPeerConnection有时无法连接
EN

Stack Overflow用户
提问于 2020-05-19 05:19:19
回答 1查看 827关注 0票数 1

我已经尝试了所有的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代码,请将其作为答案发布,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 05:32:44

即使在本地主机上使用它,也需要iceServers。这是因为,您正在使用datachannel。并且每当ice服务器不能建立连接时,它就可能失败。并且它也可能是由于在该过程中提供冲突。在这种情况下,您可以尝试重新协商同级:

onconnectionstatechange事件中:(用于要约冲突)

代码语言:javascript
复制
if (pc.connectionState === 'failed') {
  pc.restartIce()
}

oniceconnectionstatechange事件中:(用于ice服务器)

代码语言:javascript
复制
if (pc.iceconnectionState === 'failed') {
  pc.restartIce()
}

这将允许对等方通过negotiation:onnegotiationneeded事件重试连接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61879184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档