From cbc7d43ba4098beeb84ebab897b90d982753a13d Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Tue, 3 Jan 2023 18:16:55 +0530 Subject: [PATCH] Minor tweaks to frame based stream tracker. (#1281) --- pkg/sfu/streamtracker/streamtracker_frame.go | 22 ++++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pkg/sfu/streamtracker/streamtracker_frame.go b/pkg/sfu/streamtracker/streamtracker_frame.go index ee80cd326..02d9ad7ae 100644 --- a/pkg/sfu/streamtracker/streamtracker_frame.go +++ b/pkg/sfu/streamtracker/streamtracker_frame.go @@ -10,9 +10,10 @@ import ( const ( checkInterval = 500 * time.Millisecond - frameRateResolution = float64(0.01) // 1 frame every 100 seconds - frameRateIncreaseFactor = 0.6 // slow increase - frameRateDecreaseFactor = 0.9 // fast decrease + statusCheckTolerance = 0.98 + frameRateResolution = 0.01 // 1 frame every 100 seconds + frameRateIncreaseFactor = 0.6 // slow increase + frameRateDecreaseFactor = 0.9 // fast decrease ) type StreamTrackerFrameParams struct { @@ -131,7 +132,7 @@ func (s *StreamTrackerFrame) updateStatusCheckTime() bool { if s.lastStatusCheckAt.IsZero() { s.lastStatusCheckAt = time.Now() } - if time.Since(s.lastStatusCheckAt) < s.evalInterval { + if time.Since(s.lastStatusCheckAt) < time.Duration(statusCheckTolerance*float64(s.evalInterval)) { return false } s.lastStatusCheckAt = time.Now() @@ -139,14 +140,12 @@ func (s *StreamTrackerFrame) updateStatusCheckTime() bool { } func (s *StreamTrackerFrame) updateEstimatedFrameRate() float64 { - frameRate := float64(0.0) diff := s.newestTS - s.oldestTS if diff == 0 || s.numFrames < 2 { return 0.0 } - frameRate = float64(s.params.ClockRate) / float64(diff) * float64(s.numFrames-1) - frameRate = math.Round(frameRate/frameRateResolution) * frameRateResolution + frameRate := roundFrameRate(float64(s.params.ClockRate) / float64(diff) * float64(s.numFrames-1)) // reset for next evaluation interval s.oldestTS = s.newestTS @@ -162,8 +161,7 @@ func (s *StreamTrackerFrame) updateEstimatedFrameRate() float64 { factor = frameRateDecreaseFactor } - estimatedFrameRate := frameRate*factor + s.estimatedFrameRate*(1.0-factor) - estimatedFrameRate = math.Round(estimatedFrameRate/frameRateResolution) * frameRateResolution + estimatedFrameRate := roundFrameRate(frameRate*factor + s.estimatedFrameRate*(1.0-factor)) if s.estimatedFrameRate != estimatedFrameRate { s.estimatedFrameRate = estimatedFrameRate s.updateEvalInterval() @@ -191,3 +189,9 @@ func (s *StreamTrackerFrame) updateEvalInterval() { } } } + +// ------------------------------------------------------------------------------ + +func roundFrameRate(frameRate float64) float64 { + return math.Round(frameRate/frameRateResolution) * frameRateResolution +}