RTCPeerConnection: метод restartIce()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Метод restartIce() интерфейса RTCPeerConnection позволяет веб-приложению запросить повторное выполнение сбора кандидатов ICE с обеих сторон соединения. Это упрощает процесс, позволяя как вызывающей, так и принимающей стороне использовать один и тот же метод для запуска перезапуска ICE.
После того как restartIce() возвращает значение, предложение, возвращаемое следующим вызовом createOffer(), автоматически настраивается для запуска перезапуска ICE как на локальном узле (после настройки локального узла), так и на удалённом узле, после отправки предложения через ваш механизм сигнализации и настройки описания удалённым узлом.
restartIce() вызывает событие negotiationneeded на RTCPeerConnection, чтобы сообщить приложению о необходимости выполнить переговоры с помощью своего канала сигнализации.
Если переговоры не завершаются успешно (из-за отката или если входящие предложения находятся в процессе переговоров), RTCPeerConnection запомнит, что вы запросили перезапуск ICE. В следующий раз, когда состояние сигнализации signalingState соединения изменится на stable, соединение вызовет событие negotiationneeded. Этот процесс продолжается до тех пор, пока перезапуск ICE не будет успешно завершён.
Синтаксис
restartIce()
Параметры
Нет.
Возвращаемое значение
Нет (undefined).
Примечания по использованию
После вызова restartIce(), следующее предложение, созданное с помощью createOffer(), инициирует перезапуск ICE после отправки удалённому узлу через ваш механизм сигнализации. Перезапуск ICE по существу сбрасывает ICE, чтобы он создавал все новые кандидаты с использованием новых учётных данных. Существующие медиапередачи продолжаются без перерыва во время этого процесса.
Подробную информацию о работе перезапуска ICE см. в разделе Перезапуск ICE и RFC 5245, раздел 9.1.1.1: Спецификация ICE.
Примеры
В этом примере создаётся обработчик события iceconnectionstatechange, который обрабатывает переход в состояние failed путём перезапуска ICE, чтобы повторить попытку.
pc.addEventListener("iceconnectionstatechange", (event) => {
if (pc.iceConnectionState === "failed") {
/* possibly reconfigure the connection in some way here */
/* then request ICE restart */
pc.restartIce();
}
});
При наличии этого кода переход в состояние failed во время переговоров ICE вызовет событие negotiationneeded, в ответ на которое ваш код должен переговорить как обычно. Однако, поскольку вы вызвали restartIce(), ваш вызов createOffer(), который происходит в обработчике для negotiationneeded, вызовет перезапуск ICE вместо просто обычных переговоров.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
restartIce |
77 | 79 | 70 | 64 | 14.1 | 77 | 79 | 55 | 14.5 | 12.0 | 77 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/restartIce