我已经实现了一段代码来访问Chrome浏览器上的摄像头并在使用后将其释放。 的代码:
启动相机:
navigator.webkitGetUserMedia($scope.options.videoObj, function (stream) {
$scope.options.video.src = window.URL.createObjectURL(stream);
$scope.options.video.play();
$scope.options.localMediaStream = stream;
}, $scope.options.errBack);
停止相机:
$scope.options.video.pause();
$scope.options.localMediaStream.stop();
但是,在最新升级 Chrome浏览器之后,即版本47.0.2526.80 m, $ scope.options.localMediaStream没有" stop"功能
所以,一切都在破碎。 我需要释放相机访问权限,以便其他浏览器可以访问相机。 (以前停止功能正在做这项工作)
如果有人有任何解决方案,请帮助我。
答案 0 :(得分:1)
似乎chrome已将其删除,因为此功能已弃用。
以后版本的Chrome支持无前缀
MediaDevices.getUserMedia()
,取代了这种已弃用的方法。
以及.stop()
方法的兼容性表:
相反,您会使用MediaDevices.getUserMedia()
:
navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream) { ... })
答案 1 :(得分:1)
正如@Jai在回答中所说,Chrome最终实施了新的navigator.mediaDevices.getUserMedia()
方法。
According to the specs,要停止播放,您现在必须调用每个stop()
对象的mediaStreamTrack
方法,而不是MediaStream
个对象。
完整代码:
var video = document.querySelector('video');
var start = function(){
navigator.mediaDevices.getUserMedia({video:true}).then(function(mediaStream){
window.stream = mediaStream;
video.src = URL.createObjectURL(mediaStream);
video.play();
});
}
var stop = function(){
if(stream.stop) {
stream.stop(); // FF and other not yet updated browsers
} else {
// updated browsers
var tracks = stream.getTracks();
for(var i=0; i<tracks.length; i++) {
tracks[i].stop();
}
}
URL.revokeObjectURL(video.src);
}
或者,要仅释放相机,您可以拨打stream.getVideoTracks()[0].stop()
答案 2 :(得分:0)
$ scope.options.localMediaStream = NULL;