From 1825ea81f00d21434ac5e163ef8a57c99a91ccbc Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 30 Jan 2025 08:48:52 -0800 Subject: [PATCH] fire TrackSubscribed event only when subscriber is visible (#3378) TrackSubscribed is meant to give publishers an indication when the subscriber is ready to receive its audio. When there are hidden recorders in the room, we do not want them to trigger this event. --- pkg/rtc/mediatrack.go | 2 ++ pkg/rtc/mediatracksubscriptions.go | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/rtc/mediatrack.go b/pkg/rtc/mediatrack.go index 9adb21041..78bc3ee35 100644 --- a/pkg/rtc/mediatrack.go +++ b/pkg/rtc/mediatrack.go @@ -434,6 +434,8 @@ func (t *MediaTrack) SetMuted(muted bool) { t.MediaTrackReceiver.SetMuted(muted) } +// OnTrackSubscribed is called when the track is subscribed by a non-hidden subscriber +// this allows the publisher to know when they should start sending data func (t *MediaTrack) OnTrackSubscribed() { if !t.everSubscribed.Swap(true) && t.params.OnTrackEverSubscribed != nil { go t.params.OnTrackEverSubscribed(t.ID()) diff --git a/pkg/rtc/mediatracksubscriptions.go b/pkg/rtc/mediatracksubscriptions.go index dd5a65942..1933f69e4 100644 --- a/pkg/rtc/mediatracksubscriptions.go +++ b/pkg/rtc/mediatracksubscriptions.go @@ -162,11 +162,13 @@ func (t *MediaTrackSubscriptions) AddSubscriber(sub types.LocalParticipant, wr * AdaptiveStream: sub.GetAdaptiveStream(), }) - subTrack.AddOnBind(func(err error) { - if err == nil { - t.params.MediaTrack.OnTrackSubscribed() - } - }) + if !sub.Hidden() { + subTrack.AddOnBind(func(err error) { + if err == nil { + t.params.MediaTrack.OnTrackSubscribed() + } + }) + } // Bind callback can happen from replaceTrack, so set it up early var reusingTransceiver atomic.Bool