RTCPeerConnection: событие negotiationneeded
Базовая Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
Событие negotiationneeded отправляется в RTCPeerConnection, когда требуется переговор для подключения через канал сигнализации. Это происходит как при первоначальной настройке соединения, так и в любой момент, когда изменения в среде связи требуют повторной настройки соединения.
Событие negotiationneeded вначале отправляется в RTCPeerConnection, когда в соединение добавляется медиа. Это запускает процесс переговоров ICE, указывая коду начать обмен кандидатами ICE через сервер сигнализации. См. Поток транзакций сигнализации для описания процесса сигнализации, который начинается с события negotiationneeded.
Это событие не может быть отменено и не распространяется.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.
addEventListener("negotiationneeded", (event) => {});
onnegotiationneeded = (event) => {};
Тип события
Общее событие Event.
Примеры
В этом примере мы используем addEventListener() для создания обработчика событий negotiationneeded. Его задача — создать предложение SDP и отправить его через канал сигнализации удалённому узлу.
pc.addEventListener(
"negotiationneeded",
(ev) => {
pc.createOffer()
.then((offer) => pc.setLocalDescription(offer))
.then(() =>
sendSignalingMessage({
type: "video-offer",
sdp: pc.localDescription,
}),
)
.catch((err) => {
// handle error
});
},
false,
);
После создания предложения локальный конец настраивается с помощью вызова RTCPeerConnection.setLocalDescription(); затем сообщение сигнализации создаётся и отправляется удалённому узлу через сервер сигнализации, чтобы поделиться этим предложением с другим узлом. Другой узел должен распознать это сообщение и последовать за ним, создав собственный RTCPeerConnection, установив удалённое описание с помощью setRemoteDescription(), а затем создав ответ, который нужно будет отправить предложению.
Вы также можете установить обработчик событий negotiationneeded, назначив функцию обработчика события свойству onnegotiationneeded:
pc.onnegotiationneeded = (ev) => {
pc.createOffer()
.then((offer) => pc.setLocalDescription(offer))
.then(() =>
sendSignalingMessage({
type: "video-offer",
sdp: pc.localDescription,
}),
)
.catch((err) => {
// handle error
});
};
Более подробный пример см. в Начало переговоров.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | |
negotiationneeded_event |
24 | 15 | 3824–38Хотя свойствоonnegotiationneeded поддерживается, событие negotiationneeded никогда не срабатывает. |
15 | 11 | 25 | 3824–38Хотя свойствоonnegotiationneeded поддерживается, событие negotiationneeded никогда не срабатывает. |
14 | 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/negotiationneeded_event