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

问题描述 投票:0回答:1

我正在使用 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();
        });
      }
    });
};

javascript reactjs webrtc mediastream
1个回答
3
投票

每次调用

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

© www.soinside.com 2019 - 2024. All rights reserved.