6

我正在构建一个反应应用程序,需要访问使用以下代码获取的网络摄像头:

navigator.mediaDevices.getUserMedia({ video: true, audio: false })
  .then(function(stream) {
      video.srcObject = stream;
      window.localstream = stream;
      video.play();
  })

但是,当我卸载当前组件时,我的网络摄像头保持打开状态。在我的 componentWillUnmount 块中,我尝试了以下代码。

video.pause();
video.srcObject=null;
window.localstream.getTracks()[0].stop();
window.localstream.getVideoTracks()[0].stop();

但是,我的网络摄像头灯仍然亮着。当我之后控制台记录 mediaStreamTrack 时,我得到:

在此处输入图像描述

如何停止我的网络摄像头?

4

2 回答 2

6
  1. 如果您使用多个摄像头,那么您需要确保您的代码尝试“停止”您之前打开的同一个摄像头。

  2. 您需要确保您的代码只调用一次 getUserMedia,然后 getVideoTracks()[0].stop() 应该可以正常工作。

于 2018-02-07T19:58:48.407 回答
0

这个帖子看起来很老了,有同样问题的人,试试这个方法

 let tracks = window.localstream.getTracks();
 let video = document.querySelector('#your-video-tag-id');
 tracks.forEach(function(track) {
     if (track.kind === 'video') {
         if (track.enabled) {
             track.stop();
             track.enabled = false; 
         }
     }
 });
 video.srcObject = null;
于 2019-11-18T01:27:26.757 回答