GetUserMedia - как определить, действительно ли устройство имеет камеру
Я играю с html5/javascript getUserMedia api, чтобы написать приложение js, которое будет использовать камеру устройства, если оно доступно. Я использую Modernizr для обнаружения возможности (браузера) следующим образом:
if (Modernizr.getusermedia) {
И внутри истинного блока:
navigator.getUserMedia(
{ // we would like to use video but not audio
// This object is browser API specific! - some implementations require boolean properties, others require strings!
video: true,
audio: false
},
function(videoStream) {
// 'success' callback - user has given permission to use the camera
// my code to use the camera here ...
},
function() {
// 'no permission' call back
console.log("user did not give access to the camera");
}
);
Это прекрасно работает. Но то, что я обнаружил, заключается в том, что вызов Modernizer.getUserMedia возвращает true на основе браузера, поддерживающего api, а не на самом деле у устройства есть камера или нет.
IE. на моем MacBook с камерой iSight и текущей версией Chrome, Modernizr.getUserMedia возвращает true, затем navigator.getUserMedia(...) запрашивает разрешение на использование камеры. Отлично
Однако, на другой машине без камеры, но с текущей версией Chrome, Modernizr.getUserMedia возвращает true, что означает, что navigator.getUserMedia(...) запрашивает разрешение на использование камеры, которая у устройства отсутствует, Не так отлично!
Кто-нибудь знает, можно ли обнаружить наличие камеры? В идеале я не хочу запрашивать у пользователя разрешения на доступ к камере, если у них их нет!
Приветствия
Натан
Ответы
Ответ 1
Вы можете использовать MediaStreamTrack.getSources. Это возвращает список видео и аудио устройств, подключенных к ПК. Это не требует разрешения пользователя.
Затем вы можете передать идентификатор getUserMedia, чтобы получить нужное мультимедийное устройство.
Ответ 2
Это помогло мне:
function(videoStream) {
// 'success' callback - user has given permission to use the camera
if (videoStream.getVideoTracks().length > 0) {
// my code to use the camera here ...
}
}
Ответ 3
API-интерфейс getUserMedia все еще достаточно свежий из прессы и будет иметь некоторые ошибки и все, что нужно улучшить, как эта проблема.
Но на данный момент я не вижу способа проверить, действительно ли на компьютере есть камера. Хотя вы можете использовать Flash:-( чтобы обнаружить это, я думаю...
Ответ 4
Вы можете использовать DetectRTC из экспериментов Muaz Khan webrtc:
https://github.com/muaz-khan/WebRTC-Experiment/tree/master/DetectRTC
Использование:
DetectRTC.audioInputDevices
DetectRTC.audioOutputDevices
DetectRTC.videoInputDevices
чтобы получить устройства.