MediaDevices: enumerateDevices() メソッド

安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

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

特定の機器へのアクセスは、権限ポリシーによって制限されます。返される機器の一覧では、対応する権限が付与されていない機器は省略されます。microphone, camera, speaker-selection (出力機器の場合)などです。 また、権限 API によって、特定の既定ではない機器へのアクセスも制限され、ユーザーが明示的な許可を与えていない端末はリストから省略されます。

構文

js
enumerateDevices()

引数

なし。

返値

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

既定以外の危機は、権限が付与された機器のみが "available" となります。

メディア機器が入力機器である場合、代わりに InputDeviceInfo オブジェクトが返されます。

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

セキュリティ要件

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

  • このメソッドは、安全なコンテキストで呼び出す必要があります。
  • 文書は完全にアクティブで、その可視性が「可視」である必要があります。

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

js
if (!navigator.mediaDevices?.enumerateDevices) {
  console.log("enumerateDevices() not supported.");
} else {
  // カメラとマイクを列挙
  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

関連情報