Spec-Zone.ru › Web APIs

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

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

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

Синтаксис

RTCRtpReceiver.getCapabilities(kind)

Параметры

kind

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

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

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

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

codecs

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

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

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

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 = RTCRtpReceiver.getCapabilities("audio");

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

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

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

Массив кодеков

Массив 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() для проверки, поддерживается ли RTCRtpReceiver.getCapabilities():

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

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

Нижеприведённая функция возвращает булево значение, указывающее, поддерживает ли устройство приём видео H.264 по подключению WebRTC.

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

function canReceiveH264() {
  let capabilities = RTCRtpReceiver.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) {
  if (!Object.hasOwn(RTCRtpReceiver, "getCapabilities")) {
    log.textContent = "RTCRtpReceiver.getCapabilities() not supported";
    return;
  }
  const capabilities = RTCRtpReceiver.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-rtcrtpreceiver-getcapabilities

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

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
getCapabilities_static 59 12 113 46 12.1 59 113 43 12.2 7.0 59

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

Spec-Zone.ru

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