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.
encode(frame) encode(frame, options)
frameA VideoFrame object.
options OptionalAn object containing the following members:
keyFrame OptionalA 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 OptionalEncode options for the VP9 codec.
quantizerFrame quantizer value 0 to 63. Only effective if VideoEncoder was configured with quantizer bitrate mode.
av1 OptionalEncode options for the AV1 codec.
quantizerFrame quantizer value 0 to 63. Only effective if VideoEncoder was configured with quantizer bitrate mode.
avc OptionalEncode options for the AVC (H.264) codec.
quantizerFrame quantizer value 0 to 51. Only effective if VideoEncoder was configured with quantizer bitrate mode.
hevc OptionalEncode options for the HEVC (H.265) codec.
quantizerFrame quantizer value 0 to 51. Only effective if VideoEncoder was configured with quantizer bitrate mode.
None (undefined).
InvalidStateError DOMException
Thrown if the state is not "configured".
DataError DOMException
Thrown if the given frame object's rotation and flip do not match the rotation and flip of the first VideoFrame passed to encode() (the "active orientation").
In the following example encode is passed a VideoFrame, and the options parameter indicating that this frame should be considered a keyframe.
encoder.encode(frame, { keyFrame: true });
Setting per-frame QP value for encoding individual frames.
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 };
} else if (codec.includes("hvc1") || codec.includes("hev1")) {
encodeOptions.hevc = { quantizer: qp };
}
encoder.encode(frame, encodeOptions);
| Specification |
|---|
| WebCodecs> # dom-videoencoder-encode> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
encode |
94 | 94 | 130 | 80 | 16.4 | 94 | No | 66 | 16.4 | 17.0 | 94 | 16.4 |
© 2005–2025 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