From d0ac19779e1dacb5900877bec18a643b934e8156 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Sat, 10 Aug 2024 15:42:14 +0530 Subject: [PATCH] Reset DD tracker layers when muted. (#2920) * Reset DD tracker layers when muted. @cnderrauber, I think this is okay to do, but please let me know if there are gotchas in there. * copy * more compact form --- pkg/sfu/streamallocator/streamallocator.go | 4 +--- pkg/sfu/streamtracker/streamtracker_dd.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/pkg/sfu/streamallocator/streamallocator.go b/pkg/sfu/streamallocator/streamallocator.go index caeb594db..e1595b427 100644 --- a/pkg/sfu/streamallocator/streamallocator.go +++ b/pkg/sfu/streamallocator/streamallocator.go @@ -545,9 +545,7 @@ func (s *StreamAllocator) maybePostEventAllocateTrack(downTrack *sfu.DownTrack) shouldPost := false s.videoTracksMu.Lock() if track := s.videoTracks[livekit.TrackID(downTrack.ID())]; track != nil { - if track.SetDirty(true) { - shouldPost = true - } + shouldPost = track.SetDirty(true) } s.videoTracksMu.Unlock() diff --git a/pkg/sfu/streamtracker/streamtracker_dd.go b/pkg/sfu/streamtracker/streamtracker_dd.go index 29b876c70..5feb33d9e 100644 --- a/pkg/sfu/streamtracker/streamtracker_dd.go +++ b/pkg/sfu/streamtracker/streamtracker_dd.go @@ -117,6 +117,9 @@ func (s *StreamTrackerDependencyDescriptor) resetLocked() { s.bitrate[i][j] = 0 } } + + s.maxSpatialLayer = buffer.InvalidLayerSpatial + s.maxTemporalLayer = buffer.InvalidLayerTemporal } func (s *StreamTrackerDependencyDescriptor) SetPaused(paused bool) { @@ -126,8 +129,14 @@ func (s *StreamTrackerDependencyDescriptor) SetPaused(paused bool) { return } s.paused = paused + + var notifyFns []func(status StreamStatus) + var notifyStatus StreamStatus if !paused { s.resetLocked() + + notifyStatus = StreamStatusStopped + notifyFns = append(notifyFns, s.onStatusChanged[:]...) } else { s.lastBitrateReport = time.Now() go s.worker(s.generation.Inc()) @@ -135,6 +144,11 @@ func (s *StreamTrackerDependencyDescriptor) SetPaused(paused bool) { } s.lock.Unlock() + for _, fn := range notifyFns { + if fn != nil { + fn(notifyStatus) + } + } } func (s *StreamTrackerDependencyDescriptor) Observe(temporalLayer int32, pktSize int, payloadSize int, hasMarker bool, ts uint32, ddVal *buffer.ExtDependencyDescriptor) {