VideoFrame: copyTo() 方法

Baseline 2024
新推出

自 2024 年 9 月起,此功能已可在最新设备和浏览器版本上使用。此功能可能无法在旧设备或浏览器上使用。

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

VideoFrame 接口的 copyTo() 方法会将 VideoFrame 的内容复制到一个 ArrayBuffer 中。

语法

js
copyTo(destination)
copyTo(destination, options)

参数

destination

用于复制到的 ArrayBufferTypedArrayDataView

options 可选

一个包含以下内容的 *)

rect 可选

要从 VideoFrame 中复制的像素矩形。如果未指定,将使用 visibleRect。其格式为一个字典对象,包含:

  • x:x 坐标。
  • y:y 坐标。
  • width:帧的宽度。
  • height:帧的高度。
layout 可选

一个列表,包含 VideoFrame 中每个平面的以下值:

offset

一个整数,表示给定平面开始的偏移量(以字节为单位)。

stride(步幅)

一个整数,表示平面中每一行使用的字节数(包括填充)。平面可能不会重叠。如果未指定 layout,则平面将紧密打包。

format 可选

destination 中像素数据的像素格式。可以设置为 "RGBA""RGBX""BGRA""BGRX"。如果未指定,将使用 format

colorSpace 可选

指定 destination 中像素数据的颜色空间。可以设置为 sRGB 颜色空间"srgb"display-p3 颜色空间"display-p3"。仅适用于 RGB 像素格式。如果未指定,将使用 "srgb"

返回值

一个 Promise,当复制完成后,该 Promise 会解析为复制的布局。

示例

以下示例复制了 videoFrame 的全部内容。

js
let buffer = new Uint8Array(videoFrame.allocationSize());
let layout = await videoFrame.copyTo(buffer);

以下示例将 videoFrame 的一部分转换为 RGB 格式。

js
const videoRect = {
  x: 100,
  y: 100,
  width: 80,
  height: 60,
};
const options = {
  rect: videoRect,
  format: "RGBX",
  colorSpace: "display-p3",
};
const size = videoFrame.allocationSize(options);
const buffer = new ArrayBuffer(size);
const layout = await videoFrame.copyTo(buffer, options);

规范

规范
WebCodecs
# dom-videoframe-copyto

浏览器兼容性