媒体流图像捕获 API

实验性: 这是一个 实验性技术
在生产环境中使用此技术之前,请仔细查看 浏览器兼容性表

媒体流图像捕获 API 是一个用于从照相机设备捕获图像或视频的 API。除了捕获数据外,它还允许您检索有关设备功能的信息,例如图像大小、红眼消除以及是否有闪光灯以及它们当前的设置。相反,API 允许在设备允许的限制内配置这些功能。

媒体流图像捕获的概念和用法

检索图像或视频流的过程如下所述。示例代码改编自 Chrome 的图像捕获示例

首先,通过调用 MediaDevices.getUserMedia() 获取对设备的引用。下面的示例表示获取任何可用的视频设备,尽管 getUserMedia() 方法允许请求更具体的功能。此方法返回一个 Promise 对象,它会解析为一个 MediaStream 对象。

js
navigator.mediaDevices.getUserMedia({ video: true }).then((mediaStream) => {
  // Do something with the stream.
});

接下来,隔离媒体流的视觉部分。通过调用 MediaStream.getVideoTracks() 来实现。这将返回一个 MediaStreamTrack 对象数组。下面的代码假设 MediaStreamTrack 数组中的第一个项目是我们要使用的项目。您可以使用 MediaStreamTrack 对象的属性来选择您需要的项目。

js
const track = mediaStream.getVideoTracks()[0];

在这一点上,您可能希望在捕获图像之前配置设备功能。您可以在执行任何其他操作之前,通过在轨道对象上调用 applyConstraints() 来完成此操作。

js
let zoom = document.querySelector("#zoom");
const capabilities = track.getCapabilities();
// Check whether zoom is supported or not.
if (!capabilities.zoom) {
  return;
}
track.applyConstraints({ advanced: [{ zoom: zoom.value }] });

最后,将 MediaStreamTrack 对象传递给 ImageCapture() 构造函数。尽管 MediaStream 包含多种类型的轨道,并提供多种方法来检索它们,但如果 MediaStreamTrack.kind 不是 "video",则 ImageCapture 构造函数将抛出一个类型为 NotSupportedErrorDOMException

js
let imageCapture = new ImageCapture(track);

接口

ImageCapture 实验性

用于从通过有效的 MediaStreamTrack 引用的照相机设备捕获图像的接口。

规范

规范
媒体流图像捕获
# imagecaptureapi

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅