VideoEncoder: encode() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 专用 Web Workers 中可用。

VideoEncoder 接口的 encode() 方法会异步编码一个 VideoFrame。编码后的数据(EncodedVideoChunk)或错误最终会通过提供给 VideoEncoder 构造函数的 回调 返回。

语法

js
encode(frame)
encode(frame, options)

参数

frame

一个 VideoFrame 对象。

options 可选

包含以下成员的对象

keyFrame 可选

一个 boolean 值,默认为 false,允许用户代理灵活地决定此帧是否应编码为关键帧。如果为 true,则表示给定帧必须编码为关键帧。

vp9 可选

用于 VP9 编解码器的编码选项。

量化器

帧量化器值,范围从 0 到 63。仅当 VideoEncoder 使用 quantizer 比特率模式配置时才有效。

av1 可选

用于 AV1 编解码器的编码选项。

量化器

帧量化器值,范围从 0 到 63。仅当 VideoEncoder 使用 quantizer 比特率模式配置时才有效。

avc 可选

用于 AVC (H.264) 编解码器的编码选项。

量化器

帧量化器值,范围从 0 到 51。仅当 VideoEncoder 使用 quantizer 比特率模式配置时才有效。

hevc 可选

用于 HEVC (H.265) 编解码器的编码选项。

量化器

帧量化器值,范围从 0 到 51。仅当 VideoEncoder 使用 quantizer 比特率模式配置时才有效。

返回值

无(undefined)。

异常

InvalidStateError DOMException

如果 state 不是 "configured",则抛出此异常。

DataError DOMException

如果给定的 frame 对象的旋转和翻转与传递给 encode() 的第一个 VideoFrame(“活动方向”)的旋转和翻转不匹配,则抛出此异常。

示例

在以下示例中,encode 接收一个 VideoFrame,并传入一个选项参数,表明此帧应被视为关键帧。

js
encoder.encode(frame, { keyFrame: true });

为编码单个帧设置每帧 QP 值。

js
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);

规范

规范
WebCodecs
# dom-videoencoder-encode

浏览器兼容性