VideoEncoder: encode() 方法

有限可用性

此功能不是基本功能,因为它在一些最常用的浏览器中无法使用。

安全上下文: 此功能仅在安全上下文 (HTTPS) 中可用,在某些或所有支持的浏览器 中可用。

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

encode() 方法是 VideoEncoder 接口的异步方法,用于编码 VideoFrame。编码数据 (EncodedVideoChunk) 或错误最终将通过提供给 VideoEncoder 构造函数的回调函数返回。

语法

js
encode(frame)
encode(frame, options)

参数

frame

一个 VideoFrame 对象。

options 可选

一个包含以下成员的对象

keyFrame 可选

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

vp9 可选

针对 VP9 编解码器的编码选项。

quantizer

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

av1 可选

针对 AV1 编解码器的编码选项。

quantizer

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

avc 可选

针对 AVC (H.264) 编解码器的编码选项。

quantizer

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

返回值

无 (undefined).

异常

InvalidStateError DOMException

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

DataError DOMException

如果 chunk 由于依赖于其他帧进行解码而无法解码,则抛出此异常。

示例

在以下示例中,encode 传递了一个 VideoFrame,以及指示此帧应被视为关键帧的 options 参数。

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 };
}

encoder.encode(frame, encodeOptions);

规范

规范
WebCodecs
# dom-videoencoder-encode

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。