Подтвердить что ты не робот

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(...) запрашивает разрешение на использование камеры, которая у устройства отсутствует, Не так отлично!

Кто-нибудь знает, можно ли обнаружить наличие камеры? В идеале я не хочу запрашивать у пользователя разрешения на доступ к камере, если у них их нет!

Приветствия

Натан

4b9b3361

Ответ 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

чтобы получить устройства.