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:
Исключения
Эти исключения возвращаются путём отклонения возвращённого объекта Promise. Ваш обработчик отклонений должен проверять полученное исключение, чтобы определить, какое из них произошло.
-
InvalidStateErrorDOMException -
Возвращается, если
RTCPeerConnectionзакрыт. -
NotReadableErrorDOMException -
Возвращается, если сертификат или набор сертификатов для обеспечения соединения не были предоставлены, и
createOffer()не смог создать новый. Поскольку все подключения WebRTC должны быть защищены, это приводит к ошибке. -
OperationErrorDOMException -
Возвращается, если проверка состояния системы для определения доступности ресурсов для генерации предложения по какой-то причине завершилась неудачно.
Примеры
Здесь мы видим обработчик события 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