Должна ли пустая строка icecandidate быть добавлена ​​addicecandidate? - PullRequest
0 голосов
/ 03 мая 2020

У меня вопрос по поводу переговоров webrt c.

Во многих онлайн-учебниках есть противоречие и то, что описано в MDN.

В MDN говорится: ссылка

В конце каждого поколения кандидатов отправляется уведомление о конце кандидатов в виде RTCIceCandidate , свойство кандидата которого является пустой строкой. Этот кандидат по-прежнему должен быть добавлен к соединению, используя метод addIceCandidate () , как обычно, для доставки этого уведомления удаленному узлу.

Когда больше нет кандидатов, которых можно ожидать во время при текущем обмене переговорами отправляется уведомление об окончании кандидатов посредством доставки RTCIceCandidate, свойство кандидата которого равно нулю. Это сообщение не нужно отправлять удаленному узлу. Это устаревшее уведомление о состоянии, которое можно обнаружить вместо этого, наблюдая за изменением iceGatheringState до завершения, наблюдая за событием icegatheringstatechange.

Однако, в руководстве здесь они вводят следующий код

function handleICECandidateEvent(event) {
  if (event.candidate) {
    sendToServer({
      type: "new-ice-candidate",
      target: targetUsername,
      candidate: event.candidate
    });
  }
}

Если кандидат - пустая строка, она будет оценена как ложная и не будет отправлена ​​через sendToServer.

Что еще интереснее, даже в той же статье здесь

Они имеют следующий пример кода

rtcPeerConnection.onicecandidate = (event) => {
  if (event.candidate) {
    sendCandidateToRemotePeer(event.candidate)
  }
}

Но прямо под этим фрагментом они говорят

, когда выполняется сеанс согласования ICE из кандидатов, чтобы предложить для данного RTCIceTransport, он завершил сбор для поколения кандидатов. То, что это произошло, указывается событием icecandidate , строка кандидата которого пуста ("") .

Вы должны доставить это удаленному узлу, как и любой стандартный кандидат, так как описано в разделе «Обмен новым кандидатом» выше . Это гарантирует, что удаленный узел также получит уведомление об окончании кандидатов.

На самом деле, я прочитал много онлайн-уроков, но я никогда не видел нигде, где они обрабатывают пустую строку-кандидата.

1 Ответ

0 голосов
/ 03 мая 2020

Старое spe c не требовало отправки пустого кандидата, но новое spe c требует send и addIceCandidate () пустого кандидата. Поскольку Chrome все еще является старой спецификацией, пустой кандидат вызовет ошибку при добавлении IceCandidate (), поэтому я не буду отправлять его.

...