停止/关闭由 navigator.mediaDevices.getUserMedia 打开的网络摄像头流 [已关闭]

我使用以下 JavaScript 代码打开了一个网络摄像头:

const stream = await navigator.mediaDevices.getUserMedia({ /* ... */ });

是否有任何 JavaScript 代码可以停止或关闭网络摄像头?谢谢大家。


答案 1

编辑

由于此答案最初已发布,因此浏览器 API 已更改。 在传递给回调的流上不再可用。开发人员必须访问构成流的轨道(音频或视频),并单独停止每个轨道。.stop()

更多信息在这里: https://developers.google.com/web/updates/2015/07/mediastream-deprecations?hl=en#stop-ended-and-active

示例(来自上面的链接):

stream.getTracks().forEach(function(track) {
  track.stop();
});

浏览器支持可能有所不同。

原始答案

navigator.getUserMedia在成功回调中为您提供了一个流,您可以调用该流来停止录制(至少在Chrome中,似乎FF不喜欢它).stop()


答案 2

使用以下任一函数:

// 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();
        }
    });
}