2012-10-14 4 views
13

Ich spiele mit dem HTML5/Javascript getUserMedia API, um eine js-App zu schreiben, die die Kamera des Geräts verwenden wird, falls verfügbar. Ich verwende Modernizr die Fähigkeit zu erkennen (des Browsers) wie folgt aus:getUserMedia - wie erkennt man, ob das Gerät tatsächlich eine Kamera hat

if (Modernizr.getusermedia) { 

Und innerhalb des wahren Block:

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

Dies funktioniert gut. Aber was ich gefunden habe ist, dass der Aufruf von Modernizer.getUserMedia basierend auf dem Browser, der die API unterstützt, true zurückgibt und nicht, ob das Gerät tatsächlich eine Kamera hat oder nicht.

IE. Auf meinem MacBook mit seiner iSight-Kamera und einer aktuellen Version von Chrome gibt Modernizr.getUserMedia true zurück, und navigator.getUserMedia (...) fordert zur Verwendung der Kamera auf. Excellent

Auf einem anderen Computer ohne Kamera, aber mit einer aktuellen Version von Chrome, gibt Modernizr.getUserMedia true zurück, was bedeutet, dass navigator.getUserMedia (...) zur Verwendung der Kamera auffordert, die das Gerät nicht verwendet. t haben. Nicht so hervorragend!

Weiß jemand, ob es möglich ist, die Existenz einer Kamera zu erkennen? Idealerweise möchte ich den Benutzer nicht zur Erlaubnis auffordern, auf die Kamera zuzugreifen, wenn sie keine haben!

Prost

Nathan

+0

Welcher Callback wird (mit welchen Argumenten) aufgerufen, wenn Sie es auf dem Gerät ohne Kamera zulassen? – Bergi

+0

Der Erfolg Callback wird aufgerufen, aber ich habe nicht überprüft, ob das arg (VideoStream in meinem Code oben) Null ist oder nicht. Das ist ein guter Punkt, ich sollte das überprüfen. Tun Sie es in Kürze und lassen Sie es wissen ... –

Antwort

0

Die getUserMedia API noch recht frisch aus der Presse und wird einige Bugs und Dinge müssen, wie dieses Problem verbessert werden.

Aber im Moment sehe ich keine Möglichkeit für Sie zu überprüfen, ob der Computer tatsächlich eine Kamera hat. Obwohl Sie Flash verwenden könnte :-(es zu erkennen, ich denke ...

6

Sie MediaStreamTrack.getSources verwenden können. Dies ist eine Liste von Video zurück und Audio an den PC angeschlossenen Geräte. Dies ist nicht die Berechtigung Benutzer erfordert.

Sie können dann die ID getUserMedia passieren die gewünschte Mediengerät zu bekommen

3

das hat mir geholfen.

WebRTC Experimente
function(videoStream) { 
    // 'success' callback - user has given permission to use the camera 
    if (videoStream.getVideoTracks().length > 0) { 
     // my code to use the camera here ... 
    } 
} 
Verwandte Themen