From d869f2188ddcf679f15d828bff1c611b52d8099f Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 20 Jun 2025 10:31:39 +0200 Subject: [PATCH 1/2] wait for participant in onTrack --- src/room/Room.ts | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/room/Room.ts b/src/room/Room.ts index ab4bef202a..01abf2e18e 100644 --- a/src/room/Room.ts +++ b/src/room/Room.ts @@ -1412,7 +1412,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.maybeCreateEngine(); } - private onTrackAdded( + private async onTrackAdded( mediaTrack: MediaStreamTrack, stream: MediaStream, receiver: RTCRtpReceiver, @@ -1458,16 +1458,34 @@ class Room extends (EventEmitter as new () => TypedEmitter) return; } - const participant = Array.from(this.remoteParticipants.values()).find( - (p) => p.sid === participantSid, - ) as RemoteParticipant | undefined; + const findParticipant = () => + Array.from(this.remoteParticipants.values()).find((p) => p.sid === participantSid) as + | RemoteParticipant + | undefined; + + let participant = findParticipant(); if (!participant) { - this.log.error( - `Tried to add a track for a participant, that's not present. Sid: ${participantSid}`, - this.logContext, - ); - return; + const waitForParticipant = async () => { + const start = performance.now(); + while (performance.now() - start < 300) { + await sleep(20); + const p = findParticipant(); + if (p) { + return p; + } + } + }; + participant = await waitForParticipant(); + + if (!participant) { + // participant still not found after waiting for it, giving up + this.log.error( + `Tried to add a track for a participant, that's not present. Sid: ${participantSid}`, + this.logContext, + ); + return; + } } let adaptiveStreamSettings: AdaptiveStreamSettings | undefined; From 8ea7e27e2fffbcf718e001a8c0d04a8ca90ab869 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 20 Jun 2025 10:32:48 +0200 Subject: [PATCH 2/2] Create dirty-suns-punch.md --- .changeset/dirty-suns-punch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/dirty-suns-punch.md diff --git a/.changeset/dirty-suns-punch.md b/.changeset/dirty-suns-punch.md new file mode 100644 index 0000000000..7b4f916a35 --- /dev/null +++ b/.changeset/dirty-suns-punch.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Wait for participant in onTrack