MediaDeviceInfo - 描述单个媒体输入或输出设备的信息
MediaDevicesInfo
接口包含描述单个媒体输入或输出设备的信息。通过调用 navigator.mediaDevices.enumerateDevices()
获得的设备列表是一个 MediaDeviceInfo
对象的数组,每个媒体设备为一个值。
属性
MediaDeviceInfo.deviceId
只读
返回一个 DOMString
,它是跨会话持久存在的表示设备的标识符。其他应用程序无法猜测,并且调用应用程序的来源是唯一的。当用户清除 cookie 时,它会被重置(对于无痕式窗口,会使用不会在会话中保留的其他标识符)。
MediaDeviceInfo.groupId
只读
返回一个 DOMString
,表示分组标识符的。如果两个设备属于同一物理设备,则它们具有相同的分组标识符 - 例如,具有内置摄像头和麦克风的监视器。
MediaDeviceInfo.kind
只读
返回一个枚举值,该值是 videoinput
,audioinput
或 audiooutput
。
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 的定义 |
编者的草案 | 初始定义 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 551 | 支持 | 39 | 不支持 | 未知2 | 不支持 |
deviceId | 551 | 12 | 39 | 不支持 | 未知2 | 不支持 |
groupId | 551 | 12 | 39 | 不支持 | 未知2 | 不支持 |
kind | 551 | 12 | 39 | 不支持 | 未知2 | 不支持 |
label | 551 | 12 | 39 | 不支持 | 未知2 | 不支持 |
toJSON | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 551 | 551 | 支持 | 39 | 未知 | 未知2 | 不支持 |
deviceId | 551 | 551 | 支持 | 39 | 未知 | 未知2 | 不支持 |
groupId | 551 | 551 | 支持 | 39 | 未知 | 未知2 | 不支持 |
kind | 551 | 551 | 支持 | 39 | 未知 | 未知2 | 不支持 |
label | 551 | 551 | 支持 | 39 | 未知 | 未知2 | 不支持 |
toJSON | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 |
1. 在早期版本,此接口可通过 adapter.js polyfill 获得。
2. Opera 通过 adapter.js polyfill 提供此接口。