diff --git a/pkg/rtc/subscriptionmanager.go b/pkg/rtc/subscriptionmanager.go index 381a3458c..d5e224a83 100644 --- a/pkg/rtc/subscriptionmanager.go +++ b/pkg/rtc/subscriptionmanager.go @@ -429,17 +429,21 @@ func (m *SubscriptionManager) subscribe(s *trackSubscription) error { // ignore already subscribed error return err } - subTrack.OnClose(func(willBeResumed bool) { - m.handleSubscribedTrackClose(s, willBeResumed) - }) - subTrack.AddOnBind(func() { - s.setBound() - s.maybeRecordSuccess(m.params.Telemetry, m.params.Participant.ID()) - }) - s.setSubscribedTrack(subTrack) + if err == nil && subTrack != nil { // subTrack could be nil if already subscribed + subTrack.OnClose(func(willBeResumed bool) { + m.handleSubscribedTrackClose(s, willBeResumed) + }) + subTrack.AddOnBind(func() { + s.setBound() + s.maybeRecordSuccess(m.params.Telemetry, m.params.Participant.ID()) + }) + s.setSubscribedTrack(subTrack) - if subTrack.NeedsNegotiation() { - m.params.Participant.Negotiate(false) + if subTrack.NeedsNegotiation() { + m.params.Participant.Negotiate(false) + } + + go m.params.OnTrackSubscribed(subTrack) } // add mark the participant as someone we've subscribed to @@ -456,8 +460,6 @@ func (m *SubscriptionManager) subscribe(s *trackSubscription) error { pTracks[s.trackID] = struct{}{} m.lock.Unlock() - go m.params.OnTrackSubscribed(subTrack) - if changedCB != nil && firstSubscribe { go changedCB(publisherID, true) }