Webrtc 将 ice 候选添加到远程对等点

amb*_* 66 2 javascript node.js webrtc

以下是来自 google webrtc 教程的示例 webrtc 对等连接代码。这个链接。我无法正确理解 addIceCandidate() 如何使用 onIceCandidate() 将其 Ice 候选者添加到其远程对等点。event.candidate 在这里是什么意思。一个明确的解释将不胜感激

function onIceCandidate(pc, event) {   //pc1.onicecandidate
  if (event.candidate) {
    getOtherPc(pc).addIceCandidate(
      new RTCIceCandidate(event.candidate)
    ).then(
      function() {
        onAddIceCandidateSuccess(pc);
      },
      function(err) {
        onAddIceCandidateError(pc, err);
      }
    );
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 6

当对等方 A 发现 ICE 候选对象(可用于通信的潜在路由)时,它需要将此 ICE 候选对象发送给对等方 B(反之亦然)。然后对等方 B 将该 ICE 候选者添加到其连接中。两个对等方以这种方式交换 ICE 候选,直到他们找到可以用来直接相互通信的最佳路由。

在那个简单的示例中,对等方 A 和 B 似乎在同一台机器上,因此(虚拟)getOtherPc函数可以获得“另一个对等方”的句柄,您可以直接使用其addIceCandidate方法。然而,在实践中,您必须使用信令服务器发送该 ICE 候选对象;对等方可以通过网络交换信息的其他某种方式。通常,该信令服务器将使用 websocket 连接,通过该连接可以近实时地中继信息。

  • 是的,在我的脑海中,一旦您设置了本地描述,ICE 候选人聚会就开始了。事实上,每个 ICE 候选都成为本地描述的一部分,您可以等到 ICE 收集完成,然后简单地发送包括 ICE 候选的完整本地描述。如果你一个一个地发送 ICE 候选者,这被称为 *ICE 涓流 * 并且是可选行为。 (3认同)
  • 好吧,一旦您有了自己的本地描述,您就会*发现* ICE 候选人。然后,您将该候选发送到远程对等方 B。 *该对等方* 只能在具有对等方 A 的会话描述时对其进行设置(将其添加到您的对等方 A 的会话描述中)。同样,将 ICE 候选者视为属于 SDP,事实上,如果您如上所述等待足够长的时间,他们就会这样做。稍后单独接收 ICE 候选并添加它们只是事后修改远程 SDP。 (2认同)