Fixes to sync state disabled tracks. (#2459)

* Fixes to sync state disabled tracks.

* test
This commit is contained in:
Raja Subramanian
2024-02-07 13:52:57 +05:30
committed by GitHub
parent f4f0b3336b
commit f95194c833
6 changed files with 25 additions and 40 deletions
+2 -23
View File
@@ -649,7 +649,7 @@ func (r *Room) UpdateSubscriptions(
func (r *Room) SyncState(participant types.LocalParticipant, state *livekit.SyncState) error {
pLogger := participant.GetLogger()
pLogger.Infow("setting sync state", "state", state)
pLogger.Infow("setting sync state", "state", logger.Proto(state))
shouldReconnect := false
pubTracks := state.GetPublishTracks()
@@ -690,28 +690,7 @@ func (r *Room) SyncState(participant types.LocalParticipant, state *livekit.Sync
// can be set before addding subscriptions,
// in fact it is done before so that setting can be updated immediately upon subscription.
for _, trackSid := range state.TrackSidsDisabled {
// skip if it is not present in the subscribe list
found := false
for _, sid := range state.Subscription.TrackSids {
if sid == trackSid {
found = true
break
}
}
if !found {
participant_tracks:
for _, pt := range state.Subscription.ParticipantTracks {
for _, sid := range pt.TrackSids {
if sid == trackSid {
found = true
break participant_tracks
}
}
}
}
if found {
participant.UpdateSubscribedTrackSettings(livekit.TrackID(trackSid), &livekit.UpdateTrackSettings{Disabled: true})
}
participant.UpdateSubscribedTrackSettings(livekit.TrackID(trackSid), &livekit.UpdateTrackSettings{Disabled: true})
}
r.UpdateSubscriptions(
+8 -4
View File
@@ -189,7 +189,7 @@ func (t *SubscribedTrack) SetPublisherMuted(muted bool) {
t.updateDownTrackMute()
}
func (t *SubscribedTrack) UpdateSubscriberSettings(settings *livekit.UpdateTrackSettings) {
func (t *SubscribedTrack) UpdateSubscriberSettings(settings *livekit.UpdateTrackSettings, isImmediate bool) {
prevDisabled := t.subMuted.Swap(settings.Disabled)
t.settings.Store(settings)
@@ -197,11 +197,15 @@ func (t *SubscribedTrack) UpdateSubscriberSettings(settings *livekit.UpdateTrack
t.logger.Debugw("updated subscribed track enabled", "enabled", !settings.Disabled)
}
// avoid frequent changes to mute & video layers, unless it became visible
if prevDisabled != settings.Disabled && !settings.Disabled {
if isImmediate {
t.UpdateVideoLayer()
} else {
t.debouncer(t.UpdateVideoLayer)
// avoid frequent changes to mute & video layers, unless it became visible
if prevDisabled != settings.Disabled && !settings.Disabled {
t.UpdateVideoLayer()
} else {
t.debouncer(t.UpdateVideoLayer)
}
}
}
+3 -3
View File
@@ -823,8 +823,8 @@ func (s *trackSubscription) setSubscribedTrack(track types.SubscribedTrack) {
s.lock.Unlock()
if settings != nil && track != nil {
s.logger.Debugw("restoring subscriber settings", "settings", settings)
track.UpdateSubscriberSettings(settings)
s.logger.Debugw("restoring subscriber settings", "settings", logger.Proto(settings))
track.UpdateSubscriberSettings(settings, true)
}
if oldTrack != nil {
oldTrack.OnClose(nil)
@@ -895,7 +895,7 @@ func (s *trackSubscription) setSettings(settings *livekit.UpdateTrackSettings) {
subTrack := s.subscribedTrack
s.lock.Unlock()
if subTrack != nil {
subTrack.UpdateSubscriberSettings(settings)
subTrack.UpdateSubscriberSettings(settings, false)
}
}
+1 -1
View File
@@ -344,7 +344,7 @@ func TestUpdateSettingsBeforeSubscription(t *testing.T) {
return st.UpdateSubscriberSettingsCallCount() == 1
}, subSettleTimeout, subCheckInterval, "UpdateSubscriberSettings should be called once")
applied := st.UpdateSubscriberSettingsArgsForCall(0)
applied, _ := st.UpdateSubscriberSettingsArgsForCall(0)
require.Equal(t, settings.Disabled, applied.Disabled)
require.Equal(t, settings.Width, applied.Width)
require.Equal(t, settings.Height, applied.Height)
+1 -1
View File
@@ -523,7 +523,7 @@ type SubscribedTrack interface {
RTPSender() *webrtc.RTPSender
IsMuted() bool
SetPublisherMuted(muted bool)
UpdateSubscriberSettings(settings *livekit.UpdateTrackSettings)
UpdateSubscriberSettings(settings *livekit.UpdateTrackSettings, isImmediate bool)
// selects appropriate video layer according to subscriber preferences
UpdateVideoLayer()
NeedsNegotiation() bool
@@ -161,10 +161,11 @@ type FakeSubscribedTrack struct {
subscriberIdentityReturnsOnCall map[int]struct {
result1 livekit.ParticipantIdentity
}
UpdateSubscriberSettingsStub func(*livekit.UpdateTrackSettings)
UpdateSubscriberSettingsStub func(*livekit.UpdateTrackSettings, bool)
updateSubscriberSettingsMutex sync.RWMutex
updateSubscriberSettingsArgsForCall []struct {
arg1 *livekit.UpdateTrackSettings
arg2 bool
}
UpdateVideoLayerStub func()
updateVideoLayerMutex sync.RWMutex
@@ -991,16 +992,17 @@ func (fake *FakeSubscribedTrack) SubscriberIdentityReturnsOnCall(i int, result1
}{result1}
}
func (fake *FakeSubscribedTrack) UpdateSubscriberSettings(arg1 *livekit.UpdateTrackSettings) {
func (fake *FakeSubscribedTrack) UpdateSubscriberSettings(arg1 *livekit.UpdateTrackSettings, arg2 bool) {
fake.updateSubscriberSettingsMutex.Lock()
fake.updateSubscriberSettingsArgsForCall = append(fake.updateSubscriberSettingsArgsForCall, struct {
arg1 *livekit.UpdateTrackSettings
}{arg1})
arg2 bool
}{arg1, arg2})
stub := fake.UpdateSubscriberSettingsStub
fake.recordInvocation("UpdateSubscriberSettings", []interface{}{arg1})
fake.recordInvocation("UpdateSubscriberSettings", []interface{}{arg1, arg2})
fake.updateSubscriberSettingsMutex.Unlock()
if stub != nil {
fake.UpdateSubscriberSettingsStub(arg1)
fake.UpdateSubscriberSettingsStub(arg1, arg2)
}
}
@@ -1010,17 +1012,17 @@ func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsCallCount() int {
return len(fake.updateSubscriberSettingsArgsForCall)
}
func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsCalls(stub func(*livekit.UpdateTrackSettings)) {
func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsCalls(stub func(*livekit.UpdateTrackSettings, bool)) {
fake.updateSubscriberSettingsMutex.Lock()
defer fake.updateSubscriberSettingsMutex.Unlock()
fake.UpdateSubscriberSettingsStub = stub
}
func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsArgsForCall(i int) *livekit.UpdateTrackSettings {
func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsArgsForCall(i int) (*livekit.UpdateTrackSettings, bool) {
fake.updateSubscriberSettingsMutex.RLock()
defer fake.updateSubscriberSettingsMutex.RUnlock()
argsForCall := fake.updateSubscriberSettingsArgsForCall[i]
return argsForCall.arg1
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeSubscribedTrack) UpdateVideoLayer() {