MediaDeviceInfo

Baseline 已广泛支持

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

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

MediaDeviceInfo 接口是 Media Capture and Streams API 的一部分,它包含描述单个媒体输入或输出设备的信息。

通过调用 navigator.mediaDevices.enumerateDevices() 获取的设备列表是 MediaDeviceInfo 对象的数组,每个对象代表一个媒体设备。

实例属性

MediaDeviceInfo.deviceId 只读

返回一个字符串,该字符串是表示设备并在会话之间持久存在的标识符。此标识符无法被其他应用程序猜测,并且对于调用应用程序的源是唯一的。当用户清除 Cookie 时,它会被重置(对于隐私浏览,会使用一个不同的标识符,该标识符不会在会话之间持久存在)。

MediaDeviceInfo.groupId 只读

返回一个字符串,该字符串是组标识符。如果两个设备属于同一个物理设备,则它们具有相同的组标识符——例如,一个带有内置摄像头和麦克风的显示器。

MediaDeviceInfo.kind 只读

返回一个枚举值,该值可以是 "videoinput"(视频输入)、"audioinput"(音频输入)或 "audiooutput"(音频输出)。

MediaDeviceInfo.label 只读

返回一个描述该设备的字符串(例如“外部 USB 网络摄像头”)。

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

实例方法

MediaDeviceInfo.toJSON()

返回 MediaDeviceInfo 对象的 JSON 表示形式。

示例

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

js
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
  console.log("enumerateDevices() not supported.");
} else {
  // List cameras and microphones.
  navigator.mediaDevices
    .enumerateDevices()
    .then((devices) => {
      devices.forEach((device) => {
        console.log(`${device.kind}: ${device.label} id = ${device.deviceId}`);
      });
    })
    .catch((err) => {
      console.log(`${err.name}: ${err.message}`);
    });
}

这可能会产生

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

或者,如果一个或多个媒体流处于活动状态,或者已获得持久权限

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

规范

规范
媒体捕获和流
# device-info

浏览器兼容性

另见