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() с обратными вызовами могут возникнуть следующие исключения:
-
InvalidStateErrorDOMExceptionУстарело -
Выбрасывается, если состояние соединения
signalingStateравно"closed", что указывает на то, что соединение в настоящее время не открыто, поэтому переговорный процесс не может начаться. -
InvalidSessionDescriptionErrorDOMExceptionУстарело -
Выбрасывается, если параметр
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().
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
См. также
© 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