MediaDevices: enumerateDevices() Methode

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Die enumerateDevices()-Methode der MediaDevices-Schnittstelle fordert eine Liste der derzeit verfügbaren Medien-Ein- und -Ausgabegeräte an, wie Mikrofone, Kameras, Headsets usw. Das zurückgegebene Promise wird mit einem Array von MediaDeviceInfo-Objekten aufgelöst, die die Geräte beschreiben.

Die zurückgegebene Liste wird alle Geräte auslassen, die durch die Dokument-Berechtigungsrichtlinie blockiert sind: microphone, camera, speaker-selection (für Ausgabegeräte) usw. Der Zugriff auf bestimmte, nicht standardmäßige Geräte wird auch durch die Permissions API beschränkt, und die Liste wird Geräte auslassen, für die der Benutzer keine explizite Erlaubnis erteilt hat.

Syntax

js
enumerateDevices()

Parameter

Keine.

Rückgabewert

Ein Promise, das mit einem Array von MediaDeviceInfo-Objekten erfüllt wird. Jedes Objekt im Array beschreibt eines der verfügbaren Medien-Ein- und -Ausgabegeräte. Die Reihenfolge ist signifikant — die Standardaufnahmegeräte werden zuerst aufgelistet.

Abgesehen von Standardgeräten sind nur Geräte verfügbar, für die Berechtigungen erteilt wurden.

Wenn das Mediengerät ein Eingabegerät ist, wird stattdessen ein InputDeviceInfo-Objekt zurückgegeben.

Wenn die Aufzählung fehlschlägt, wird das Versprechen abgelehnt.

Sicherheitsanforderungen

Der Zugriff auf die API unterliegt folgenden Einschränkungen:

  • Die Methode muss in einem sicheren Kontext aufgerufen werden.
  • Das Dokument muss vollständig aktiv sein, und seine Sichtbarkeit muss "sichtbar" sein.

Beispiele

Hier ist ein Beispiel für die Verwendung von enumerateDevices(). Es gibt eine Liste der Geräte-IDs mit ihren Labels aus, sofern verfügbar.

js
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}`);
    });
}

Dies könnte ergeben:

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

oder wenn ein oder mehrere MediaStreams aktiv sind oder dauerhafte Berechtigungen erteilt wurden:

videoinput: FaceTime HD Camera (Built-in) id=csO9c0YpAf274OuCPUA53CNE0YHlIr2yXCi+SqfBZZ8=
audioinput: default (Built-in Microphone) id=RKxXByjnabbADGQNNZqLVLdmXlS0YkETYCIbg+XxnvM=
audioinput: Built-in Microphone id=r2/xw1xUPIyZunfV1lGrKOma5wTOvCkWfZ368XCndm0=

Spezifikationen

Specification
Media Capture and Streams
# dom-mediadevices-enumeratedevices

Browser-Kompatibilität

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.

Siehe auch