web-dev-qa-db-ja.com

getUserMediaの使用後にウェブカメラ/カメラをオフにします

バックグラウンドページを使用してユーザーのWebカメラにアクセスするChrome拡張機能を開発しています。

ユーザーには、カメラをオフにするオプションが与えられます。

ストリームはオフになっているようです。関連する関数は、ストリームを受信しなくなりました。ただし、Webカメラのライト(現在、Macブックプロで開発およびテスト中)はオフになりません。

何か案は?

ストリームを設定するための私のコードは次のとおりです。

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

ストリームをオフにする方法は次のとおりです。

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

私は行方不明になっていますか?

17
Niazipan

上記のコードは動作します-@jib here で示されるように、上記のコードを使用します:

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

問題は、永続的なバックグラウンドページであることです。回避策として、Chrome拡張機能のために イベントページ に切り替えています。

6
Niazipan

localstream.stop()は減価償却され、機能しなくなりました。この質問と回答を参照してください: navigator.getUserMediaによって開かれたWebカメラを停止/閉じる

そして、このリンク:

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

基本的に、localstream.stop()localstream.getTracks()[0].stop();に変更します

更新された質問のソースは次のとおりです。

<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>
20
CovertIII