MediaDeviceInfo: groupId 属性

Baseline 已广泛支持

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

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

groupIdMediaDeviceInfo 接口的一个只读属性,它返回一个字符串,该字符串是一个组标识符。

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

一个字符串,唯一标识了该设备所属的相关设备组。

示例

在此示例中,我们组合了一个列表,其中包含与给定设备属于同一组的设备。这可能用于生成一个用户界面,将相关设备聚集在一起以便展示,或者方便用户同时选择使用同一显示器上的内置摄像头和麦克风。

js
const getDeviceGroup = (mainDevInfo) => {
  let devList = [];

  navigator.mediaDevices.enumerateDevices().then((devices) => {
    devices.forEach((device) => {
      if (device.groupId === mainDevInfo.groupId) {
        devList.push(device);
      }
    });
  });

  return devList;
};

getDeviceGroup() 函数以描述要为其构建组列表的设备的 MediaDeviceInfo 对象作为输入。函数首先将结果数组 devList 初始化为空数组。

然后调用 navigator.mediaDevices.enumerateDevices() 来获取所有媒体设备的列表。一旦 promise 解析,我们使用 forEach() 遍历列表。对于每个设备,如果其 groupId 与主设备的 groupId 匹配,我们就将 MediaDeviceInfo 对象推送到列表中。

最后,这个现在包含同一组中每个设备的 MediaDeviceInfo 对象的列表被返回给调用者。

可以通过比较两个对象的 deviceId 值,仅当设备 ID 不匹配时才将设备推送到结果列表中,从而轻松修改此设置,以便将传入的设备排除在返回的列表中,或者将其放在列表的顶部。

此示例版本将传入的设备放在结果列表的顶部,然后添加找到的其他组成员。

js
const getDeviceGroup = (mainDevInfo) => {
  let devList = [mainDevInfo];

  navigator.mediaDevices.enumerateDevices().then((devices) => {
    devices.forEach((device) => {
      if (
        device.groupId === mainDevInfo.groupId &&
        device.deviceId !== mainDevInfo.deviceId
      ) {
        devList.push(device);
      }
    });
  });

  return devList;
};

规范

规范
媒体捕获和流
# dom-mediadeviceinfo-groupid

浏览器兼容性