MediaDeviceInfo - 描述单个媒体输入或输出设备的信息

MediaDevicesInfo 接口包含描述单个媒体输入或输出设备的信息。通过调用 navigator.mediaDevices.enumerateDevices() 获得的设备列表是一个 MediaDeviceInfo 对象的数组,每个媒体设备为一个值。

属性

MediaDeviceInfo.deviceId只读

返回一个 DOMString,它是跨会话持久存在的表示设备的标识符。其他应用程序无法猜测,并且调用应用程序的来源是唯一的。当用户清除 cookie 时,它会被重置(对于无痕式窗口,会使用不会在会话中保留的其他标识符)。

MediaDeviceInfo.groupId只读

返回一个 DOMString,表示分组标识符的。如果两个设备属于同一物理设备,则它们具有相同的分组标识符 - 例如,具有内置摄像头和麦克风的监视器。

MediaDeviceInfo.kind只读

返回一个枚举值,该值是 videoinputaudioinputaudiooutput

MediaDeviceInfo.label只读

返回一个 DOMString,它是描述此设备的标签(例如 “外部 USB 网络摄像头”)。

出于安全原因,除非存在活动媒体流用户已授予媒体设备访问的持久权限,否则 label 字段始终为空白。否则,该分组设备标签可以用作指纹识别机制的一部分以识别用户。

方法

无。

实例

这是一个使用 enumerateDevices() 来获取设备列表的实例。

if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
  console.log("不支持 enumerateDevices()。");
  return;
}

// 列出相机和麦克风。

navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
  devices.forEach(function(device) {
    console.log(device.kind + ": " + device.label +
                " id = " + device.deviceId);
  });
})
.catch(function(err) {
  console.log(err.name + ": " + err.message);
});

这可能会输出:

videoinput: id = csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8=
audioinput: id = RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM=
audioinput: id = r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=

或者,如果一个或多个媒体流处于活动状态,或者是否已授予持久权限则输出:

videoinput: FaceTime HD Camera (Built-in) id=csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8=
audioinput: default (Built-in Microphone) id=RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM=
audioinput: Built-in Microphone id=r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=

规范

规范 状态 备注
Media Capture and Streams
MediaDevicesInfo 的定义
编者的草案 初始定义

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持551 支持39 不支持 未知2 不支持
deviceId5511239 不支持 未知2 不支持
groupId5511239 不支持 未知2 不支持
kind5511239 不支持 未知2 不支持
label5511239 不支持 未知2 不支持
toJSON 未知 未知 未知 未知 未知 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持551551 支持39 未知 未知2 不支持
deviceId551551 支持39 未知 未知2 不支持
groupId551551 支持39 未知 未知2 不支持
kind551551 支持39 未知 未知2 不支持
label551551 支持39 未知 未知2 不支持
toJSON 未知 未知 未知 未知 未知 未知 未知

1. 在早期版本,此接口可通过 adapter.js polyfill 获得。

2. Opera 通过 adapter.js polyfill 提供此接口。