VideoEncoder: encode() 方法
注意:此功能在 专用 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)。
异常
InvalidStateErrorDOMException-
如果
state不是"configured",则抛出此异常。 DataErrorDOMException-
如果给定的
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 |
浏览器兼容性
加载中…