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

瀏覽器相容性