VideoEncoder: encode() method
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 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
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 };
}
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 |