我想关闭带javascript功能的网络摄像头(它必须在收到一些Ajax响应后关闭),但似乎无法关闭而不刷新页面。关闭它的所有方法,如video.src = null,video.pause ...等在任何浏览器中都不起作用。唯一的方法是关闭作为成功函数参数传递的流,所以有什么方法可以在函数成功之外使用这个对象来关闭摄像头?停止getUserMedia的网络摄像头流没有页面刷新
我知道,这个问题以前(Stop/Close webcam using getUserMedia and RTCPeerConnection Chrome 25)被问过,但我的需求是不同的,所以我需要一些帮助来解决这个问题
的感谢!
编辑:我的工作代码试图关闭网络摄像头:
navigator.getUserMedia = navigator.getUserMedia || navigator.mozGetUserMedia || navigator.webkitGetUserMedia || navigator.msGetUserMedia;
if(navigator.getUserMedia){
var video_constraints = {
mandatory: {
maxHeight: 480,
maxWidth: 640
},
optional: []
};
var self = this;
self.navigator.getUserMedia({
audio: false,
video: video_constraints
}, self.onSuccess, onError);
}
else{
alert('An error has occurred starting the webcam stream, please revise the instructions to fix the problem');
}
function onSuccess(stream) {
var video = document.getElementById('webcam');
if(navigator.webkitGetUserMedia || navigator.mozGetUserMedia){
video.src = window.URL.createObjectURL(stream);
}
else if(navigator.msGetUserMedia){
//future implementation over internet explorer
}
else{
video.src = stream;
}
self.localStream = stream;
video.play();
}
function onError() {
alert('There has been a problem retrieving the streams - did you allow access?');
}
function closeWebcamConnection(){
this.localStream.stop();
}
uff..it真的复杂,张贴在这里的代码XD
嗯,好吧,我试图把类似的东西放在我的代码中,但我不知道这是因为你的代码完全不同。我也看到了你的旧问题,但对我来说还是很难理解。如果你使用“this”来停止流,你为什么要将流对象保存在“self”对象中?我会在这里发布我的代码,因此可能是你可以告诉我如何实现你的解决方案: – user2158954 2013-04-10 14:49:20
我承认使用“自我”可能会混淆没有整个上下文。我已经适应了我的答案了一下。只需将引用保留在全局或范围的变量localStream中即可。 – asgoth 2013-04-10 15:10:14
不可思议!我刚刚在Chrome和Firefox中测试过,它完美的工作!现在我记得,我也尝试过一次同样的东西,但它没有奏效。现在,如果我可以在不使用繁琐的ajax的情况下将画布图像捕获作为请求发送,那将是完美的,但这是另一个主题jej。非常感谢你的配合!独特的是:我可以使用HTTPS吗? – user2158954 2013-04-10 15:41:28