Firefox Tomorrow

web api instance method

VideoEncoder: encode() method

View on MDN ↗

Secure contextAvailable in 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
  • 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.
      • hevc Optional
        • : Encode options for the HEVC (H.265) 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 given frame object’s rotation and flip do not match the rotation and flip of the first VideoFrame passed to encode() (the “active orientation”).

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

SpecificationsStandards references are available on the canonical MDN page.

Browser compatibility

Browser compatibilityCompatibility data is available on the canonical MDN page.