diff --git a/.changeset/big-turkeys-lay.md b/.changeset/big-turkeys-lay.md new file mode 100644 index 0000000000..8e64eda2f8 --- /dev/null +++ b/.changeset/big-turkeys-lay.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Fix stopping old track in `setMediaStreamTrack` diff --git a/src/room/track/LocalTrack.ts b/src/room/track/LocalTrack.ts index 88aa3e2239..b9e907a3e2 100644 --- a/src/room/track/LocalTrack.ts +++ b/src/room/track/LocalTrack.ts @@ -112,10 +112,6 @@ export default abstract class LocalTrack extends Track { this._mediaStreamTrack.removeEventListener('ended', this.handleEnded); this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent); this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent); - - if (!this.providedByUser && this._mediaStreamTrack !== newTrack) { - this._mediaStreamTrack.stop(); - } } this.mediaStream = new MediaStream([newTrack]); @@ -148,6 +144,11 @@ export default abstract class LocalTrack extends Track { if (this.sender) { await this.sender.replaceTrack(processedTrack ?? newTrack); } + // if `newTrack` is different from the existing track, stop the + // older track just before replacing it + if (!this.providedByUser && this._mediaStreamTrack !== newTrack) { + this._mediaStreamTrack.stop(); + } this._mediaStreamTrack = newTrack; if (newTrack) { // sync muted state with the enabled state of the newly provided track