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 |
瀏覽器相容性
載入中…