Spec-Zone.ru › Web APIs

RTCPeerConnection: метод setLocalDescription()

Базовая Широко поддерживается

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

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

Метод setLocalDescription() интерфейса RTCPeerConnection изменяет локальное описание, связанное с соединением. Это описание указывает свойства локального конца соединения, включая формат медиаданных. Метод принимает единственный параметр — описание сессии — и возвращает Promise, который выполняется после асинхронного изменения описания.

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

Синтаксис

setLocalDescription()
setLocalDescription(sessionDescription)

setLocalDescription(sessionDescription, successCallback, errorCallback) // deprecated

Параметры

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

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

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

Строка, указывающая тип описания сессии. Если вы не укажете описание сессии явно, среда выполнения WebRTC попытается обработать его корректно. Если состояние сигнализации — одно из stable, have-local-offer, или have-remote-pranswer, среда выполнения WebRTC автоматически создаёт новое предложение и устанавливает его в качестве нового локального описания. В противном случае, setLocalDescription() создаёт ответ, который становится новым локальным описанием.

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

Строка, содержащая SDP, описывающая сессию. Если sdp не указан, он по умолчанию устанавливается в пустую строку. Если type равно "rollback", sdp должно быть null или пустой строкой.

Если описание опущено, среда выполнения WebRTC пытается автоматически сделать правильный выбор.

Вы также можете передать экземпляр RTCSessionDescription, но это не повлияет на результат. Поэтому конструктор RTCSessionDescription устарел.

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

successCallback Устарело

JavaScript-функция Function без параметров, которая вызывается после успешного задания описания. В этот момент предложение может быть отправлено удалённому узлу через сервер сигнализации.

errorCallback Устарело

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

Эта устаревшая форма метода возвращает значение мгновенно, не ожидая фактического выполнения: в случае успеха вызывается successCallback, в случае неудачи — errorCallback.

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

Promise, который выполняется, как только значение RTCPeerConnection.localDescription успешно изменено, или отклоняется, если изменение невозможно применить (например, если указанное описание несовместимо с одним или обоими узлами в соединении). Обработчик выполнения промиса не принимает входных параметров.

Примечание: Процесс изменения описаний фактически включает промежуточные шаги, выполняемые слоем WebRTC, чтобы убедиться, что активное соединение может быть изменено без потери соединения, если изменение не удаётся. Дополнительные сведения об этом процессе см. в разделе «Ожидаемые и текущие описания» на странице «Подключение WebRTC».

Устаревшие исключения

При использовании устаревшей версии setLocalDescription() с обратными вызовами могут возникнуть следующие исключения:

InvalidStateError DOMException Устарело

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

InvalidSessionDescriptionError DOMException Устарело

Выбрасывается, если параметр sessionDescription недопустим.

Примеры

Неявные описания

Одно из преимуществ параметризованной формы setLocalDescription() заключается в том, что она значительно упрощает код переговоров. Это примерно то, что должен выглядеть ваш обработчик события negotiationneeded. Добавьте код сервера сигнализации, который здесь представлен вызовом signalRemotePeer().

pc.addEventListener("negotiationneeded", async (event) => {
  await pc.setLocalDescription();
  signalRemotePeer({ description: pc.localDescription });
});

Помимо обработки ошибок, всё!

Предоставление собственного предложения или ответа

В примере ниже показана реализация обработчика события negotiationneeded, которая явно создаёт предложение, а не позволяет setLocalDescription() сделать это.

async function handleNegotiationNeededEvent() {
  try {
    const offer = await pc.createOffer();
    pc.setLocalDescription(offer);
    signalRemotePeer({ description: pc.localDescription });
  } catch (err) {
    window.reportError(err);
  }
}

Он начинается с создания предложения с помощью вызова createOffer(); после успешного выполнения вызывается setLocalDescription(). Затем мы можем отправить созданное предложение другому узлу с помощью сервера сигнализации, что здесь выполняется с помощью функции под названием signalRemotePeer().

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

Спецификация
WebRTC: Реальные коммуникации в браузерах
# dom-peerconnection-setlocaldescription

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

Десктопные Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
setLocalDescription 24 15
22Firefox не поддерживает описания типа pranswer.
15 11 25
24Firefox не поддерживает описания типа pranswer.
14 11 1.5 4.4
description_parameter_optional 80 80 75 64 14.1 80 79 66 14.5 13.0 80
returns_promise 50 79 37 37 11 50 37 37 11 5.0 50

См. также

  • API WebRTC
  • RTCSessionDescription

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

Spec-Zone.ru

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