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
VideoFrame
object. options
Optional-
An object containing the following members:
keyFrame
Optional-
A
boolean
, defaulting tofalse
giving the user agent flexibility to decide if this frame should be encoded as a key frame. Iftrue
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 withquantizer
bitrate mode.
av1
Optional-
Encode options for the AV1 codec.
quantizer
-
Frame quantizer value 0 to 63. Only effective if
VideoEncoder
was configured withquantizer
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 withquantizer
bitrate mode.
hevc
Optional-
Encode options for the HEVC (H.265) codec.
quantizer
-
Frame quantizer value 0 to 51. Only effective if
VideoEncoder
was configured withquantizer
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.
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);
Specifications
Specification |
---|
WebCodecs # dom-videoencoder-encode |
Browser compatibility
BCD tables only load in the browser