MediaDevices: enumerateDevices() メソッド

MediaDevicesenumerateDevices() メソッドは、マイクやカメラ、ヘッドセットなど、利用可能なメディア入出力機器の一覧を要求します。 返されたプロミス (Promise) は、機器を記述した MediaDeviceInfo の配列で解決されます。

特定の機器へのアクセスは、権限 API によって制限されます。 返される機器の一覧では、対応する権限が付与されていない機器は省略されます。microphone, camera, speaker-selection (出力機器の場合)などです。

構文

js
enumerateDevices()

引数

なし。

返値

Promise で、プロミスが履行されると MediaDeviceInfo オブジェクトの配列を受け取ります。 配列内の各オブジェクトは、利用可能なメディア入出力機器の 1 つを記述します。 順番は重要で、既定のキャプチャ機器が最初にリストアップされます。

権限が付与された機器種別のみが "available" となります。 また、speaker-selection 権限ポリシーを使用して、音声出力の使用をブロックしていた場合、リストには現れないことに注意してください。

列挙に失敗した場合、プロミスは拒否されます。

セキュリティ要件

API へのアクセスは、以下の制約を受けます。

これは enumerateDevices() の使用例です。デバイス ID の一覧と、もしあればそのラベルが出力されます。

js
if (!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.error(`${err.name}: ${err.message}`);
    });
}

出力例です。

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

または 1 つ以上の MediaStream がアクティブな場合、または永続的な権限が付与されている場合は次のようになります。

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

仕様書

Specification
Media Capture and Streams
# dom-mediadevices-enumeratedevices

ブラウザーの互換性

BCD tables only load in the browser

関連情報