VideoFrame: copyTo() 方法

有限可用性

此功能不是基线功能,因为它在一些最常用的浏览器中不起作用。

注意: 此功能在 专用 Web 工作者 中可用。

copyTo()VideoFrame 接口的方法,它将 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,当复制完成时解析为复制布局。

示例

以下示例复制 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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。