RTCEncodedVideoFrame
Примечание: Эта функция доступна в посвящённых веб-воркерах.
Объект RTCEncodedVideoFrame из API WebRTC представляет закодированную видеокадр в потоке приёмника или отправителя WebRTC, который можно изменить с помощью преобразования закодированного видео WebRTC.
Свойства экземпляра
-
RTCEncodedVideoFrame.typeТолько для чтения -
Возвращает, является ли текущий кадр ключевым кадром, кадром дельты или пустым кадром.
-
RTCEncodedVideoFrame.timestampТолько для чтения Устарело Нестандартный -
Возвращает отметку времени, в который началась выборка кадра.
RTCEncodedVideoFrame.data-
Возвращает буфер, содержащий закодированные данные кадра.
Методы экземпляра
RTCEncodedVideoFrame.getMetadata()-
Возвращает метаданные, связанные с кадром.
Описание
Необработанные данные видео генерируются как последовательность кадров, где каждый кадр представляет собой двумерный массив значений пикселей. Кодеки видео преобразуют этот необработанный вход в сжатое представление оригинала для передачи и хранения. Общим подходом является отправка «ключевых кадров», содержащих достаточно информации для воспроизведения всего изображения с относительно низкой скоростью, а между ключевыми кадрами отправлять множество гораздо меньших «кадров дельты», которые просто кодируют изменения с момента предыдущего кадра.
Существует множество различных кодеков, таких как H.264, VP8 и VP9, каждый из которых имеет разные процессы и конфигурации кодирования, предлагая различные компромиссы между эффективностью сжатия и качеством видео.
Объект RTCEncodedVideoFrame представляет собой отдельный кадр, закодированный с помощью определенного кодека видео. Свойство type указывает, является ли кадр «ключевым» или «кадром дельты», и вы можете использовать метод getMetadata(), чтобы получить другие детали о методе кодирования. Свойство data предоставляет доступ к закодированным данным изображения для кадра, которые затем могут быть изменены («преобразованы») при отправке или приёме кадров.
Примеры
Этот фрагмент кода демонстрирует обработчик события rtctransform в Worker, который реализует TransformStream и передает закодированные кадры через него из event.transformer.readable в event.transformer.writable (event.transformer — RTCRtpScriptTransformer, сторонняя часть RTCRtpScriptTransform).
Если преобразователь вставлен в поток видео, метод transform() вызывается с RTCEncodedVideoFrame всякий раз, когда новый кадр помещается в очередь на event.transformer.readable. Метод transform() показывает, как это можно прочитать, изменить, инвертировав биты, и поместить в очередь на контроллер (это в конечном итоге передаёт его через event.transformer.writable, а затем обратно в поток WebRTC).
addEventListener("rtctransform", (event) => {
const async transform = new TransformStream({
async transform(encodedFrame, controller) {
// Reconstruct the original frame.
const view = new DataView(encodedFrame.data);
// Construct a new buffer
const newData = new ArrayBuffer(encodedFrame.data.byteLength);
const newView = new DataView(newData);
// Negate all bits in the incoming frame
for (let i = 0; i < encodedFrame.data.byteLength; ++i) {
newView.setInt8(i, ~view.getInt8(i));
}
encodedFrame.data = newData;
controller.enqueue(encodedFrame);
},
});
event.transformer.readable
.pipeThrough(transform)
.pipeTo(event.transformer.writable);
});
Обратите внимание, что более полные примеры приведены в Использовании преобразований закодированного видео WebRTC.
Спецификации
| Спецификация |
|---|
| WebRTC Encoded Transform # rtcencodedvideoframe |
Совместимость с браузерами
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
RTCEncodedVideoFrame |
127 | 127 | Нет | 113 | Нет | 127 | Нет | 84 | Нет | Нет | 127 |
RTCEncodedVideoFrame |
86 | 86 | 117 | 72 | 15.4 | 86 | 117 | 61 | 15.4 | 14.0 | 86 |
data |
86 | 86 | 117 | 72 | 15.4 | 86 | 117 | 61 | 15.4 | 14.0 | 86 |
getMetadata |
86 | 86 | 117 | 72 | 15.4 | 86 | 117 | 61 | 15.4 | 14.0 | 86 |
timestamp |
86 | 86 | 117 | 72 | 15.4 | 86 | 117 | 61 | 15.4 | 14.0 | 86 |
type |
86 | 86 | 117 | 72 | 15.4 | 86 | 117 | 61 | 15.4 | 14.0 | 86 |
См. также
© 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/RTCEncodedVideoFrame