Spec-Zone.ru › Web APIs

RTCRtpSender: метод getCapabilities() (статический)

Статический метод RTCRtpSender.getCapabilities() возвращает объект, описывающий поддерживаемые кодеки и расширения заголовков, которые поддерживаются объектом RTCRtpSender.

Аналогично, вы можете получить возможности объектов RTCRtpReceiver на устройстве, вызвав статическую функцию RTCRtpReceiver.getCapabilities().

Синтаксис

RTCRtpSender.getCapabilities(kind)

Параметры

kind

Строка, указывающая тип медиа, для которого запрашиваются возможности отправки браузера. Поддерживаемые типы медиа: audio и video.

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

Новый объект, указывающий, какие возможности у браузера для отправки указанного типа медиа через RTCPeerConnection. Если браузер не поддерживает указанный тип медиа kind, возвращаемое значение — null.

Возвращаемый объект имеет следующие свойства:

codecs

Массив объектов, каждый из которых описывает основные возможности одного кодека медиа, поддерживаемого объектом RTCRtpSender.

Примечание: Массив содержит специальные записи, представляющие основополагающие компоненты транспорта — их можно игнорировать, если вас интересуют только сами кодеки для медиа. Эти компоненты описаны ниже в разделе Массив codecs.

Каждый объект кодека имеет следующие свойства:

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

Положительное целое число, указывающее максимальное количество каналов, поддерживаемых кодеком; например, кодек, поддерживающий только монозвук, будет иметь значение 1; стереокодеки — 2 и т. д.

clockRate

Положительное целое число, определяющее частоту дискретизации кодека в Герцах (Гц). IANA поддерживает список кодеков и их параметров, включая частоту дискретизации.

mimeType

Строка, указывающая тип MIME медиа и подтип кодека. Строки MIME-типов, используемые RTP, отличаются от используемых в других местах. См. RFC 3555, раздел 4 для полного реестра IANA этих типов. Также см. Кодеки, используемые WebRTC для получения сведений о потенциальных кодеках, которые могут быть здесь упомянуты.

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

Строка, содержащая поле параметров формата из строки a=fmtp в SDP, соответствующую кодеку, если такая строка существует. Если поля параметров нет, это свойство опускается.

headerExtensions

Массив объектов, каждый из которых предоставляет URI расширения заголовка, поддерживаемого для текущего kind медиа. Каждый объект имеет следующее свойство:

uri

Строка, определяющая URI расширения заголовка. URI форматируется в соответствии с описаниями в RFC 5285.

Описание

В качестве статической функции она всегда вызывается в форме:

capabilities = RTCRtpSender.getCapabilities("audio");

Возвращаемый набор возможностей — это максимально оптимистичный возможный список. Вполне возможно, что некоторые комбинации параметров могут не сработать при их фактическом использовании.

Вызов RTCRtpSender.getCapabilities() никоим образом не подготавливает браузер к обработке медиа. Ничего не загружается, не извлекается и не подготавливается. Это способ определить, что может быть использовано, прежде чем начать пытаться получить доступ к медиа.

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

Массив codecs

Массив codecs — это массив объектов, описывающих отдельный кодек и его основные возможности. Браузер будет сообщать только о различных комбинациях возможностей отдельно. Если две комбинации возможностей могут быть описаны как одна, они будут. Это означает, что, например, если есть две записи для кодека H.264 (как определяется mimeType как "video/H264"), другие значения в объектах возможностей указывают, чем они отличаются.

Существует три специальные записи, которые всегда должны быть присутствовать, представляющие основополагающие компоненты транспорта. Эти компоненты:

RED (REDundant Audio Data)

Тип медиа записи RED может изменяться из-за наличия нескольких его версий, но он всегда заканчивается на red, например, video/red или video/fwdred.

Базовый стандарт RED можно найти в RFC 2198. Может быть несколько записей для RED, если поддерживаются разные формы; в этом случае каждая будет иметь уникальный тип медиа.

FEC (Forward Error Correction)

Компонент FEC обрабатывает данные исправления ошибок; его тип медиа также может изменяться из-за наличия усовершенствованных версий стандарта, но всегда будет заканчиваться на fec.

Одно из возможных значений — video/ulpfec (общая модель исправления ошибок). Также может быть несколько записей FEC, если поддерживается более одной формы.

RTX (Retransmission)

Этот компонент отвечает за повторную передачу данных; его тип медиа должен быть video/rtx.

Будет только одна запись для RTX, и она не будет иметь свойства sdpFmtpLine.

Эти записи следует игнорировать, если интересны только кодеки, относящиеся к медиа.

Примеры

Поддержка функций

Вы можете использовать Object.hasOwn() для проверки поддержки RTCRtpSender.getCapabilities():

log.textContent = `RTCRtpSender.getCapabilities() supported: ${Object.hasOwn(
  RTCRtpSender,
  "getCapabilities",
)}`;

Проверка поддержки конкретного кодека

Функция ниже возвращает true или false, указывающие, поддерживает ли устройство отправку видео H.264 по RTCRtpSender.

Примечание: Поскольку RTCRtpSender.getCapabilities() фактически только указывает на вероятную поддержку. Поэтому ниже поддержка H.264 может всё ещё не сработать, даже после получения положительного ответа от этой функции.

function canSendH264() {
  let capabilities = RTCRtpSender.getCapabilities("video");

  capabilities.codecs.forEach((codec) => {
    if (codec.mimeType === "video/H264") {
      return true;
    }
  });
  return false;
}

Получение всех возможностей

Этот пример кода демонстрирует, как получить все поддерживаемые кодеки и заголовки. HTML определяет список выбора для двух типов возможностей и область регистрации.

<select id="kind">
  <option value="audio">audio</option>
  <option value="video">video</option>
</select>
<textarea rows="40" cols="100" id="log"></textarea>

JavaScript определяет функцию регистрации возможностей для определённого "типа". Она вызывается изначально со значением audio. Обработчик событий обновляет значение при изменении списка выбора kind.

const log = document.querySelector("#log");
const kindSelector = document.querySelector("#kind");

logMediaCapabilities("audio");

kindSelector.addEventListener("click", () => {
  log.textContent = "";
  logMediaCapabilities(kindSelector.value);
});

function logMediaCapabilities(kind) {
  const capabilities = RTCRtpSender.getCapabilities(`${kind}`);
  log.textContent += "Headers\n";
  capabilities.headerExtensions.forEach((header) => {
    log.textContent += ` uri: ${header.uri}\n`;
  });

  log.textContent += "\nCodecs\n";
  capabilities.codecs.forEach((codec) => {
    log.textContent += ` mime type: ${codec.mimeType}\n`;
    log.textContent += `   channels: ${codec.channels}\n`; // max channels - e.g. 2 is stereo
    log.textContent += `   clockRate: ${codec.clockRate}\n`; // clock rate in Hz
    log.textContent += `   sdpFmtpLine: ${codec.sdpFmtpLine}\n`; // mime media type and subtype
  });
}

Результат

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

Спецификация
WebRTC: Взаимодействие в режиме реального времени в браузерах
# dom-rtcrtpsender-getcapabilities

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

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
getCapabilities_static 69 13 113 56 12.1 69 113 48 12.2 10.0 69

© 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/RTCRtpSender/getCapabilities_static

Spec-Zone.ru

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