Spec-Zone.ru › Web APIs

RTCPeerConnection: метод createOffer()

Базовая Широко доступная

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузера. Она доступна во всех браузерах с января 2020 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Метод createOffer() интерфейса RTCPeerConnection инициирует создание предложения SDP для начала нового соединения WebRTC с удаленным узлом.

Предложение SDP содержит информацию о всех объектах MediaStreamTrack, уже подключённых к сессии WebRTC, поддерживаемых кодеках и параметрах браузера, а также о всех кандидатах, уже собранных агентом ICE, для передачи по каналу сигнализации потенциальному узлу с целью запроса соединения или обновления конфигурации существующего соединения.

Синтаксис

createOffer()
createOffer(options)

createOffer(successCallback, failureCallback) // deprecated
createOffer(successCallback, failureCallback, options) // deprecated

Параметры

options Необязательно

Объект, предоставляющий следующие необязательные параметры для предложения:

iceRestart Необязательно

Для перезапуска ICE в активном соединении, установите это значение в true. Это приведет к тому, что возвращённое предложение будет иметь другие учетные данные, чем уже существующие. Если вы затем примените возвращённое предложение, ICE перезапустится. Установите значение false для сохранения тех же учетных данных и, следовательно, для предотвращения перезапуска ICE. false.

offerToReceiveAudio Необязательно Устаревшее

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

offerToReceiveVideo Необязательно Устаревшее

Предоставляет дополнительный контроль над направленностью видео. Например, он может быть использован для обеспечения возможности приёма видео, независимо от того, отправляется ли видео или нет.

Устаревшие параметры

В старом коде и документации вы можете увидеть версию этой функции с обратными вызовами. Эта версия устарела и её использование сильно не рекомендуется. Вы должны обновить любой существующий код для использования версии, основанной на Promise, вместо createOffer(). Параметры для старой формы createOffer() описаны ниже, чтобы помочь в обновлении существующего кода.

successCallback Устаревшее

Функция обратного вызова, которой будет передан единственный объект RTCSessionDescription, описывающий только что созданное предложение.

errorCallback Устаревшее

Функция обратного вызова, которой будет передан единственный объект DOMException, объясняющий причину неудачи запроса на создание предложения.

options Необязательно

Необязательный объект, предоставляющий параметры, запрошенные для предложения.

Возвращаемое значение

Объект Promise, который возвращает объект с теми же свойствами, что и у объектов RTCSessionDescription:

type

Строка со значением "offer".

sdp

Строка, содержащая SDP, описывающая сгенерированное предложение, которое должно быть передано удалённому узлу.

Исключения

Эти исключения возвращаются путём отклонения возвращённого объекта Promise. Ваш обработчик отклонений должен проверять полученное исключение, чтобы определить, какое из них произошло.

InvalidStateError DOMException

Возвращается, если RTCPeerConnection закрыт.

NotReadableError DOMException

Возвращается, если сертификат или набор сертификатов для обеспечения соединения не были предоставлены, и createOffer() не смог создать новый. Поскольку все подключения WebRTC должны быть защищены, это приводит к ошибке.

OperationError DOMException

Возвращается, если проверка состояния системы для определения доступности ресурсов для генерации предложения по какой-то причине завершилась неудачно.

Примеры

Здесь мы видим обработчик события negotiationneeded, который создаёт предложение и отправляет его удалённой системе по каналу сигнализации.

Примечание: Имейте в виду, что это часть процесса сигнализации, транспортный уровень которой является реализацией детали, которая полностью зависит от вас. В этом случае используется подключение WebSocket для отправки сообщения JSON с полем type со значением "video-offer" другому узлу. Содержимое объекта, передаваемого в функцию sendToServer(), а также всё остальное в обработчике выполнения Promise, полностью зависят от вашего дизайна.

myPeerConnection
  .createOffer()
  .then((offer) => myPeerConnection.setLocalDescription(offer))
  .then(() => {
    sendToServer({
      name: myUsername,
      target: targetUsername,
      type: "video-offer",
      sdp: myPeerConnection.localDescription,
    });
  })
  .catch((reason) => {
    // An error occurred, so handle the failure to connect
  });

В этом коде предложение создаётся, и после успешного завершения локальный конец RTCPeerConnection настраивается в соответствии с ним, передавая предложение (представленное объектом в том же формате, что и объект RTCSessionDescription) в setLocalDescription(). После этого предложение отправляется удалённой системе по каналу сигнализации; в данном случае, с помощью пользовательской функции, названной sendToServer(). Реализация сервера сигнализации не зависит от спецификации WebRTC, поэтому способ отправки предложения не важен, до тех пор, пока и отправитель, и потенциальный получатель используют один и тот же.

Используйте Promise.catch() для перехвата и обработки ошибок.

См. Сигнализация и видеозвонки для полного примера, из которого взят этот фрагмент; это поможет вам понять, как работает код сигнализации в данном случае.

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

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

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

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
createOffer 24 15 22 15 11 25 24 14 11 1.5 4.4
returns_promise 51 79 37 43 11 51 37 43 11 6.0 51

© 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/createOffer

Spec-Zone.ru

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