RTCPeerConnection: событие iceconnectionstatechange
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
Событие iceconnectionstatechange отправляется объекту RTCPeerConnection каждый раз, когда состояние соединения ICE изменяется во время процесса переговоров. Новое состояние соединения ICE доступно в свойстве объекта iceConnectionState.
Одна из распространенных задач обработчика события iceconnectionstatechange — запуск повторной инициализации ICE (ICE restart) при изменении состояния на failed.
Это событие не может быть отменено и не распространяется.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте обработчик события.
addEventListener("iceconnectionstatechange", (event) => {});
oniceconnectionstatechange = (event) => {};
Тип события
Общее Event.
Примечания по использованию
Успешная попытка подключения обычно начинается в состоянии new, затем переходит в checking, затем connected, и, наконец, completed. Однако в определенных ситуациях состояние connected может быть пропущено, что приводит к прямому переходу соединения из состояния checking в completed. Это может произойти, когда только последний проверенный кандидат успешен, а сигналы сбора и окончания кандидатов поступают до завершения успешных переговоров.
Состояние соединения ICE во время повторной инициализации ICE
При обработке повторной инициализации ICE процесс сбора и проверки соединений начинается заново, что приведет к переходу iceConnectionState в connected если повторная инициализация ICE была выполнена, когда соединение находилось в состоянии completed. Если повторная инициализация ICE инициирована, когда соединение находится в переходном состоянии disconnected, состояние переходит в checking, что фактически означает, что процесс переговоров игнорирует тот факт, что соединение временно было потеряно.
Переходы состояний по завершении переговоров
Когда процесс переговоров исчерпал кандидатов для проверки, соединение ICE переходит в одно из двух состояний. Если подходящие кандидаты не были найдены, состояние переходит в failed. Если по меньшей мере один подходящий кандидат был успешно идентифицирован, состояние переходит в completed. Слой ICE принимает это решение после получения сигнала окончания кандидатов, который предоставляется вызовом addIceCandidate() с кандидатом, чье свойство candidate является пустой строкой ("") или путем задания свойства RTCPeerConnection свойство canTrickleIceCandidates в значение false.
Примеры
Обработчик этого события можно добавить, используя свойство oniceconnectionstatechange или с помощью addEventListener() на объекте RTCPeerConnection.
В этом примере настраивается обработчик для события iceconnectionstatechange, чтобы обновить индикатор состояния вызова, используя значение iceConnectionState для создания строки, соответствующей имени CSS-класса, который мы можем назначить индикатору состояния, чтобы он отражал текущее состояние соединения.
pc.addEventListener(
"iceconnectionstatechange",
(ev) => {
let stateElem = document.querySelector("#call-state");
stateElem.className = `${pc.iceConnectionState}-state`;
},
false,
);
Это также можно записать так:
pc.oniceconnectionstatechange = (ev) => {
let stateElem = document.querySelector("#call-state");
stateElem.className = `${pc.iceConnectionState}-state`;
};
Спецификации
| Спецификация |
|---|
| WebRTC: Реальное общение в браузерах # dom-rtcpeerconnection-oniceconnectionstatechange |
Совместимость с браузерами
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
iceconnectionstatechange_event |
28 | 15 | 24 | 15 | 11 | 28 | 24 | 15 | 11 | 1.5 | 4.4 |
См. также
© 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/iceconnectionstatechange_event