mirror of
https://github.com/livekit/livekit.git
synced 2026-08-28 09:24:08 +00:00
Fixes to sync state disabled tracks. (#2459)
* Fixes to sync state disabled tracks. * test
This commit is contained in:
+2
-23
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user