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

瀏覽器相容性