2015-01-25 5 views
11

Ich entwickle eine Chrome-Erweiterung, die über die Hintergrundseite auf die Webcam des Benutzers zugreift.Schalten Sie die Webcam/Kamera aus, nachdem Sie getUserMedia verwendet haben

Benutzer haben die Möglichkeit, die Kamera auszuschalten.

Der Stream scheint ausgeschaltet zu sein. Die relevanten Funktionen empfangen den Stream nicht mehr. Allerdings wird das Webcam-Licht (das derzeit auf einem MacBook Pro entwickelt und getestet wird) nicht ausgeschaltet.

Irgendwelche Ideen?

Hier ist mein Code für den Stream einrichten:

if (navigator.webkitGetUserMedia!=null) { 

    var options = { 
     video:true, 
     audio:false 
    }; 
    navigator.webkitGetUserMedia(options, 
     function(stream) { 
     vid.src = window.webkitURL.createObjectURL(stream); 
     localstream = stream; 
     vid.play(); 
     console.log("streaming"); 
    }, 
     function(e) { 
     console.log("background error : " + e); 
     }); 
} 

Und hier ist meine Methode für den Strom ausschalten:

function vidOff() { 
    clearInterval(theDrawLoop); 
    ExtensionData.vidStatus = 'off'; 
    vid.pause(); 
    vid.src = ""; 
    localstream.stop(); 
    DB_save(); 
    console.log("Vid off"); 
} 

Offensichtliche ich fehle?

+1

I weiß nicht über Erweiterungen oder Hintergrundseiten, aber [Ihr Code] (http: // jsfiddle.net/6ydedhg6) funktioniert gut in einem regelmäßigen Content-Prozess auf meinem Macbook Pro fwiw (Licht aus). Haben Sie Fehler? – jib

+0

Leider keine. Ich denke, es muss sein, weil es ein nicht sichtbarer Prozess ist, der nicht aktualisiert wird. – Niazipan

Antwort

4

Der obige Code funktioniert - wie von @jib gezeigt here den obigen Code verwenden:

function vidOff() { 
    vid.pause(); 
    vid.src = ""; 
    localstream.stop(); 
} 

Das Problem ist, wobei es eine anhaltende Hintergrundseite zu tun. Ich tausche für die Chrome-Erweiterung auf event pages um.

10

localstream.stop() wurde abgeschrieben und funktioniert nicht mehr. Sehen Sie diese Frage und Antwort: Stop/Close webcam which is opened by navigator.getUserMedia

Und auf diesen Link:

https://developers.google.com/web/updates/2015/07/mediastream-deprecations?hl=en#stop-ended-and-active

Im Wesentlichen ändern Sie localstream.stop()-localstream.getTracks()[0].stop();

Hier ist die Quelle in der Frage aktualisiert:

<html> 
<head> 
<script> 
var console = { log: function(msg) { div.innerHTML += "<p>" + msg + "</p>"; } }; 

var localstream; 

if (navigator.mediaDevices.getUserMedia !== null) { 
    var options = { 
    video:true, 
    audio:false 
    }; 
    navigator.webkitGetUserMedia(options, function(stream) { 
    vid.src = window.URL.createObjectURL(stream); 
    localstream = stream; 
    vid.play(); 
    console.log("streaming"); 
    }, function(e) { 
    console.log("background error : " + e.name); 
    }); 
} 

function vidOff() { 
    //clearInterval(theDrawLoop); 
    //ExtensionData.vidStatus = 'off'; 
    vid.pause(); 
    vid.src = ""; 
    localstream.getTracks()[0].stop(); 
    console.log("Vid off"); 
} 
</script> 
</head> 
<body> 
<video id="vid" height="120" width="160" muted="muted" autoplay></video><br> 
<button onclick="vidOff()">vidOff!</button><br> 
<div id="div"></div> 
</body> 
</html>