VideoEncoder: encode() method

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Note: This feature is available in Dedicated Web Workers.

The encode() method of the VideoEncoder interface asynchronously encodes a VideoFrame. Encoded data (EncodedVideoChunk) or an error will eventually be returned via the callbacks provided to the VideoEncoder constructor.

Syntax

js
encode(frame)
encode(frame, options)

Parameters

frame

A VideoFrame object.

options Optional

An object containing the following members:

keyFrame Optional

A boolean, defaulting to false giving the user agent flexibility to decide if this frame should be encoded as a key frame. If true this indicates that the given frame must be encoded as a key frame.

vp9 Optional

Encode options for the VP9 codec.

quantizer

Frame quantizer value 0 to 63. Only effective if VideoEncoder was configured with quantizer bitrate mode.

av1 Optional

Encode options for the AV1 codec.

quantizer

Frame quantizer value 0 to 63. Only effective if VideoEncoder was configured with quantizer bitrate mode.

avc Optional

Encode options for the AVC (H.264) codec.

quantizer

Frame quantizer value 0 to 51. Only effective if VideoEncoder was configured with quantizer bitrate mode.

Return value

None (undefined).

Exceptions

InvalidStateError DOMException

Thrown if the state is not "configured".

DataError DOMException

Thrown if the chunk cannot be decoded due to relying on other frames for decoding.

Examples

In the following example encode is passed a VideoFrame, and the options parameter indicating that this frame should be considered a keyframe.

js
encoder.encode(frame, { keyFrame: true });

Setting per-frame QP value for encoding individual frames.

js
const encoder = new VideoEncoder(init);
const encoderConfig = {
  codec: "vp09.00.10.08",
  width: 800,
  height: 600,
  bitrateMode: "quantizer",
  framerate: 30,
  latencyMode: "realtime",
};
encoder.configure(encoderConfig);

const encodeOptions = { keyFrame: false };
const qp = calculateQp(codec, frame);

if (codec.includes("vp09")) {
  encodeOptions.vp9 = { quantizer: qp };
} else if (codec.includes("av01")) {
  encodeOptions.av1 = { quantizer: qp };
} else if (codec.includes("avc")) {
  encodeOptions.avc = { quantizer: qp };
}

encoder.encode(frame, encodeOptions);

Specifications

Specification
WebCodecs
# dom-videoencoder-encode

Browser compatibility

BCD tables only load in the browser