在 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
。
我正在使用 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
。