RTCRtpTransceiver: метод setCodecPreferences()
Метод setCodecPreferences() интерфейса RTCRtpTransceiver используется для установки кодеков, которые трансивер разрешает для декодирования получаемых данных, в порядке убывания приоритета.
Настройки приоритета, установленные с помощью этого метода, влияют на то, какие кодеки будут согласованы с удалённым узлом для кодирования данных, которые он отправляет, включая кодеки, используемые для повторной передачи, избыточности и коррекции ошибок вперёд. Кодеки, которые не включены в список настроек, не будут участвовать в согласовании. Обратите внимание, что настройки, используемые этим трансивером для отправки контента, зависят от настроек удалённого узла.
Рекомендуемый способ установки настроек приоритета кодеков — сначала получить массив кодеков, которые фактически поддерживаются для декодирования полученных данных, а затем переупорядочить их в порядке убывания приоритета. Это гарантирует, что массив отсортирован в требуемом порядке, не содержит неподдерживаемых кодеков, а также содержит кодеки, необходимые для повторной передачи, избыточности и коррекции ошибок вперёд.
Указанный набор кодеков будет использоваться для всех будущих подключений, которые включают этот трансивер, до тех пор, пока этот метод не будет вызван снова.
При подготовке к открытию RTCPeerConnection кодеки должны быть установлены с помощью setCodecParameters() до вызова RTCPeerConnection.createOffer() или createAnswer(), так как эти действия инициируют согласование (и будут использовать параметры кодеков из стандартной конфигурации агента пользователя по умолчанию).
Кодеки можно изменить в процессе текущего обмена, но для этого необходимо сначала вызвать setCodecParameters() и затем инициировать новое согласование. Приложение WebRTC уже содержит код для этого в обработчике события negotiationneeded. Однако на момент написания этого документа событие не срабатывает автоматически при вызове setCodecParameters(), поэтому вам потребуется вызвать onnegotiationneeded самостоятельно.
Руководство по кодекам, поддерживаемым WebRTC, и их характеристикам, можно найти в Codecs used by WebRTC.
Синтаксис
setCodecPreferences(codecs)
Параметры
codecs-
Массив объектов, каждый из которых предоставляет параметры для одного из поддерживаемых трансивером медиа кодеков, отсортированных по приоритету. Если
codecsпуст, конфигурации кодеков возвращаются к значениям по умолчанию агента пользователя.Примечание: Любые кодеки, не включённые в
codecs, не будут учитываться при согласовании подключения. Это позволяет вам предотвратить использование кодеков, которые вы не хотите использовать.Каждый объект кодека в массиве имеет следующие свойства:
channelsНеобязательно-
Положительное целое число, указывающее количество каналов, поддерживаемых кодеком. Например, для аудиокодеков значение 1 указывает монофоническое звучание, а 2 — стерео.
clockRate-
Положительное целое число, указывающее частоту кадров кодека в Герцах (Гц). Частота кадров — это скорость, с которой увеличивается временной отметка RTP кодека. Большинство кодеков имеют конкретные значения или диапазоны допустимых значений. IANA поддерживает список кодеков и их параметров, включая частоту кадров.
mimeType-
Строка, указывающая MIME-тип медиа кодека, заданная в виде
"type/subtype". MIME-типы, используемые RTP, отличаются от используемых в других местах. IANA поддерживает реестр допустимых MIME-типов. Также см. Codecs used by WebRTC для получения подробной информации о потенциальных кодеках, которые могут здесь упоминаться. sdpFmtpLineНеобязательно-
Строка, содержащая поле параметров формата из строки
a=fmtpв SDP, которая соответствует кодеку, если поле присутствует. Если поля параметров нет, это свойство опускается.
Возвращаемое значение
Ничего (undefined).
Исключения
-
InvalidAccessErrorDOMException -
Список
codecsсодержит один или несколько кодеков, которые не поддерживаютсяRTCRtpReceiver, связанным с трансивером. -
InvalidModificationErrorDOMException -
Список
codecsсодержит только записи для RTX, RED, FEC или Comfort Noise, или является пустым множеством. Кодеки должны всегда содержать кодек для медиа.
Примеры
Создание массива предпочитаемых кодеков
Рекомендуемый способ установки настроек приоритета кодеков — сначала получить массив кодеков, которые фактически поддерживаются для декодирования полученных данных, а затем переупорядочить список в порядке убывания приоритета.
Важно начинать с списка поддерживаемых кодеков (а не с жёстко закодированного списка ваших предпочитаемых кодеков), потому что если вы включите в него кодеки, которые не поддерживаются связанным RTCRtpReceiver, браузер выдаст исключение InvalidAccessError при вызове метода setCodecPreferences(). Кроме того, массив должен включать соответствующие кодеки для повторной передачи, избыточности и коррекции ошибок вперёд. Начало с списка поддерживаемых кодеков гарантирует, что они присутствуют.
Вы можете получить кодеки, поддерживаемые для декодирования данных, используя статический метод RTCRtpReceiver.getCapabilities(), как показано:
const availReceiveCodecs = transceiver.receiver.getCapabilities("video").codecs;
Для переупорядочивания массива кодеков в наш предпочтительный порядок можно использовать функцию сортировки ниже, которая сортирует по MIME-типу (это взято из setCodecPreferences is now in all browsers! на blog.mozilla.org (2024)).
function sortByMimeTypes(codecs, preferredOrder) {
return codecs.sort((a, b) => {
const indexA = preferredOrder.indexOf(a.mimeType);
const indexB = preferredOrder.indexOf(b.mimeType);
const orderA = indexA >= 0 ? indexA : Number.MAX_VALUE;
const orderB = indexB >= 0 ? indexB : Number.MAX_VALUE;
return orderA - orderB;
});
}
Метод принимает список поддерживаемых кодеков и массив предпочтительных MIME-типов в порядке убывания приоритета и возвращает отсортированный массив на месте. Приведённый ниже код демонстрирует использование, предполагая, что вы уже настроили соединение с узлом (peerConnection):
// Get supported codecs the sort using preferred codecs
const supportedCodecs = RTCRtpReceiver.getCapabilities("video").codecs;
const preferredCodecs = ["video/H264", "video/VP8", "video/VP9"];
const sortedCodecs = sortByMimeTypes(supportedCodecs, preferredCodecs);
// Get transceiver for connection and set the preferences
const [transceiver] = peerConnection.getTransceivers();
transceiver.setCodecPreferences(sortedCodecs); // <---
Спецификации
| Спецификация |
|---|
| WebRTC: Реальное время коммуникации в браузерах # dom-rtcrtptransceiver-setcodecpreferences |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
setCodecPreferences |
76 | 79 | 128 | 63 | 13.1 | 76 | 128 | 54 | 13.4 | 12.0 | 76 |
См. также
© 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/RTCRtpTransceiver/setCodecPreferences