停止/关闭由 navigator.mediaDevices.getUserMedia 打开的网络摄像头流 [已关闭]
2022-08-30 01:05:05
我使用以下 JavaScript 代码打开了一个网络摄像头:
const stream = await navigator.mediaDevices.getUserMedia({ /* ... */ });
是否有任何 JavaScript 代码可以停止或关闭网络摄像头?谢谢大家。
我使用以下 JavaScript 代码打开了一个网络摄像头:
const stream = await navigator.mediaDevices.getUserMedia({ /* ... */ });
是否有任何 JavaScript 代码可以停止或关闭网络摄像头?谢谢大家。
编辑
由于此答案最初已发布,因此浏览器 API 已更改。 在传递给回调的流上不再可用。开发人员必须访问构成流的轨道(音频或视频),并单独停止每个轨道。.stop()
示例(来自上面的链接):
stream.getTracks().forEach(function(track) {
track.stop();
});
浏览器支持可能有所不同。
原始答案
navigator.getUserMedia
在成功回调中为您提供了一个流,您可以调用该流来停止录制(至少在Chrome中,似乎FF不喜欢它).stop()
使用以下任一函数:
// stop both mic and camera
function stopBothVideoAndAudio(stream) {
stream.getTracks().forEach(function(track) {
if (track.readyState == 'live') {
track.stop();
}
});
}
// stop only camera
function stopVideoOnly(stream) {
stream.getTracks().forEach(function(track) {
if (track.readyState == 'live' && track.kind === 'video') {
track.stop();
}
});
}
// stop only mic
function stopAudioOnly(stream) {
stream.getTracks().forEach(function(track) {
if (track.readyState == 'live' && track.kind === 'audio') {
track.stop();
}
});
}