在 webRtc 中将视频约束设置为 false 后,网络摄像头灯不会关闭

Webcam light doesnt turn off after setting the video constraint to false in webRtc

我正在使用 WebRTC 和 socket.io 进行视频通话。

通话正常,但当我运行关闭摄像头功能时,视频停止,但我的网络摄像头灯仍然亮着。

这里是关闭相机的函数:

const  mute= ()=>{
  setMuteCamera(true)
  navigator.mediaDevices
    .getUserMedia({ video: false, audio: true })
    .then((stream) => {
      setStream(stream);
      myVideo.current.srcObject = stream;
      if (stream!= null) {

        stream?.getTracks().forEach((track) => {
          
          track.stop()
        })
        
        }
  
  

    })

  }

每次调用 navigator.mediaDevices.getUserMedia() 都会创建一个 new MediaStream,其中 new MediaStreamTracks。关闭这些新的 MediaStreamTracks 不会关闭以前的

所以您需要的是跟踪您之前的 MediaStream,并从中关闭 VideoTrack。
鉴于您当前的代码,您似乎确实将其设置为 myVideo.current.srcObject,如果是这样,您可以从那里访问它:

const muteVideoTrack = () => {
  myVideo.current.srcObject.getVideoTracks().forEach((track) => track.stop());
};

或者您也可以简单地将此 MediaStream 存储在您的方法可访问的任何变量中。
这将使 MediaStream 仅捕获麦克风。如果您想完全停止整个 MediaStream,则调用 getTracks() 而不是 getVideoTracks(),并可选择将 srcObject 设置为 null