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

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
enumerateDevices

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
See implementation notes.
Has more compatibility info.

関連情報