Webrtc 是否应通过addicecandidate添加空字符串?

Webrtc 是否应通过addicecandidate添加空字符串?,webrtc,p2p,nat-traversal,rtcpeerconnection,Webrtc,P2p,Nat Traversal,Rtcpeerconnection,我的问题是关于webrtc谈判 许多在线教程和MDN中描述的内容存在矛盾 在MDN中,它说 在每一代候选人结束时,一代候选人结束 通知以RTCICE候选者的形式发送,其候选者 属性是空字符串。此候选人仍应添加到 与往常一样,使用addIceCandidate()方法进行连接,以便 将该通知传递给远程对等方 在选举期间根本没有更多的候选人 当前谈判交换,候选人结束通知为 通过传递候选属性为null的RTICEAndicator发送。 此消息不需要发送到远程对等方。这是一个 状态的遗留通知,可由 通

我的问题是关于webrtc谈判

许多在线教程和MDN中描述的内容存在矛盾

在MDN中,它说

在每一代候选人结束时,一代候选人结束 通知以RTCICE候选者的形式发送,其候选者 属性是空字符串。此候选人仍应添加到 与往常一样,使用addIceCandidate()方法进行连接,以便 将该通知传递给远程对等方

在选举期间根本没有更多的候选人 当前谈判交换,候选人结束通知为 通过传递候选属性为null的RTICEAndicator发送。 此消息不需要发送到远程对等方。这是一个 状态的遗留通知,可由 通过观察,等待iceGatheringState更改为完成 用于icegatheringstatechange事件

但是,在本教程中,他们介绍了以下代码

function handleICECandidateEvent(event) {
  if (event.candidate) {
    sendToServer({
      type: "new-ice-candidate",
      target: targetUsername,
      candidate: event.candidate
    });
  }
}
如果候选者是空字符串,将对其求值为falsy,而不是通过
sendToServer
发送

更有趣的是,即使在同一篇文章中

它们有以下示例代码

rtcPeerConnection.onicecandidate = (event) => {
  if (event.candidate) {
    sendCandidateToRemotePeer(event.candidate)
  }
}
但就在这个片段下面,他们说

当ICE谈判会议没有候选人可供提名时 对于给定的RTICeTransport,它已完成一代人的收集 候选人名单。已发生这种情况由ICE候选者表示 候选字符串为空(“”)的事件

您应该像任何标准候选者一样将其发送给远程对等方,如上文“共享新候选者”中所述。这 确保为远程对等方提供候选端 通知也是如此


实际上,我阅读了很多在线教程,但我从未见过任何地方可以处理空字符串候选项。

旧规范不要求发送空候选项,但新规范要求发送和addIceCandidate()空候选项。
由于Chrome仍然是一个旧的规范,当addedIceCandidate()时,空的候选者将导致错误,因此我不会发送它。

您能为您的声明提供一个资源链接吗?我想跟踪根本问题,直到它支持更新我的代码为止。请查看此项了解详细信息