RTCEncodedVideoFrame

Hinweis: Dieses Feature ist verfügbar in Dedicated Web Workers.

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 Nur lesbar

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

RTCEncodedVideoFrame.timestamp Nur lesbar 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

BCD tables only load in the browser

Siehe auch