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
encode(frame)
encode(frame, options)
Parameters
frame-
A
VideoFrameobject. optionsOptional-
An object containing the following members:
keyFrameOptional-
A
boolean, defaulting tofalsegiving the user agent flexibility to decide if this frame should be encoded as a key frame. Iftruethis indicates that the given frame must be encoded as a key frame. vp9Optional-
Encode options for the VP9 codec.
quantizer-
Frame quantizer value 0 to 63. Only effective if
VideoEncoderwas configured withquantizerbitrate mode.
av1Optional-
Encode options for the AV1 codec.
quantizer-
Frame quantizer value 0 to 63. Only effective if
VideoEncoderwas configured withquantizerbitrate mode.
avcOptional-
Encode options for the AVC (H.264) codec.
quantizer-
Frame quantizer value 0 to 51. Only effective if
VideoEncoderwas configured withquantizerbitrate mode.
Return value
None (undefined).
Exceptions
InvalidStateErrorDOMException-
Thrown if the
stateis not"configured". DataErrorDOMException-
Thrown if the
chunkcannot 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.
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 };
}
encoder.encode(frame, encodeOptions);
Specifications
| Specification |
|---|
| WebCodecs # dom-videoencoder-encode |
Browser compatibility
BCD tables only load in the browser