MediaDevices: enumerateDevices() メソッド
安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。
enumerateDevices()
は MediaDevices
インターフェイスのメソッドで、マイクやカメラ、ヘッドセットなど、現在利用可能なメディア入出力機器の一覧を要求します。
返されたプロミス (Promise
) は、機器を記述した MediaDeviceInfo
の配列で解決されます。
特定の機器へのアクセスは、権限ポリシーによって制限されます。返される機器の一覧では、対応する権限が付与されていない機器は省略されます。microphone
, camera
, speaker-selection
(出力機器の場合)などです。
また、権限 API によって、特定の既定ではない機器へのアクセスも制限され、ユーザーが明示的な許可を与えていない端末はリストから省略されます。
構文
enumerateDevices()
引数
なし。
返値
Promise
で、MediaDeviceInfo
オブジェクトの配列で履行されます。
配列内の各オブジェクトは、利用可能なメディア入出力機器の 1 つを記述します。
順番は重要で、既定のキャプチャ機器が最初にリストアップされます。
既定以外の危機は、権限が付与された機器のみが "available" となります。
メディア機器が入力機器である場合、代わりに InputDeviceInfo
オブジェクトが返されます。
列挙に失敗した場合、プロミスは拒否されます。
セキュリティ要件
API へのアクセスは、以下の制約を受けます。
- このメソッドは、安全なコンテキストで呼び出す必要があります。
- 文書は完全にアクティブで、その可視性が「可視」である必要があります。
例
これは enumerateDevices()
の使用例です。機器 ID の一覧と、もしあればそのラベルが出力されます。
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
関連情報
MediaDevices.getUserMedia
- WebRTC - API の入門ページ
- メディアキャプチャとストリーム API - メディアストリームオブジェクトの API
- ウェブカムでの写真撮影 は、動画ではなく写真を撮るために
getUserMedia()
を使用するチュートリアルです。