Webrtc Ice连接状态,已完成vs已连接

Webrtc Ice连接状态,已完成vs已连接,webrtc,Webrtc,有人能澄清一下iceConnectionstate:completed与iceConnectionstate:connected之间的区别吗 当我使用webrtc连接到浏览器时,我能够使用datachannel交换数据,但由于某些原因,使报价扩容完成的浏览器上的iceConnectionstate将更改为connected 知道这是否正常吗?ICE连接状态转换有点棘手,通过下面的流程图,您可以清楚地了解可能的转换 简单地说: 新建/检查:未连接 已连接/已完成:媒体路径可用 断开连接/失败:媒

有人能澄清一下iceConnectionstate:completediceConnectionstate:connected之间的区别吗

当我使用webrtc连接到浏览器时,我能够使用datachannel交换数据,但由于某些原因,使报价扩容完成的浏览器上的iceConnectionstate将更改为connected


知道这是否正常吗?

ICE连接状态转换有点棘手,通过下面的流程图,您可以清楚地了解可能的转换

简单地说:
新建/检查:未连接
已连接/已完成:媒体路径可用
断开连接/失败:媒体路径不可用(您在数据通道上发送的任何数据都不会到达另一端)

阅读全文摘要

尽管如此,WebRTC团队仍在努力使其稳定并符合规范。
当前的chrome行为令人困惑,因此我提交了一份声明,您可以启动它以获得通知。

简而言之:

  • 已连接:找到了一个可用的候选对,但仍在执行连接检查以找到更好的候选对
  • 已完成:找到工作候选对并完成连接检查
在大多数情况下,您可能会将连接/完成状态视为同一事物

请注意,正如Ajay所提到的,在标准如何定义状态和如何在Chrome中实现状态之间存在一些显著的差异。我想到的主要问题是:

  • 没有“候选结束”信号,因此候选状态定义的这些部分都没有实现。这意味着,如果远程候选者迟到,则可以在不重新启动ICE的情况下从“已完成”返回到“已连接”。虽然我认为这在实践中是罕见的
  • ICE状态实际上是ICE+DTLS状态的组合(请参见:)。这是因为它是在“RTCPeerConnectionState”出现之前实现的。如果确实存在DTLS级别的问题,这可能会导致混淆,因为真正注意的唯一方法是查看本机Chrome日志

我们肯定计划解决所有的差异。但有一段时间,我们推迟了,因为标准仍在变化中。现在,我们的重点是实施统一计划SDP和RtpSender/RTPreciver API。

常识口述如果两个对等方连接,它们将具有相同的状态,但似乎发起连接的对等方最终完成连接,对等方应答保持连接状态。