diff --git a/src/room/Room.ts b/src/room/Room.ts index e62d407d95..29e805f57b 100644 --- a/src/room/Room.ts +++ b/src/room/Room.ts @@ -276,7 +276,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) const abortController = new AbortController(); // in order to catch device changes prior to room connection we need to register the event in the constructor - navigator.mediaDevices?.addEventListener('devicechange', this.handleDeviceChange, { + navigator.mediaDevices?.addEventListener?.('devicechange', this.handleDeviceChange, { signal: abortController.signal, }); @@ -1615,7 +1615,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) window.removeEventListener('beforeunload', this.onPageLeave); window.removeEventListener('pagehide', this.onPageLeave); window.removeEventListener('freeze', this.onPageLeave); - navigator.mediaDevices?.removeEventListener('devicechange', this.handleDeviceChange); + navigator.mediaDevices?.removeEventListener?.('devicechange', this.handleDeviceChange); } } finally { this.setAndEmitConnectionState(ConnectionState.Disconnected); @@ -2500,7 +2500,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) new LocalVideoTrack( publishOptions.useRealTracks ? ( - await window.navigator.mediaDevices.getUserMedia({ video: true }) + (await window.navigator.mediaDevices?.getUserMedia?.({ video: true })) ?? + new MediaStream() ).getVideoTracks()[0] : createDummyVideoStreamTrack( 160 * (participantOptions.aspectRatios[0] ?? 1), @@ -2528,7 +2529,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) }), new LocalAudioTrack( publishOptions.useRealTracks - ? (await navigator.mediaDevices.getUserMedia({ audio: true })).getAudioTracks()[0] + ? ( + (await navigator.mediaDevices?.getUserMedia?.({ audio: true })) ?? new MediaStream() + ).getAudioTracks()[0] : getEmptyAudioStreamTrack(), undefined, false,