mirror of
https://github.com/livekit/livekit.git
synced 2026-07-30 18:19:24 +00:00
Prevent tracker override. (#2750)
When relaying buffers are stopped and restarted. On a restart, the buffer adds a tracker. But, the tracker is not destroyed till the end. So, the old tracker and new tracker for the same layer stomp on each other and declare layer unavailable (the old tracker is not getting any packets). Fix by not creating a new tracker if one exists already.
This commit is contained in:
@@ -168,35 +168,39 @@ func (s *StreamTrackerManager) AddDependencyDescriptorTrackers() {
|
||||
}
|
||||
|
||||
func (s *StreamTrackerManager) AddTracker(layer int32) streamtracker.StreamTrackerWorker {
|
||||
var tracker streamtracker.StreamTrackerWorker
|
||||
s.lock.Lock()
|
||||
if s.ddTracker != nil {
|
||||
tracker = s.ddTracker.LayeredTracker(layer)
|
||||
} else {
|
||||
tracker = s.trackers[layer]
|
||||
}
|
||||
s.lock.Unlock()
|
||||
if tracker != nil {
|
||||
return tracker
|
||||
}
|
||||
|
||||
bitrateInterval, ok := s.trackerConfig.BitrateReportInterval[layer]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
var tracker streamtracker.StreamTrackerWorker
|
||||
s.lock.Lock()
|
||||
if s.ddTracker != nil {
|
||||
tracker = s.ddTracker.LayeredTracker(layer)
|
||||
var trackerImpl streamtracker.StreamTrackerImpl
|
||||
switch s.trackerConfig.StreamTrackerType {
|
||||
case config.StreamTrackerTypePacket:
|
||||
trackerImpl = s.createStreamTrackerPacket(layer)
|
||||
case config.StreamTrackerTypeFrame:
|
||||
trackerImpl = s.createStreamTrackerFrame(layer)
|
||||
}
|
||||
if trackerImpl == nil {
|
||||
return nil
|
||||
}
|
||||
s.lock.Unlock()
|
||||
if tracker == nil {
|
||||
var trackerImpl streamtracker.StreamTrackerImpl
|
||||
switch s.trackerConfig.StreamTrackerType {
|
||||
case config.StreamTrackerTypePacket:
|
||||
trackerImpl = s.createStreamTrackerPacket(layer)
|
||||
case config.StreamTrackerTypeFrame:
|
||||
trackerImpl = s.createStreamTrackerFrame(layer)
|
||||
}
|
||||
if trackerImpl == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
tracker = streamtracker.NewStreamTracker(streamtracker.StreamTrackerParams{
|
||||
StreamTrackerImpl: trackerImpl,
|
||||
BitrateReportInterval: bitrateInterval,
|
||||
Logger: s.logger.WithValues("layer", layer),
|
||||
})
|
||||
}
|
||||
tracker = streamtracker.NewStreamTracker(streamtracker.StreamTrackerParams{
|
||||
StreamTrackerImpl: trackerImpl,
|
||||
BitrateReportInterval: bitrateInterval,
|
||||
Logger: s.logger.WithValues("layer", layer),
|
||||
})
|
||||
|
||||
s.logger.Debugw("stream tracker add track", "layer", layer)
|
||||
tracker.OnStatusChanged(func(status streamtracker.StreamStatus) {
|
||||
|
||||
Reference in New Issue
Block a user