mirror of
https://github.com/livekit/livekit.git
synced 2026-03-31 08:55:39 +00:00
debounce track settings API to match client usage pattern
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package rtc
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/bep/debounce"
|
||||
"github.com/pion/ion-sfu/pkg/sfu"
|
||||
"github.com/pion/webrtc/v3"
|
||||
|
||||
@@ -8,15 +11,21 @@ import (
|
||||
"github.com/livekit/protocol/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
subscriptionDebounceInterval = 10 * time.Millisecond
|
||||
)
|
||||
|
||||
type SubscribedTrack struct {
|
||||
dt *sfu.DownTrack
|
||||
subMuted utils.AtomicFlag
|
||||
pubMuted utils.AtomicFlag
|
||||
dt *sfu.DownTrack
|
||||
subMuted utils.AtomicFlag
|
||||
pubMuted utils.AtomicFlag
|
||||
debouncer func(func())
|
||||
}
|
||||
|
||||
func NewSubscribedTrack(dt *sfu.DownTrack) *SubscribedTrack {
|
||||
return &SubscribedTrack{
|
||||
dt: dt,
|
||||
dt: dt,
|
||||
debouncer: debounce.New(subscriptionDebounceInterval),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,21 +42,19 @@ func (t *SubscribedTrack) IsMuted() bool {
|
||||
return t.subMuted.Get()
|
||||
}
|
||||
|
||||
// set subscriber mute preference
|
||||
func (t *SubscribedTrack) SetMuted(muted bool) {
|
||||
t.subMuted.TrySet(muted)
|
||||
t.updateDownTrackMute()
|
||||
}
|
||||
|
||||
func (t *SubscribedTrack) SetPublisherMuted(muted bool) {
|
||||
t.pubMuted.TrySet(muted)
|
||||
t.updateDownTrackMute()
|
||||
}
|
||||
|
||||
func (t *SubscribedTrack) SetVideoQuality(quality livekit.VideoQuality) {
|
||||
if t.dt.Kind() == webrtc.RTPCodecTypeVideo {
|
||||
t.dt.SwitchSpatialLayer(spatialLayerForQuality(quality), true)
|
||||
}
|
||||
func (t *SubscribedTrack) UpdateSubscriberSettings(enabled bool, quality livekit.VideoQuality) {
|
||||
t.debouncer(func() {
|
||||
t.subMuted.TrySet(!enabled)
|
||||
t.updateDownTrackMute()
|
||||
if enabled && t.dt.Kind() == webrtc.RTPCodecTypeVideo {
|
||||
_ = t.dt.SwitchSpatialLayer(spatialLayerForQuality(quality), true)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (t *SubscribedTrack) updateDownTrackMute() {
|
||||
|
||||
@@ -105,9 +105,8 @@ type SubscribedTrack interface {
|
||||
ID() string
|
||||
DownTrack() *sfu.DownTrack
|
||||
IsMuted() bool
|
||||
SetMuted(muted bool)
|
||||
SetVideoQuality(quality livekit.VideoQuality)
|
||||
SetPublisherMuted(muted bool)
|
||||
UpdateSubscriberSettings(enabled bool, quality livekit.VideoQuality)
|
||||
}
|
||||
|
||||
// interface for properties of webrtc.TrackRemote
|
||||
|
||||
@@ -40,20 +40,16 @@ type FakeSubscribedTrack struct {
|
||||
isMutedReturnsOnCall map[int]struct {
|
||||
result1 bool
|
||||
}
|
||||
SetMutedStub func(bool)
|
||||
setMutedMutex sync.RWMutex
|
||||
setMutedArgsForCall []struct {
|
||||
arg1 bool
|
||||
}
|
||||
SetPublisherMutedStub func(bool)
|
||||
setPublisherMutedMutex sync.RWMutex
|
||||
setPublisherMutedArgsForCall []struct {
|
||||
arg1 bool
|
||||
}
|
||||
SetVideoQualityStub func(livekit.VideoQuality)
|
||||
setVideoQualityMutex sync.RWMutex
|
||||
setVideoQualityArgsForCall []struct {
|
||||
arg1 livekit.VideoQuality
|
||||
UpdateSubscriberSettingsStub func(bool, livekit.VideoQuality)
|
||||
updateSubscriberSettingsMutex sync.RWMutex
|
||||
updateSubscriberSettingsArgsForCall []struct {
|
||||
arg1 bool
|
||||
arg2 livekit.VideoQuality
|
||||
}
|
||||
invocations map[string][][]interface{}
|
||||
invocationsMutex sync.RWMutex
|
||||
@@ -218,38 +214,6 @@ func (fake *FakeSubscribedTrack) IsMutedReturnsOnCall(i int, result1 bool) {
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetMuted(arg1 bool) {
|
||||
fake.setMutedMutex.Lock()
|
||||
fake.setMutedArgsForCall = append(fake.setMutedArgsForCall, struct {
|
||||
arg1 bool
|
||||
}{arg1})
|
||||
stub := fake.SetMutedStub
|
||||
fake.recordInvocation("SetMuted", []interface{}{arg1})
|
||||
fake.setMutedMutex.Unlock()
|
||||
if stub != nil {
|
||||
fake.SetMutedStub(arg1)
|
||||
}
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetMutedCallCount() int {
|
||||
fake.setMutedMutex.RLock()
|
||||
defer fake.setMutedMutex.RUnlock()
|
||||
return len(fake.setMutedArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetMutedCalls(stub func(bool)) {
|
||||
fake.setMutedMutex.Lock()
|
||||
defer fake.setMutedMutex.Unlock()
|
||||
fake.SetMutedStub = stub
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetMutedArgsForCall(i int) bool {
|
||||
fake.setMutedMutex.RLock()
|
||||
defer fake.setMutedMutex.RUnlock()
|
||||
argsForCall := fake.setMutedArgsForCall[i]
|
||||
return argsForCall.arg1
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetPublisherMuted(arg1 bool) {
|
||||
fake.setPublisherMutedMutex.Lock()
|
||||
fake.setPublisherMutedArgsForCall = append(fake.setPublisherMutedArgsForCall, struct {
|
||||
@@ -282,36 +246,37 @@ func (fake *FakeSubscribedTrack) SetPublisherMutedArgsForCall(i int) bool {
|
||||
return argsForCall.arg1
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetVideoQuality(arg1 livekit.VideoQuality) {
|
||||
fake.setVideoQualityMutex.Lock()
|
||||
fake.setVideoQualityArgsForCall = append(fake.setVideoQualityArgsForCall, struct {
|
||||
arg1 livekit.VideoQuality
|
||||
}{arg1})
|
||||
stub := fake.SetVideoQualityStub
|
||||
fake.recordInvocation("SetVideoQuality", []interface{}{arg1})
|
||||
fake.setVideoQualityMutex.Unlock()
|
||||
func (fake *FakeSubscribedTrack) UpdateSubscriberSettings(arg1 bool, arg2 livekit.VideoQuality) {
|
||||
fake.updateSubscriberSettingsMutex.Lock()
|
||||
fake.updateSubscriberSettingsArgsForCall = append(fake.updateSubscriberSettingsArgsForCall, struct {
|
||||
arg1 bool
|
||||
arg2 livekit.VideoQuality
|
||||
}{arg1, arg2})
|
||||
stub := fake.UpdateSubscriberSettingsStub
|
||||
fake.recordInvocation("UpdateSubscriberSettings", []interface{}{arg1, arg2})
|
||||
fake.updateSubscriberSettingsMutex.Unlock()
|
||||
if stub != nil {
|
||||
fake.SetVideoQualityStub(arg1)
|
||||
fake.UpdateSubscriberSettingsStub(arg1, arg2)
|
||||
}
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetVideoQualityCallCount() int {
|
||||
fake.setVideoQualityMutex.RLock()
|
||||
defer fake.setVideoQualityMutex.RUnlock()
|
||||
return len(fake.setVideoQualityArgsForCall)
|
||||
func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsCallCount() int {
|
||||
fake.updateSubscriberSettingsMutex.RLock()
|
||||
defer fake.updateSubscriberSettingsMutex.RUnlock()
|
||||
return len(fake.updateSubscriberSettingsArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetVideoQualityCalls(stub func(livekit.VideoQuality)) {
|
||||
fake.setVideoQualityMutex.Lock()
|
||||
defer fake.setVideoQualityMutex.Unlock()
|
||||
fake.SetVideoQualityStub = stub
|
||||
func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsCalls(stub func(bool, livekit.VideoQuality)) {
|
||||
fake.updateSubscriberSettingsMutex.Lock()
|
||||
defer fake.updateSubscriberSettingsMutex.Unlock()
|
||||
fake.UpdateSubscriberSettingsStub = stub
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) SetVideoQualityArgsForCall(i int) livekit.VideoQuality {
|
||||
fake.setVideoQualityMutex.RLock()
|
||||
defer fake.setVideoQualityMutex.RUnlock()
|
||||
argsForCall := fake.setVideoQualityArgsForCall[i]
|
||||
return argsForCall.arg1
|
||||
func (fake *FakeSubscribedTrack) UpdateSubscriberSettingsArgsForCall(i int) (bool, livekit.VideoQuality) {
|
||||
fake.updateSubscriberSettingsMutex.RLock()
|
||||
defer fake.updateSubscriberSettingsMutex.RUnlock()
|
||||
argsForCall := fake.updateSubscriberSettingsArgsForCall[i]
|
||||
return argsForCall.arg1, argsForCall.arg2
|
||||
}
|
||||
|
||||
func (fake *FakeSubscribedTrack) Invocations() map[string][][]interface{} {
|
||||
@@ -323,12 +288,10 @@ func (fake *FakeSubscribedTrack) Invocations() map[string][][]interface{} {
|
||||
defer fake.iDMutex.RUnlock()
|
||||
fake.isMutedMutex.RLock()
|
||||
defer fake.isMutedMutex.RUnlock()
|
||||
fake.setMutedMutex.RLock()
|
||||
defer fake.setMutedMutex.RUnlock()
|
||||
fake.setPublisherMutedMutex.RLock()
|
||||
defer fake.setPublisherMutedMutex.RUnlock()
|
||||
fake.setVideoQualityMutex.RLock()
|
||||
defer fake.setVideoQualityMutex.RUnlock()
|
||||
fake.updateSubscriberSettingsMutex.RLock()
|
||||
defer fake.updateSubscriberSettingsMutex.RUnlock()
|
||||
copiedInvocations := map[string][][]interface{}{}
|
||||
for key, value := range fake.invocations {
|
||||
copiedInvocations[key] = value
|
||||
|
||||
@@ -414,8 +414,7 @@ func (r *RoomManager) rtcSessionWorker(room *rtc.Room, participant types.Partici
|
||||
logger.Debugw("updating track settings",
|
||||
"participant", participant.Identity(),
|
||||
"settings", msg.TrackSetting)
|
||||
subTrack.SetMuted(msg.TrackSetting.Disabled)
|
||||
subTrack.SetVideoQuality(msg.TrackSetting.Quality)
|
||||
subTrack.UpdateSubscriberSettings(!msg.TrackSetting.Disabled, msg.TrackSetting.Quality)
|
||||
}
|
||||
}
|
||||
case *livekit.SignalRequest_Leave:
|
||||
|
||||
Reference in New Issue
Block a user