MediaStream Image Capture API - 用于从摄影设备捕获图像或视频的 API

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

MediaStream Image Capture API 是一个用于从摄影设备捕获图像或视频的 API。除了捕获数据,它还允许您检索有关设备功能的信息,例如图像大小、防红眼以及是否有闪光灯以及它们当前的设置。相反,API 允许在设备允许的范围内配置功能。

图像捕获概念和用法

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

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

navigator.mediaDevices.getUserMedia({ video: true })
  .then(mediaStream => {
    // 对流做一些事情。
  })

接下来,获取媒体流的可视部分。通过调用 MediaStream.getVideoTracks() 来执行此操作。这将返回一个 MediaStreamTrack 对象数组。下面的代码假设 MediaStreamTrack 数组中的第一项是要使用的项。您可以使用 MediaStreamTrack 对象的属性来选择您需要的对象。

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

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

let zoom = document.querySelector('#zoom');
const capabilities = track.getCapabilities();
// 检查是否支持缩放。
if(!capabilities.zoom) {
  return;
}
track.applyConstraints({ advanced : [{ zoom: zoom.value }] });

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

let imageCapture = new ImageCapture(track);

接口

ImageCapture

用于从通过有效 MediaStreamTrack 引用的摄影设备捕获图像的接口。

PhotoCapabilities

为连接的摄影设备提供可用的配置选项。通过调用 ImageCapture.getPhotoCapabilities() 检索 PhotoCapabilities 对象。

规范

规范 状态 备注
MediaStream Image Capture 工作草案 初始定义。

浏览器兼容性

ImageCapture

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持59≤79 未知 不支持46 未知
ImageCapture() 构造函数59≤79 未知 不支持46 未知
getPhotoCapabilities59≤79 未知 不支持46 未知
getPhotoSettings61≤79 未知 不支持46 未知
grabFrame59≤79 未知 不支持46 未知
takePhoto

60

59 — 601

≤79 未知 不支持

47

46 — 471

未知
track59≤79 未知 不支持46 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持5959 未知 未知 未知43 未知
ImageCapture() 构造函数5959 未知 未知 未知43 未知
getPhotoCapabilities5959 未知 未知 未知43 未知
getPhotoSettings6161 未知 未知 未知43 未知
grabFrame5959 未知 未知 未知43 未知
takePhoto

60

59 — 601

60

59 — 601

未知 未知 未知

44

43 — 441

未知
track5959 未知 未知 未知43 未知

1. 不支持 photoSettings 参数。

PhotoCapabilities

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持59≤79 未知 不支持46 未知
fillLightMode59≤79 未知 不支持46 未知
imageHeight59≤79 未知 不支持46 未知
imageWidth59≤79 未知 不支持46 未知
redEyeReduction59≤79 未知 不支持46 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持5959 未知 未知 未知43 未知
fillLightMode5959 未知 未知 未知43 未知
imageHeight5959 未知 未知 未知43 未知
imageWidth5959 未知 未知 未知43 未知
redEyeReduction5959 未知 未知 未知43 未知

相关链接