docs.rodeo

MDN Web Docs mirror

VideoFrame

{{APIRef("Web Codecs API")}} {{AvailableInWorkers("window_and_dedicated")}} 

The VideoFrame interface of the Web Codecs API represents a frame of a video.

VideoFrame is a transferable object.

Description

A VideoFrame object can be created or accessed in a number of ways. The {{domxref("MediaStreamTrackProcessor")}}  breaks a media track into individual VideoFrame objects.

A VideoFrame is an image source and has a constructor that accepts any other canvas source ( an {{domxref("SVGImageElement")}} , an {{domxref("HTMLVideoElement")}} , an {{domxref("HTMLCanvasElement")}} , an {{domxref("ImageBitmap")}} , an {{domxref("OffscreenCanvas")}} , or another VideoFrame). This means that a frame can be created from an image or video element.

A second constructor enables the creation of a VideoFrame from its binary pixel representation in an {{jsxref("ArrayBuffer")}} , a {{jsxref("TypedArray")}} , or a {{jsxref("DataView")}} .

Created frames may then turned into a media track, for example with the {{domxref("MediaStreamTrackGenerator")}}  interface that creates a media track from a stream of frames.

Constructor

Instance properties

Instance methods

Examples

In the following example frames are returned from a {{domxref("MediaStreamTrackProcessor")}} , then encoded. See the full example and read more about it in the article Video processing with WebCodecs.

let frame_counter = 0;

const track = stream.getVideoTracks()[0];
const media_processor = new MediaStreamTrackProcessor(track);

const reader = media_processor.readable.getReader();
while (true) {
  const result = await reader.read();
  if (result.done) break;

  let frame = result.value;
  if (encoder.encodeQueueSize > 2) {
    // Too many frames in flight, encoder is overwhelmed
    // let's drop this frame.
    frame.close();
  } else {
    frame_counter++;
    const insert_keyframe = frame_counter % 150 === 0;
    encoder.encode(frame, { keyFrame: insert_keyframe });
    frame.close();
  }
}

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

See also

In this article

View on MDN