2015-01-25 13 views
11

Opracowuję rozszerzenie do Chrome, które korzysta ze strony w tle, aby uzyskać dostęp do kamery internetowej użytkownika.Wyłącz kamerę internetową/aparat po użyciu getUserMedia

Użytkownicy mają możliwość wyłączenia aparatu.

Strumień wydaje się być wyłączony. Odpowiednie funkcje nie otrzymują już strumienia. Jednak lampka kamery internetowej (obecnie opracowywana i testowana na MacBook Pro) nie wyłącza się.

Wszelkie pomysły?

Oto mój kod do utworzenia strumienia:

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

A oto moja metoda wyłączenia strumienia:

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

Wszelkie oczywiste mi brakuje?

+1

I nie wiem o rozszerzeniach lub stronach w tle, ale [Twój kod] (http: // jsfiddle.net/6ydedhg6) działa poprawnie w regularnym procesie na moim MacBook Pro fwiw (światło wyłącza się). Czy masz jakieś błędy? – jib

+0

Niestety żadna. Myślę, że tak musi być, ponieważ jest to niewidoczny proces, którego nie aktualizuje. – Niazipan

Odpowiedz

4

Powyższy kod działa - jak wynika @jib here stosując powyższy kod:

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

Problem jest z nim zrobić będąc trwałe strona tła. Zamieniam się na event pages dla rozszerzenia Chrome jako obejście.

10

localstream.stop() został zamortyzowany i nie działa. Patrz na to pytanie i odpowiedź: Stop/Close webcam which is opened by navigator.getUserMedia

i ten link:

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

Zasadniczo zmianie localstream.stop() do localstream.getTracks()[0].stop();

Oto źródło w pytaniu aktualizacja:

<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> 
Powiązane problemy