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