W3cubDocs

/Web APIs

VideoEncoder: encode() method

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

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

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet
encode 94 94 No No 80 16.4 94 94 No 66 16.4 17.0

© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/VideoEncoder/encode