これは実験的な機能です。本番で使用する前にブラウザー実装状況をチェックしてください。

MediaDevices.enumeratedDevices()  メソッドは、システム上で利用できる入出力メディアデバイスの情報を収集します。

構文

navigator.mediaDevices.enumerateDevices();

戻り値

列挙が成功した場合、使用できる入出力メディアデバイスの情報を持つMediaDeviceInfoオブジェクトの配列で満たされたPromise が返されます。

次の情報が返されます。プライバシーへの配慮のため、コールした時に現在のページにアクティブなMediaStream オブジェクトがあるか、ユーザーがページのオリジンに対して認可に対して許可を出していない限り、label情報は空文字です。

MediaDeviceInfoは以下の情報を含みます。

deviceId
deviceIdはセッション間で一貫性のあるデバイスを表現するための識別子であるDOMString です。これはほかのアプリケーションから推測できず、呼び出されたアプリケーションのオリジンごとにユニークです。ユーザーがcookieをクリアしたときにリセットされます(プライベートブラウジングのためには、セッション間で一貫性のない異なる識別子が使われます)。
groupId
groupIdはグループ識別子であるDOMString です。同じ物理デバイスに所属する場合、2つのデバイスは同じグループ識別子を持ちます。たとえば、組み込みのカメラとマイクの両方があるモニターです。
kind
kindは "videoinput"、"audioinput" か "audiooutput"のいづれかが列挙された値です。
label
labelはこのデバイスを表すラベルである DOMString です(たとえば、"External USB Webcam)。MediaStreamがアクティブな間か認可が許可されているときだけ使用できます。

mediaDevices.enumerateDevices()の使用例を示します。

if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
  console.log("enumerateDevices() not supported.");
  return;
}

// List cameras and microphones.

navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
  devices.forEach(function(device) {
    console.log(device.kind + ": " + device.label +
                " id = " + device.deviceId);
  });
})
.catch(function(err) {
  console.log(err.name + ": " + err.message);
});

実行例:

videoinput: id = csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8=
audioinput: id = RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM=
audioinput: id = r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=


つ以上の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=

認可

インストールできるアプリケーション(たとえば、 Firefox OS app)でenumerateDevices() を使用するには、マニフェストファイルに1つまたは両方の次のフィールドを設定する必要があります。

"permissions": {
  "audio-capture": {
    "description": "Required to capture audio using getUserMedia()"
  },
  "video-capture": {
    "description": "Required to capture video using getUserMedia()"
  }
}

さらなる情報はpermission: audio-capturepermission: video-captureを見てください。

仕様

Specification Status Comment
Media Capture and Streams
mediaDevices.enumerateDevices の定義
勧告候補 Initial definition.

ブラウザ実装状況

現在、互換性データを可読形式の JSON フォーマットに置き換えているところです。 この互換性一覧は古い形式を使っており、これに含まれるデータの置き換えが済んでいません。 手助けしていただける場合は、こちらから!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Stream API  45.0 [1] 39 未サポート 

未サポート

未サポート 
Feature Android Firefox Mobile (Gecko) Firefox OS (Gecko) IE Phone Opera Mobile Safari Mobile
Stream API  未サポート  39 39 未サポート  未サポート 未サポート 

[1] Behind a flag.

ChromeとOperaの実装

  • adapter.jsのポリフィルを通して、ChromeとOperaでこのインターフェイスを使用できます。

関連項目

ドキュメントのタグと貢献者

このページの貢献者: kw-udon, kyo-ago, YuichiNukiyama
最終更新者: kw-udon,