Estoy usando WebRTC y socket.io para videollamadas.
La llamada funciona bien, pero cuando ejecuto la función de apagar la cámara, el video se detiene pero la luz de mi cámara web permanece encendida.
Aquí está la función para apagar la cámara:
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() }) } }) }Cada vez que llama a navigator.mediaDevices.getUserMedia() , se crea un nuevo MediaStream , con nuevos MediaStreamTracks . Cerrar estos nuevos MediaStreamTracks no cerrará los anteriores.
Entonces, lo que necesita es realizar un seguimiento de su MediaStream anterior y cerrar el VideoTrack.
Dado su código actual, parece que lo configuró como myVideo.current.srcObject , si es así, puede acceder a él desde allí:
const muteVideoTrack = () => { myVideo.current.srcObject.getVideoTracks().forEach((track) => track.stop()); }; O simplemente puede almacenar este MediaStream en cualquier variable accesible para su método.
Esto permitirá que MediaStream capture solo el micrófono. Si desea detener por completo todo el MediaStream, llame a getTracks() en lugar de getVideoTracks() y, opcionalmente, configure el srcObject en null .