Spec-Zone.ru › Web APIs

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
    });
};

Более подробный пример см. в Начало переговоров.

Спецификации

Спецификация
WebRTC: Реальное общение в браузерах
# dom-rtcpeerconnection-onnegotiationneeded

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari на iOS Samsung Internet WebView для Android
negotiationneeded_event 24 15 38
24–38Хотя свойство onnegotiationneeded поддерживается, событие negotiationneeded никогда не срабатывает.
15 11 25 38
24–38Хотя свойство onnegotiationneeded поддерживается, событие negotiationneeded никогда не срабатывает.
14 11 1.5 4.4

См. также

  • API WebRTC
  • Сигнализация и видеозвонки
  • Срок действия сеанса WebRTC
  • Подключение WebRTC
  • Введение в протоколы WebRTC

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API