RTCEncodedVideoFrame

Hinweis: Diese Funktion ist in Dedicated Web Workers verfügbar.

Der 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.

Instanzeigenschaften

RTCEncodedVideoFrame.type Schreibgeschützt

Gibt zurück, ob der aktuelle Frame ein Keyframe, Deltaframe oder leerer Frame ist.

RTCEncodedVideoFrame.timestamp Schreibgeschützt Veraltet Nicht standardisiert

Gibt den Zeitpunkt zurück, zu dem die Abtastung des Frames begonnen hat.

RTCEncodedVideoFrame.data

Gibt einen Puffer zurück, der die kodierten Framedaten enthält.

Instanzmethoden

RTCEncodedVideoFrame.getMetadata()

Gibt die mit dem Frame verbundenen Metadaten zurück.

Beschreibung

Rohvideodaten werden als eine Folge von Frames erzeugt, wobei jeder Frame ein zweidimensionales Array von Pixelwerten ist. Videoencoder wandeln diesen Rohinput in eine komprimierte Darstellung des Originals zur Übertragung und Speicherung um. Ein gängiger Ansatz besteht darin, „Keyframes“ zu senden, die genügend Informationen enthalten, um ein vollständiges Bild bei relativ niedriger Rate zu reproduzieren, und zwischen den Keyframes viele viel kleinere „Deltaframes“ zu senden, die nur die Änderungen seit dem vorherigen Frame kodieren.

Es gibt viele verschiedene Codecs, wie z.B. H.264, VP8 und VP9, die jeweils unterschiedliche Kodierungsprozesse und Konfigurationen haben und verschiedene Kompromisse zwischen Komprimierungseffizienz und Videoqualität bieten.

Der RTCEncodedVideoFrame repräsentiert einen einzelnen Frame, der mit einem bestimmten Videoencoder kodiert wurde. Die type-Eigenschaft gibt an, ob der Frame ein „Key“ oder „Delta“ Frame ist, und Sie können die getMetadata()-Methode verwenden, um weitere Details über die Kodierungsmethode zu erhalten. Die data-Eigenschaft bietet Zugriff auf die kodierten Bilddaten des Frames, die dann beim Senden oder Empfangen modifiziert („transformiert“) werden können.

Beispiele

Dieser Codeausschnitt zeigt einen Handler für das rtctransform-Ereignis in einem Worker, der einen TransformStream implementiert und kodierte Frames durch diesen von event.transformer.readable zu event.transformer.writable leitet (event.transformer ist ein RTCRtpScriptTransformer, das arbeitende Gegenstück von RTCRtpScriptTransform).

Wenn der Transformer in einen Videostream eingefügt wird, wird die transform()-Methode mit einem RTCEncodedVideoFrame aufgerufen, sobald ein neuer Frame in event.transformer.readable eingereiht wird. Die transform()-Methode zeigt, wie dies gelesen, durch Invertieren der Bits modifiziert und dann auf den Controller eingereiht werden könnte (dies wird letztendlich durch bis zu event.transformer.writable geleitet und dann zurück in die WebRTC-Pipeline).

js
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);
});

Beachten Sie, dass vollständigere Beispiele in Using WebRTC Encoded Transforms bereitgestellt werden.

Spezifikationen

Specification
WebRTC Encoded Transform
# rtcencodedvideoframe

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
RTCEncodedVideoFrame
RTCEncodedVideoFrame() constructor
Experimental
data
getMetadata
timestamp
DeprecatedNon-standard
type

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
Non-standard. Check cross-browser support before using.
Deprecated. Not for use in new websites.

Siehe auch