我正在播放网络摄像头,并想要一种方法来停止网络摄像头。我试图通过在流媒体轨道上调用stop来阻止它,尽管我无法在回调函数之外到达轨道变量。如何在回调函数外部访问此函数中的跟踪?基本上是这样的:
function media(i) {
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var constraints = {
audio: false,
video: true
};
var video = document.querySelectorAll("video")[i];
var localstream;
function successCallback(stream) {
localstream = stream; // stream available to console
var track = stream.getTracks()[0];
if (window.URL) {
video.src = window.URL.createObjectURL(stream);
} else {
video.src = stream;
}
track.stop();
}
function errorCallback(error) {
console.log('navigator.getUserMedia error: ', error);
}
navigator.getUserMedia(constraints, successCallback, errorCallback);
}
完整的实例如下所示:
df[df.Nation.str.startswith('U')]
答案 0 :(得分:1)
在track
函数的范围外定义media
。另外,请考虑在调用Blob URL
时撤消video
src
设置的track.stop()
。
window.onload = function() {
let track, url;
function media(i) {
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var constraints = {
audio: false,
video: true
};
var video = document.querySelectorAll("video")[i];
var localstream;
function successCallback(stream) {
localstream = stream; // stream available to console
track = stream.getTracks()[0];
if (window.URL) {
url = window.URL.createObjectURL(stream);
video.src = url;
} else {
video.src = stream;
}
// track.stop();
}
function errorCallback(error) {
console.log('navigator.getUserMedia error: ', error);
}
navigator.getUserMedia(constraints, successCallback, errorCallback);
}
var button = document.querySelector("button");
button.onclick = function() {
track.stop();
URL.revokeObjectURL(url);
// document.querySelectorAll("video")[i].src = "";
}
media(0)
}