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