reactjs 即使在运行MediaStreamTrack.stop()后,网络摄像头指示灯仍亮着

hmmo2u0o  于 2022-12-26  发布在  React
关注(0)|答案(2)|浏览(257)

我正在建立一个React应用程序,需要访问网络摄像头,获得以下代码:

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

然而,我的网络摄像头灯仍然亮着。当我稍后使用console.log记录mediaStreamTrack时,我得到:

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

e4yzc0pl

e4yzc0pl1#

1.如果您使用多个摄像头,那么您需要确保您的代码正在尝试“停止”您之前打开的同一个摄像头。
1.您需要确保代码只调用getUserMedia一次,这样getVideoTracks()[0].stop()就可以正常工作。

vjrehmav

vjrehmav2#

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

import * as React from 'react'
 
 // in your component

 const video = React.useRef();

 cons tracks = window.localstream.getTracks();

 tracks.forEach(function(track) {
   if (track.kind === 'video') {
     if (track.enabled) {
       track.stop();
       track.enabled = false; 
     }
   }
 });

 video.current.srcObject = null;

相关问题