From 0042ebe7e7fd1fa54267868855c5d116cf101826 Mon Sep 17 00:00:00 2001 From: Thomas Frivold Date: Mon, 4 Dec 2023 19:27:40 +0000 Subject: [PATCH] Fix screenshare stream bug --- src/lib/RoomParticipant.ts | 2 +- src/lib/core/redux/slices/remoteParticipants.ts | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/lib/RoomParticipant.ts b/src/lib/RoomParticipant.ts index 8b7fe900..6211b0ac 100644 --- a/src/lib/RoomParticipant.ts +++ b/src/lib/RoomParticipant.ts @@ -48,7 +48,7 @@ export interface RemoteParticipant { isAudioEnabled: boolean; isVideoEnabled: boolean; isLocalParticipant: boolean; - stream: MediaStream | null; + stream: (MediaStream & { inboundId?: string }) | null; streams: Stream[]; newJoiner: boolean; presentationStream: (MediaStream & { inboundId?: string }) | null; diff --git a/src/lib/core/redux/slices/remoteParticipants.ts b/src/lib/core/redux/slices/remoteParticipants.ts index d6aef6e3..7c340599 100644 --- a/src/lib/core/redux/slices/remoteParticipants.ts +++ b/src/lib/core/redux/slices/remoteParticipants.ts @@ -92,6 +92,7 @@ function removeClient(state: RemoteParticipantState, participantId: string) { function addStreamId(state: RemoteParticipantState, participantId: string, streamId: string) { const { participant } = findParticipant(state, participantId); + if (!participant || participant.streams.find((s) => s.id === streamId)) { console.warn(`No participant ${participantId} or stream ${streamId} already exists`); return state; @@ -142,13 +143,13 @@ function addStream(state: RemoteParticipantState, payload: RtcStreamAddedPayload return state; } - const remoteParticipantStream = - remoteParticipant.streams.find((s) => s.id === streamId) || remoteParticipant.streams[0]; + const remoteParticipantStream = remoteParticipant.streams.find((s) => s.id === streamId); if ( - (remoteParticipant.stream && remoteParticipant.stream.id === streamId) || + (remoteParticipant.stream && + (remoteParticipant.stream.id === streamId || remoteParticipant.stream.inboundId === streamId)) || (!remoteParticipant.stream && streamType === "webcam") || - (!remoteParticipant.stream && !streamType && remoteParticipant.streams.indexOf(remoteParticipantStream) < 1) + (!remoteParticipant.stream && !streamType && !remoteParticipantStream) ) { return updateParticipant(state, clientId, { stream }); }