MediaDevices: enumerateDevices() メソッド

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2017.

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

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

構文

js
enumerateDevices()

引数

なし。

返値

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

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

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

セキュリティ要件

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

関連情報