Skip to content

Commit 9985e32

Browse files
🛠️ fix: handle null cameraSource in Recorder component
Changes: - added null check for cameraSource before accessing deviceId - added localCameraStream variable to store camera stream if cameraSource is not null - updated MediaRecorder construction to use localCameraStream instead of cameraStream - updated conditions for setting screenMedia and starting screenRecorder This update fixes issues with cameraSource being null, and handles it accordingly by setting cameraStream to null and not creating a MediaRecorder for it. It also updates the conditions for setting screenMedia and starting screenRecorder to account for the case where cameraSource is null or localCameraStream is null.
1 parent e66dfdc commit 9985e32

1 file changed

Lines changed: 26 additions & 15 deletions

File tree

apps/desktop/src/components/Recorder.tsx

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -243,19 +243,25 @@ export function Recorder({
243243
});
244244
setAudioStream(audioStream);
245245

246+
let localCameraStream: MediaStream | null = null;
246247
// Capture the camera stream
247-
const cameraStream = await navigator.mediaDevices.getUserMedia({
248-
video: {
249-
deviceId: cameraSource?.deviceId,
250-
width: 240,
251-
height: 180,
252-
aspectRatio: 1,
253-
facingMode: "user",
254-
frameRate: 60,
255-
},
256-
audio: false,
257-
});
258-
setCameraStream(cameraStream);
248+
if (cameraSource) {
249+
const cameraStream = await navigator.mediaDevices.getUserMedia({
250+
video: {
251+
deviceId: cameraSource?.deviceId,
252+
width: 240,
253+
height: 180,
254+
aspectRatio: 1,
255+
facingMode: "user",
256+
frameRate: 60,
257+
},
258+
audio: false,
259+
});
260+
localCameraStream = cameraStream;
261+
setCameraStream(cameraStream);
262+
} else {
263+
setCameraStream(null);
264+
}
259265

260266
const combinedStream = new MediaStream([
261267
screenStream.getVideoTracks()[0],
@@ -274,8 +280,12 @@ export function Recorder({
274280
videoRef.current.srcObject = screenStream;
275281

276282
// Entire screen and a camera is selected
277-
if (selectedSource.sourceType === "window" && cameraSource) {
278-
const cameraRecorder = new MediaRecorder(cameraStream, {
283+
if (
284+
selectedSource.sourceType === "window" &&
285+
cameraSource &&
286+
localCameraStream
287+
) {
288+
const cameraRecorder = new MediaRecorder(localCameraStream, {
279289
mimeType: "video/webm; codecs=vp9,opus",
280290
});
281291

@@ -308,7 +318,8 @@ export function Recorder({
308318
// Entire screen is selected
309319
selectedSource.sourceType === "screen" ||
310320
// Specific window is selected, but no camera
311-
(selectedSource.sourceType === "window" && !cameraSource)
321+
(selectedSource.sourceType === "window" && !cameraSource) ||
322+
!localCameraStream
312323
) {
313324
setScreenMedia(screenRecorder);
314325
screenRecorder.start();

0 commit comments

Comments
 (0)