From c3e4c86b33555b2046171bb20cb0b63daf377739 Mon Sep 17 00:00:00 2001 From: Marcus Schiesser Date: Tue, 17 Mar 2026 20:07:10 +0800 Subject: [PATCH] fix: reset webcam state on access denial --- src/hooks/useScreenRecorder.ts | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index 61f2948..b4afd2e 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -399,21 +399,26 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } } - if (webcamEnabled) { - try { - webcamStream.current = await navigator.mediaDevices.getUserMedia({ - audio: false, - video: { + if (webcamEnabled) { + try { + webcamStream.current = await navigator.mediaDevices.getUserMedia({ + audio: false, + video: { width: { ideal: WEBCAM_TARGET_WIDTH }, height: { ideal: WEBCAM_TARGET_HEIGHT }, frameRate: { ideal: WEBCAM_TARGET_FRAME_RATE, max: WEBCAM_TARGET_FRAME_RATE }, }, - }); - } catch (cameraError) { - console.warn("Failed to get webcam access:", cameraError); - toast.error("Camera access denied. Recording will continue without webcam."); + }); + } catch (cameraError) { + console.warn("Failed to get webcam access:", cameraError); + if (webcamStream.current) { + webcamStream.current.getTracks().forEach((track) => track.stop()); + webcamStream.current = null; + } + setWebcamEnabledState(false); + toast.error("Camera access denied. Recording will continue without webcam."); + } } - } stream.current = new MediaStream(); const videoTrack = screenMediaStream.getVideoTracks()[0];