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медиа. Каждый объект имеет следующее свойство:
Описание
Как статическая функция, она всегда вызывается в формате:
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
});
}
Результат
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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