From 534cc01b857fa87c3b6628c79f37e64e07f77097 Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Wed, 23 Mar 2022 16:52:40 +0800 Subject: [PATCH] refine dynacast pause delay (#558) * refine dynacast pause delay * fix test --- pkg/config/config.go | 4 ++-- pkg/rtc/mediatrack_test.go | 4 +++- pkg/rtc/mediatracksubscriptions.go | 9 ++++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index 1b13a1aec..b6ad89b9c 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -114,7 +114,7 @@ type AudioConfig struct { } type VideoConfig struct { - SubscribedQualityUpdateThrottle time.Duration `yaml:"subscribed_quality_update_throttle,omitempty"` + DynacastPauseDelay time.Duration `yaml:"dynacast_pause_delay,omitempty"` } type RedisConfig struct { @@ -213,7 +213,7 @@ func NewConfig(confString string, c *cli.Context) (*Config, error) { SmoothIntervals: 2, }, Video: VideoConfig{ - SubscribedQualityUpdateThrottle: 5 * time.Second, + DynacastPauseDelay: 5 * time.Second, }, Redis: RedisConfig{}, Room: RoomConfig{ diff --git a/pkg/rtc/mediatrack_test.go b/pkg/rtc/mediatrack_test.go index 3be331d16..b8b2fe733 100644 --- a/pkg/rtc/mediatrack_test.go +++ b/pkg/rtc/mediatrack_test.go @@ -175,7 +175,7 @@ func TestSubscribedMaxQuality(t *testing.T) { }, }, VideoConfig: config.VideoConfig{ - SubscribedQualityUpdateThrottle: 100 * time.Millisecond, + DynacastPauseDelay: 100 * time.Millisecond, }, }) @@ -240,6 +240,7 @@ func TestSubscribedMaxQuality(t *testing.T) { // muting "s1" also should disable all qualities mt.notifySubscriberMaxQuality("s1", livekit.VideoQuality_OFF) + time.Sleep(110 * time.Millisecond) expectedSubscribedQualities = []*livekit.SubscribedQuality{ {Quality: livekit.VideoQuality_LOW, Enabled: false}, @@ -251,6 +252,7 @@ func TestSubscribedMaxQuality(t *testing.T) { // unmuting "s1" should enable previously set max quality mt.notifySubscriberMaxQuality("s1", livekit.VideoQuality_LOW) + time.Sleep(110 * time.Millisecond) expectedSubscribedQualities = []*livekit.SubscribedQuality{ {Quality: livekit.VideoQuality_LOW, Enabled: true}, diff --git a/pkg/rtc/mediatracksubscriptions.go b/pkg/rtc/mediatracksubscriptions.go index a97563baf..67a009aca 100644 --- a/pkg/rtc/mediatracksubscriptions.go +++ b/pkg/rtc/mediatracksubscriptions.go @@ -65,7 +65,7 @@ func NewMediaTrackSubscriptions(params MediaTrackSubscriptionsParams) *MediaTrac maxSubscriberQuality: make(map[livekit.ParticipantID]livekit.VideoQuality), maxSubscriberNodeQuality: make(map[livekit.NodeID]livekit.VideoQuality), maxSubscribedQuality: livekit.VideoQuality_LOW, - maxSubscribedQualityDebounce: debounce.New(params.VideoConfig.SubscribedQualityUpdateThrottle), + maxSubscribedQualityDebounce: debounce.New(params.VideoConfig.DynacastPauseDelay), } return t @@ -511,8 +511,11 @@ func (t *MediaTrackSubscriptions) UpdateQualityChange(force bool) { return } - if (t.maxSubscribedQuality != livekit.VideoQuality_OFF && maxSubscribedQuality != livekit.VideoQuality_OFF) && - t.maxSubscribedQuality > maxSubscribedQuality && !force { + // if quality comes down(or become OFF), delay notify to publisher + if (t.maxSubscribedQuality != livekit.VideoQuality_OFF) && + (t.maxSubscribedQuality > maxSubscribedQuality || maxSubscribedQuality == livekit.VideoQuality_OFF) && + t.params.VideoConfig.DynacastPauseDelay > 0 && !force { + t.params.Logger.Debugw("throttle quality change", "from", t.maxSubscribedQuality, "to", maxSubscribedQuality) t.maxQualityLock.Unlock() t.maxSubscribedQualityDebounce(func() {