From 9fc4ddbe47a1373e9768e28404029b250a159bd3 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Tue, 24 Jun 2025 16:27:14 -0700 Subject: [PATCH] ClearAllReceivers interface is used to pause relay tracks. (#3761) Restore interface. --- pkg/rtc/mediatrackreceiver.go | 4 +- pkg/rtc/types/interfaces.go | 1 + .../typesfakes/fake_local_media_track.go | 39 +++++++++++++++++++ pkg/rtc/types/typesfakes/fake_media_track.go | 39 +++++++++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/pkg/rtc/mediatrackreceiver.go b/pkg/rtc/mediatrackreceiver.go index e7efab68b..a63386af1 100644 --- a/pkg/rtc/mediatrackreceiver.go +++ b/pkg/rtc/mediatrackreceiver.go @@ -376,7 +376,7 @@ func (t *MediaTrackReceiver) ClearReceiver(mime mime.MimeType, isExpectedToResum t.removeAllSubscribersForMime(mime, isExpectedToResume) } -func (t *MediaTrackReceiver) clearAllReceivers(isExpectedToResume bool) { +func (t *MediaTrackReceiver) ClearAllReceivers(isExpectedToResume bool) { t.params.Logger.Debugw("clearing all receivers", "isExpectedToResume", isExpectedToResume) t.lock.Lock() receivers := t.receivers @@ -448,7 +448,7 @@ func (t *MediaTrackReceiver) TryClose() bool { } func (t *MediaTrackReceiver) Close(isExpectedToResume bool) { - t.clearAllReceivers(isExpectedToResume) + t.ClearAllReceivers(isExpectedToResume) t.lock.Lock() if t.state == mediaTrackReceiverStateClosed { diff --git a/pkg/rtc/types/interfaces.go b/pkg/rtc/types/interfaces.go index 7d88617f3..9d4a50e5e 100644 --- a/pkg/rtc/types/interfaces.go +++ b/pkg/rtc/types/interfaces.go @@ -574,6 +574,7 @@ type MediaTrack interface { GetTemporalLayerForSpatialFps(spatial int32, fps uint32, mime mime.MimeType) int32 Receivers() []sfu.TrackReceiver + ClearAllReceivers(isExpectedToResume bool) IsEncrypted() bool } diff --git a/pkg/rtc/types/typesfakes/fake_local_media_track.go b/pkg/rtc/types/typesfakes/fake_local_media_track.go index 14a452886..39d18da94 100644 --- a/pkg/rtc/types/typesfakes/fake_local_media_track.go +++ b/pkg/rtc/types/typesfakes/fake_local_media_track.go @@ -30,6 +30,11 @@ type FakeLocalMediaTrack struct { result1 types.SubscribedTrack result2 error } + ClearAllReceiversStub func(bool) + clearAllReceiversMutex sync.RWMutex + clearAllReceiversArgsForCall []struct { + arg1 bool + } ClearSubscriberNodesMaxQualityStub func() clearSubscriberNodesMaxQualityMutex sync.RWMutex clearSubscriberNodesMaxQualityArgsForCall []struct { @@ -462,6 +467,38 @@ func (fake *FakeLocalMediaTrack) AddSubscriberReturnsOnCall(i int, result1 types }{result1, result2} } +func (fake *FakeLocalMediaTrack) ClearAllReceivers(arg1 bool) { + fake.clearAllReceiversMutex.Lock() + fake.clearAllReceiversArgsForCall = append(fake.clearAllReceiversArgsForCall, struct { + arg1 bool + }{arg1}) + stub := fake.ClearAllReceiversStub + fake.recordInvocation("ClearAllReceivers", []interface{}{arg1}) + fake.clearAllReceiversMutex.Unlock() + if stub != nil { + fake.ClearAllReceiversStub(arg1) + } +} + +func (fake *FakeLocalMediaTrack) ClearAllReceiversCallCount() int { + fake.clearAllReceiversMutex.RLock() + defer fake.clearAllReceiversMutex.RUnlock() + return len(fake.clearAllReceiversArgsForCall) +} + +func (fake *FakeLocalMediaTrack) ClearAllReceiversCalls(stub func(bool)) { + fake.clearAllReceiversMutex.Lock() + defer fake.clearAllReceiversMutex.Unlock() + fake.ClearAllReceiversStub = stub +} + +func (fake *FakeLocalMediaTrack) ClearAllReceiversArgsForCall(i int) bool { + fake.clearAllReceiversMutex.RLock() + defer fake.clearAllReceiversMutex.RUnlock() + argsForCall := fake.clearAllReceiversArgsForCall[i] + return argsForCall.arg1 +} + func (fake *FakeLocalMediaTrack) ClearSubscriberNodesMaxQuality() { fake.clearSubscriberNodesMaxQualityMutex.Lock() fake.clearSubscriberNodesMaxQualityArgsForCall = append(fake.clearSubscriberNodesMaxQualityArgsForCall, struct { @@ -2269,6 +2306,8 @@ func (fake *FakeLocalMediaTrack) Invocations() map[string][][]interface{} { defer fake.addOnCloseMutex.RUnlock() fake.addSubscriberMutex.RLock() defer fake.addSubscriberMutex.RUnlock() + fake.clearAllReceiversMutex.RLock() + defer fake.clearAllReceiversMutex.RUnlock() fake.clearSubscriberNodesMaxQualityMutex.RLock() defer fake.clearSubscriberNodesMaxQualityMutex.RUnlock() fake.closeMutex.RLock() diff --git a/pkg/rtc/types/typesfakes/fake_media_track.go b/pkg/rtc/types/typesfakes/fake_media_track.go index 8b32f21a9..58415b3f2 100644 --- a/pkg/rtc/types/typesfakes/fake_media_track.go +++ b/pkg/rtc/types/typesfakes/fake_media_track.go @@ -30,6 +30,11 @@ type FakeMediaTrack struct { result1 types.SubscribedTrack result2 error } + ClearAllReceiversStub func(bool) + clearAllReceiversMutex sync.RWMutex + clearAllReceiversArgsForCall []struct { + arg1 bool + } CloseStub func(bool) closeMutex sync.RWMutex closeArgsForCall []struct { @@ -394,6 +399,38 @@ func (fake *FakeMediaTrack) AddSubscriberReturnsOnCall(i int, result1 types.Subs }{result1, result2} } +func (fake *FakeMediaTrack) ClearAllReceivers(arg1 bool) { + fake.clearAllReceiversMutex.Lock() + fake.clearAllReceiversArgsForCall = append(fake.clearAllReceiversArgsForCall, struct { + arg1 bool + }{arg1}) + stub := fake.ClearAllReceiversStub + fake.recordInvocation("ClearAllReceivers", []interface{}{arg1}) + fake.clearAllReceiversMutex.Unlock() + if stub != nil { + fake.ClearAllReceiversStub(arg1) + } +} + +func (fake *FakeMediaTrack) ClearAllReceiversCallCount() int { + fake.clearAllReceiversMutex.RLock() + defer fake.clearAllReceiversMutex.RUnlock() + return len(fake.clearAllReceiversArgsForCall) +} + +func (fake *FakeMediaTrack) ClearAllReceiversCalls(stub func(bool)) { + fake.clearAllReceiversMutex.Lock() + defer fake.clearAllReceiversMutex.Unlock() + fake.ClearAllReceiversStub = stub +} + +func (fake *FakeMediaTrack) ClearAllReceiversArgsForCall(i int) bool { + fake.clearAllReceiversMutex.RLock() + defer fake.clearAllReceiversMutex.RUnlock() + argsForCall := fake.clearAllReceiversArgsForCall[i] + return argsForCall.arg1 +} + func (fake *FakeMediaTrack) Close(arg1 bool) { fake.closeMutex.Lock() fake.closeArgsForCall = append(fake.closeArgsForCall, struct { @@ -1827,6 +1864,8 @@ func (fake *FakeMediaTrack) Invocations() map[string][][]interface{} { defer fake.addOnCloseMutex.RUnlock() fake.addSubscriberMutex.RLock() defer fake.addSubscriberMutex.RUnlock() + fake.clearAllReceiversMutex.RLock() + defer fake.clearAllReceiversMutex.RUnlock() fake.closeMutex.RLock() defer fake.closeMutex.RUnlock() fake.getAllSubscribersMutex.RLock()