MediaDevices

Baseline 广泛可用 *

此功能已成熟,可跨多种设备和浏览器版本使用。自 2017 年 9 月以来,它已在浏览器中提供。

* 此特性的某些部分可能存在不同级别的支持。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

MediaDevices 接口是 媒体捕获和流 API 的一部分,它提供了对连接的媒体输入设备(如摄像头和麦克风)以及屏幕共享的访问。本质上,它允许您获取对任何媒体数据硬件源的访问权限。

EventTarget MediaDevices

实例属性

从其父接口 EventTarget 继承属性。

实例方法

继承其父接口 EventTarget 的方法。

enumerateDevices()

获取系统中可用媒体输入和输出设备信息的数组。

getSupportedConstraints()

返回一个符合 MediaTrackSupportedConstraints 的对象,该对象指示 MediaStreamTrack 接口上支持哪些可约束的属性。请参阅 媒体流 API 了解有关约束及其使用方法的更多信息。

getDisplayMedia()

提示用户选择一个显示器或显示器的一部分(例如一个窗口)作为 MediaStream 进行捕获,用于共享或录制。返回一个解析为 MediaStream 的 Promise。

getUserMedia()

在获得用户通过提示的许可后,开启系统上的摄像头和/或麦克风,并提供一个包含视频轨道和/或音频轨道的 MediaStream

selectAudioOutput() 实验性

提示用户选择一个特定的音频输出设备。

事件

devicechange

当媒体输入或输出设备被连接到或从用户的计算机上移除时触发。

示例

js
// Put variables in global scope to make them available to the browser console.
const video = document.querySelector("video");
const constraints = {
  audio: false,
  video: true,
};

navigator.mediaDevices
  .getUserMedia(constraints)
  .then((stream) => {
    const videoTracks = stream.getVideoTracks();
    console.log("Got stream with constraints:", constraints);
    console.log(`Using video device: ${videoTracks[0].label}`);
    stream.onremovetrack = () => {
      console.log("Stream ended");
    };
    video.srcObject = stream;
  })
  .catch((error) => {
    if (error.name === "OverconstrainedError") {
      console.error(
        `The resolution ${constraints.video.width.exact}x${constraints.video.height.exact} px is not supported by your device.`,
      );
    } else if (error.name === "NotAllowedError") {
      console.error(
        "You need to grant this page permission to access your camera and microphone.",
      );
    } else {
      console.error(`getUserMedia error: ${error.name}`, error);
    }
  });

规范

规范
媒体捕获和流
# mediadevices

浏览器兼容性

另见