We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

これは実験段階の機能です。
この機能は複数のブラウザーで開発中の状態にあります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザーの将来のバージョンで変更になる可能性があることに注意してください。

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 + ": " + error.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.

ブラウザ実装状況

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

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でこのインターフェイスを使用できます。

関連項目

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

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