Spec-Zone.ru › Web APIs

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).

Исключения

InvalidAccessError DOMException

Список codecs содержит один или несколько кодеков, которые не поддерживаются RTCRtpReceiver, связанным с трансивером.

InvalidModificationError DOMException

Список 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

См. также

  • setCodecPreferences теперь поддерживается во всех браузерах! на blog.mozilla.org (2024)
  • WebRTC API
  • Codecs используемые WebRTC
  • Вступление к протоколу RTP (Real-time Transport Protocol)
  • Веб-технологии для работы с медиа

© 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

Spec-Zone.ru

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