MediaDevices.enumerateDevices()

Экспериментальная возможность: Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.

Метод MediaDevices.enumerateDevices() собирает информацию о медиа-устройствах ввода и вывода, доступных в системе.

Синтаксис

navigator.mediaDevices.enumerateDevices()
.then(function(MediaDeviceInfo) { ... })

Возвращаемое значение

Возвращает Promise (en-US) который, если выполнится успешно, вернёт массив экземпляров MediaDeviceInfo (en-US) , которые содержат информацию о доступных медиа-устройствах ввода и вывода.

Пример

Ниже, пример, использующий метод mediaDevices.enumerateDevices().

js
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
  console.log("enumerateDevices() не поддерживается.");
  return;
}

// Перечисление в цикле камер и микрофонов

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=

Разрешения

Что бы использовать метод enumerateDevices() в устанавливаемом приложении (к примеру в Firefox OS приложение), необходимо указать оба поля внутри файла манифеста приложения:

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

Смотрите также : разрешение: аудио захват and разрешение : видео захват в продолжение темы.

Спецификации

Specification
Media Capture and Streams
# dom-mediadevices-enumeratedevices

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также