diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index 85233f57b..f4d789dc8 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -2357,28 +2357,30 @@ func (p *ParticipantImpl) setTrackMuted(trackID livekit.TrackID, muted bool) *li p.supervisor.SetPublicationMute(trackID, muted) } - track := p.UpTrackManager.SetPublishedTrackMuted(trackID, muted) + track, changed := p.UpTrackManager.SetPublishedTrackMuted(trackID, muted) var trackInfo *livekit.TrackInfo if track != nil { trackInfo = track.ToProto() } - isPending := false + // update mute status in any pending/queued add track requests too p.pendingTracksLock.RLock() for _, pti := range p.pendingTracks { for i, ti := range pti.trackInfos { if livekit.TrackID(ti.Sid) == trackID { ti = utils.CloneProto(ti) + changed = changed || ti.Muted != muted ti.Muted = muted pti.trackInfos[i] = ti - isPending = true - trackInfo = ti + if trackInfo == nil { + trackInfo = ti + } } } } p.pendingTracksLock.RUnlock() - if trackInfo != nil { + if trackInfo != nil && changed { if muted { p.params.Telemetry.TrackMuted(context.Background(), p.ID(), trackInfo) } else { @@ -2386,10 +2388,6 @@ func (p *ParticipantImpl) setTrackMuted(trackID livekit.TrackID, muted bool) *li } } - if !isPending && track == nil { - p.pubLogger.Debugw("could not locate track", "trackID", trackID) - } - return trackInfo } diff --git a/pkg/rtc/uptrackmanager.go b/pkg/rtc/uptrackmanager.go index 13cec3885..45ad411f3 100644 --- a/pkg/rtc/uptrackmanager.go +++ b/pkg/rtc/uptrackmanager.go @@ -116,13 +116,15 @@ func (u *UpTrackManager) OnPublishedTrackUpdated(f func(track types.MediaTrack)) u.onTrackUpdated = f } -func (u *UpTrackManager) SetPublishedTrackMuted(trackID livekit.TrackID, muted bool) types.MediaTrack { +func (u *UpTrackManager) SetPublishedTrackMuted(trackID livekit.TrackID, muted bool) (types.MediaTrack, bool) { + changed := false track := u.GetPublishedTrack(trackID) if track != nil { currentMuted := track.IsMuted() track.SetMuted(muted) if currentMuted != track.IsMuted() { + changed = true u.params.Logger.Debugw("publisher mute status changed", "trackID", trackID, "muted", track.IsMuted()) if u.onTrackUpdated != nil { u.onTrackUpdated(track) @@ -130,7 +132,7 @@ func (u *UpTrackManager) SetPublishedTrackMuted(trackID livekit.TrackID, muted b } } - return track + return track, changed } func (u *UpTrackManager) GetPublishedTrack(trackID livekit.TrackID) types.MediaTrack {