diff --git a/pkg/rtc/dynacastmanager.go b/pkg/rtc/dynacastmanager.go index e671ea4f2..9f10b0678 100644 --- a/pkg/rtc/dynacastmanager.go +++ b/pkg/rtc/dynacastmanager.go @@ -174,6 +174,12 @@ func (d *DynacastManager) updateMaxQualityForMime(mime string, maxQuality liveki func (d *DynacastManager) update(force bool) { d.lock.Lock() + if len(d.maxSubscribedQuality) == 0 { + // no mime has been added, nothing to update + d.lock.Unlock() + return + } + // add or remove of a mime triggers an update changed := len(d.maxSubscribedQuality) != len(d.committedMaxSubscribedQuality) downgradesOnly := !changed diff --git a/pkg/rtc/mediatracksubscriptions.go b/pkg/rtc/mediatracksubscriptions.go index c00bedaf9..84b29ea15 100644 --- a/pkg/rtc/mediatracksubscriptions.go +++ b/pkg/rtc/mediatracksubscriptions.go @@ -160,6 +160,20 @@ func (t *MediaTrackSubscriptions) AddSubscriber(sub types.LocalParticipant, wr * subTrack.SetPublisherMuted(t.params.MediaTrack.IsMuted()) }) + downTrack.OnStatsUpdate(func(_ *sfu.DownTrack, stat *livekit.AnalyticsStat) { + t.params.Telemetry.TrackStats(livekit.StreamType_DOWNSTREAM, subscriberID, trackID, stat) + }) + + downTrack.OnMaxLayerChanged(func(dt *sfu.DownTrack, layer int32) { + if t.onSubscriberMaxQualityChange != nil { + t.onSubscriberMaxQualityChange(subscriberID, dt.Codec(), layer) + } + }) + + downTrack.OnRttUpdate(func(_ *sfu.DownTrack, rtt uint32) { + go sub.UpdateRTT(rtt) + }) + var transceiver *webrtc.RTPTransceiver var sender *webrtc.RTPSender @@ -240,20 +254,6 @@ func (t *MediaTrackSubscriptions) AddSubscriber(sub types.LocalParticipant, wr * downTrack.SetTransceiver(transceiver) - downTrack.OnStatsUpdate(func(_ *sfu.DownTrack, stat *livekit.AnalyticsStat) { - t.params.Telemetry.TrackStats(livekit.StreamType_DOWNSTREAM, subscriberID, trackID, stat) - }) - - downTrack.OnMaxLayerChanged(func(dt *sfu.DownTrack, layer int32) { - if t.onSubscriberMaxQualityChange != nil { - t.onSubscriberMaxQualityChange(subscriberID, dt.Codec(), layer) - } - }) - - downTrack.OnRttUpdate(func(_ *sfu.DownTrack, rtt uint32) { - go sub.UpdateRTT(rtt) - }) - downTrack.OnCloseHandler(func(willBeResumed bool) { go t.downTrackClosed(sub, subTrack, willBeResumed, sender) }) diff --git a/pkg/sfu/buffer/rtpstats.go b/pkg/sfu/buffer/rtpstats.go index ec8eae0cd..5d6e18001 100644 --- a/pkg/sfu/buffer/rtpstats.go +++ b/pkg/sfu/buffer/rtpstats.go @@ -294,9 +294,10 @@ func (r *RTPStats) Update(rtph *rtp.Header, payloadSize int, paddingSize int, pa if rtph.Marker { r.frames++ } + + r.updateJitter(rtph, packetTime) } - r.updateJitter(rtph, packetTime) } return diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index 03584962b..4cc5573cb 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -298,9 +298,6 @@ func (d *DownTrack) Bind(t webrtc.TrackLocalContext) (webrtc.RTPCodecParameters, d.bound.Store(true) d.bindLock.Unlock() - if d.onMaxLayerChanged != nil { - d.onMaxLayerChanged(d, d.MaxLayers().Spatial) - } d.connectionStats.Start(d.receiver.TrackInfo()) d.logger.Debugw("downtrack bound")