2012-10-14 15 views
13

Gram z api html5/javascript getUserMedia, aby napisać aplikację js, która będzie korzystać z kamery urządzenia, jeśli jest dostępna. Używam modernizr do wykrywania zdolności (w przeglądarce) tak:getUserMedia - jak wykryć, czy urządzenie rzeczywiście ma kamerę

if (Modernizr.getusermedia) { 

A w prawdziwym bloku:

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"); 
    }    
); 

To działa prawidłowo. Ale odkryłem, że wywołanie Modernizer.getUserMedia zwraca true w oparciu o przeglądarkę obsługującą interfejs API, a nie to, czy urządzenie rzeczywiście ma kamerę, czy nie.

IE. na moim MacBooku z kamerą iSight i aktualną wersją Chrome, Modernizr.getUserMedia zwraca true, a następnie navigator.getUserMedia (...) pyta o pozwolenie na korzystanie z kamery. Doskonały

Jednak na innej maszynie bez kamery, ale z aktualną wersją Chrome, Modernizr.getUserMedia zwraca wartość true, co oznacza, że ​​navigator.getUserMedia (...) monituje o pozwolenie na korzystanie z kamery, której urządzenie nie robi. t mają. Nie tak doskonałe!

Czy ktoś wie, czy możliwe jest wykrycie obecności aparatu? Idealnie nie chcę pytać użytkownika o zgodę na dostęp do kamery, jeśli jej nie ma!

Cheers

Nathan

+0

Który wywołanie zwrotne zostanie wywołane (z którymi argumentami), gdy zezwolisz na to urządzenie bez kamery? – Bergi

+0

Wywołanie zwrotne sukcesu jest wywoływane, ale nie sprawdziłem, czy argument (videoStream w powyższym kodzie) ma wartość null lub nie. To dobry punkt, powinienem to sprawdzić. Zrobię to wkrótce i dam ci znać ... –

Odpowiedz

0

getUserMedia API jest jeszcze całkiem świeże z prasy i będzie mieć pewne błędy i rzeczy do poprawy, jak ten problem.

Ale w tej chwili nie widzę sposobu, aby sprawdzić, czy komputer rzeczywiście ma aparat. Chociaż można użyć lampy błyskowej :-(wykryć go myślę ...

6

Można użyć MediaStreamTrack.getSources. To zwraca listę wideo i urządzenia audio podłączonego do komputera. To nie wymaga zgody użytkownika.

można następnie przekazać identyfikator do getUserMedia aby uzyskać żądane urządzenie mediów

3

To pomogło mi.

function(videoStream) { 
    // 'success' callback - user has given permission to use the camera 
    if (videoStream.getVideoTracks().length > 0) { 
     // my code to use the camera here ... 
    } 
} 
Powiązane problemy