RTCEncodedVideoFrame
Hinweis: Diese Funktion ist in Dedicated Web Workers verfügbar.
Das RTCEncodedVideoFrame
der WebRTC API repräsentiert einen kodierten Videoframe in der WebRTC-Empfänger- oder Senderpipeline, der mithilfe eines WebRTC Encoded Transform modifiziert werden kann.
Instanz-Eigenschaften
RTCEncodedVideoFrame.type
Schreibgeschützt-
Gibt zurück, ob der aktuelle Frame ein Schlüsselbild, Delta-Frame oder ein leerer Frame ist.
RTCEncodedVideoFrame.timestamp
Schreibgeschützt Veraltet Nicht standardisiert-
Gibt den Zeitstempel zurück, zu dem die Abtastung des Frames begann.
RTCEncodedVideoFrame.data
-
Liefert einen Puffer, der die kodierten Frame-Daten enthält.
Instanz-Methoden
RTCEncodedVideoFrame.getMetadata()
-
Gibt die zum Frame zugehörigen Metadaten zurück.
Beschreibung
Rohvideodaten werden als Sequenz von Frames generiert, wobei jeder Frame ein zweidimensionales Array von Pixelwerten ist. Videokodierer wandeln diese Rohdaten in eine komprimierte Darstellung des Originals um, um sie zu übertragen und zu speichern. Ein übliches Vorgehen ist, "Schlüsselbilder" zu senden, die genügend Informationen enthalten, um ein ganzes Bild in relativ niedriger Rate zu reproduzieren, und zwischen den Schlüsselbildern viele wesentlich kleinere "Delta-Frames" zu senden, die nur die Änderungen seit dem vorherigen Frame kodieren.
Es gibt viele verschiedene Codecs, wie H.264, VP8 und VP9, die alle unterschiedliche Kodierungsprozesse und Konfigurationen haben und verschiedene Kompromisse zwischen Kompressions-Effizienz und Videoqualität bieten.
Das RTCEncodedVideoFrame
stellt einen einzelnen Frame dar, der mit einem bestimmten Videokodierer kodiert wurde.
Die type
-Eigenschaft gibt an, ob der Frame ein "Schlüssel" oder "Delta"-Frame ist, und Sie können die getMetadata()
-Methode verwenden, um weitere Details zur Kodierungsmethode zu erhalten.
Die data
-Eigenschaft bietet Zugriff auf die kodierten Bilddaten für den Frame, die dann modifiziert ("transformiert") werden können, wenn Frames gesendet oder empfangen werden.
Beispiele
Dieses Code-Snippet zeigt einen Handler für das rtctransform
-Ereignis in einem Worker
, der einen TransformStream
implementiert und kodierte Frames davon vom event.transformer.readable
zu event.transformer.writable
weiterleitet (event.transformer
ist ein RTCRtpScriptTransformer
, das Pendant auf der Worker-Seite von RTCRtpScriptTransform
).
Wenn der Transformator in einen Videostream eingefügt wird, wird die transform()
-Methode mit einem RTCEncodedVideoFrame
aufgerufen, wann immer ein neuer Frame in die event.transformer.readable
eingereiht wird.
Die transform()
-Methode zeigt, wie dieser gelesen, durch Invertierung der Bits modifiziert und dann auf dem Controller eingereiht werden könnte (dies leitet ihn letztlich durch zur event.transformer.writable
, und dann zurück in die WebRTC-Pipeline).
addEventListener("rtctransform", (event) => {
const 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);
});
Beachten Sie, dass ausführlichere Beispiele in Using WebRTC Encoded Transforms bereitgestellt werden.
Spezifikationen
Specification |
---|
WebRTC Encoded Transform # rtcencodedvideoframe |