diff --git a/pkg/rtc/mediatracksubscriptions.go b/pkg/rtc/mediatracksubscriptions.go index f5393f99f..edcd1d15b 100644 --- a/pkg/rtc/mediatracksubscriptions.go +++ b/pkg/rtc/mediatracksubscriptions.go @@ -109,13 +109,13 @@ func (t *MediaTrackSubscriptions) AddSubscriber(sub types.LocalParticipant, code trackID := t.params.MediaTrack.ID() subscriberID := sub.ID() - t.subscribedTracksMu.Lock() - defer t.subscribedTracksMu.Unlock() - // don't subscribe to the same track multiple times + t.subscribedTracksMu.Lock() if _, ok := t.subscribedTracks[subscriberID]; ok { + t.subscribedTracksMu.Unlock() return nil, nil } + t.subscribedTracksMu.Unlock() var rtcpFeedback []webrtc.RTCPFeedback switch t.params.MediaTrack.Kind() { @@ -257,7 +257,9 @@ func (t *MediaTrackSubscriptions) AddSubscriber(sub types.LocalParticipant, code sub.Negotiate() }) + t.subscribedTracksMu.Lock() t.subscribedTracks[subscriberID] = subTrack + t.subscribedTracksMu.Unlock() subTrack.SetPublisherMuted(t.params.MediaTrack.IsMuted()) // since sub will lock, run it in a goroutine to avoid deadlocks diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index 41700b897..bec3c3607 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -1216,8 +1216,22 @@ func (p *ParticipantImpl) onSubscribedMaxQualityChange(trackID livekit.TrackID, SubscribedQualities: subscribedQualities, } - p.params.Telemetry.TrackMaxSubscribedVideoQuality(context.Background(), p.ID(), &livekit.TrackInfo{Sid: string(trackID), Type: livekit.TrackType_VIDEO}, maxSubscribedQuality) + p.params.Telemetry.TrackMaxSubscribedVideoQuality( + context.Background(), + p.ID(), + &livekit.TrackInfo{ + Sid: string(trackID), + Type: livekit.TrackType_VIDEO, + }, + maxSubscribedQuality, + ) + p.params.Logger.Debugw( + "sending max subscribed quality", + "trackID", trackID, + "qualities", subscribedQualities, + "max", maxSubscribedQuality, + ) return p.writeMessage(&livekit.SignalResponse{ Message: &livekit.SignalResponse_SubscribedQualityUpdate{ SubscribedQualityUpdate: subscribedQualityUpdate,