VideoEncoder: encode() 方法
注意: 此功能在专用 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 的浏览器中加载。