Javascript 使用getUserMedia后关闭网络摄像头/摄像头

Javascript 使用getUserMedia后关闭网络摄像头/摄像头,javascript,google-chrome-extension,getusermedia,Javascript,Google Chrome Extension,Getusermedia,我正在开发一个Chrome扩展,它使用背景页面访问用户的网络摄像头 用户可以选择关闭相机 该流似乎正在关闭。相关函数不再接收流。但是,网络摄像头指示灯(目前正在mac book pro上开发和测试)没有关闭 有什么想法吗 下面是我设置流的代码: if (navigator.webkitGetUserMedia!=null) { var options = { video:true, audio:false }; navigato

我正在开发一个Chrome扩展,它使用背景页面访问用户的网络摄像头

用户可以选择关闭相机

该流似乎正在关闭。相关函数不再接收流。但是,网络摄像头指示灯(目前正在mac book pro上开发和测试)没有关闭

有什么想法吗

下面是我设置流的代码:

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");
}
下面是我关闭流的方法:

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

任何明显的我遗漏的地方?

上述代码有效-如@jib使用上述代码所示:

function vidOff() {
    vid.pause();
    vid.src = "";
    localstream.stop();
}
问题在于它是一个持久的背景页面。作为一种解决办法,我将把Chrome扩展换成。

localstream.stop()已贬值,不再工作。请参见此问题和答案:

此链接:

实际上,您将
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>

var控制台={log:function(msg){div.innerHTML+=“”+msg+“

”;}; var-localstream; 如果(navigator.mediaDevices.getUserMedia!==null){ 变量选项={ 视频:没错, 音频:错误 }; webkitGetUserMedia(选项,函数(流){ vid.src=window.URL.createObjectURL(流); localstream=stream; 视频播放(); console.log(“流媒体”); },函数(e){ console.log(“后台错误:+e.name”); }); } 函数vidOff(){ //清除间隔(DRAWLOOP); //ExtensionData.vidStatus='off'; 参阅暂停(); vid.src=“”; localstream.getTracks()[0].stop(); 控制台日志(“视频关闭”); }
维多夫

我不知道扩展或背景页面,但在我的macbook pro fwiw上的常规内容处理过程中工作正常(灯光关闭)。你有错误吗?遗憾的是没有。我想这一定是因为这是一个不可见的过程,它没有更新。当我使用小提琴并单击“视频关闭”时,视频确实停止了,但网络摄像头仍然打开。