Fix missed update when subscribers are subscribing to the same layer (#310)

This commit is contained in:
David Zhao
2021-12-31 23:54:41 -08:00
committed by GitHub
parent 8d0fb179a0
commit d7d3ffdd13
2 changed files with 16 additions and 15 deletions
+7 -15
View File
@@ -915,25 +915,17 @@ func (t *MediaTrack) updateQualityChange() {
}
}
} else {
t.allSubscribersMuted = false
if maxSubscribedQuality != t.maxSubscribedQuality {
if t.allSubscribersMuted || maxSubscribedQuality != t.maxSubscribedQuality {
t.allSubscribersMuted = false
notifyMaxExpected = true
maxExpectedSpatialLayer = SpatialLayerForQuality(maxSubscribedQuality)
t.maxSubscribedQuality = maxSubscribedQuality
subscribedQualities = append(subscribedQualities, &livekit.SubscribedQuality{Quality: livekit.VideoQuality_LOW, Enabled: true})
if t.maxSubscribedQuality == livekit.VideoQuality_LOW {
subscribedQualities = append(subscribedQualities, &livekit.SubscribedQuality{Quality: livekit.VideoQuality_MEDIUM, Enabled: false})
} else {
subscribedQualities = append(subscribedQualities, &livekit.SubscribedQuality{Quality: livekit.VideoQuality_MEDIUM, Enabled: true})
}
if t.maxSubscribedQuality != livekit.VideoQuality_HIGH {
subscribedQualities = append(subscribedQualities, &livekit.SubscribedQuality{Quality: livekit.VideoQuality_HIGH, Enabled: false})
} else {
subscribedQualities = append(subscribedQualities, &livekit.SubscribedQuality{Quality: livekit.VideoQuality_HIGH, Enabled: true})
for q := livekit.VideoQuality_LOW; q <= livekit.VideoQuality_HIGH; q++ {
subscribedQualities = append(subscribedQualities, &livekit.SubscribedQuality{
Quality: q,
Enabled: q <= t.maxSubscribedQuality,
})
}
}
}
+9
View File
@@ -236,5 +236,14 @@ func TestSubscribedMaxQuality(t *testing.T) {
}
require.Equal(t, "v1", actualTrackID)
require.EqualValues(t, expectedSubscribedQualities, actualSubscribedQualities)
// unmuting "s1" should enable previously set max quality
mt.NotifySubscriberMaxQuality("s1", livekit.VideoQuality_LOW)
expectedSubscribedQualities = []*livekit.SubscribedQuality{
{Quality: livekit.VideoQuality_LOW, Enabled: true},
{Quality: livekit.VideoQuality_MEDIUM, Enabled: false},
{Quality: livekit.VideoQuality_HIGH, Enabled: false},
}
require.EqualValues(t, expectedSubscribedQualities, actualSubscribedQualities)
})
}