MCPcopy
hub / github.com/livekit/livekit / addSubscriber

Method addSubscriber

pkg/rtc/subscriptionmanager.go:836–897  ·  view source on GitHub ↗
(sub *mediaTrackSubscription, track types.MediaTrack, isSync bool)

Source from the content-addressed store, hash-verified

834}
835
836func (m *SubscriptionManager) addSubscriber(sub *mediaTrackSubscription, track types.MediaTrack, isSync bool) error {
837 trackID := track.ID()
838 subTrack, err := track.AddSubscriber(m.params.Participant)
839 if err != nil && !errors.Is(err, errAlreadySubscribed) {
840 // ignore error(s): already subscribed
841 if !utils.ErrorIsOneOf(err, ErrNoReceiver) {
842 // as track resolution could take some time, not logging errors due to waiting for track resolution
843 m.params.Logger.Warnw("add subscriber failed", err, "trackID", trackID)
844 }
845 return err
846 }
847 if err == errAlreadySubscribed {
848 sub.logger.Debugw(
849 "already subscribed to track",
850 "subscribedAudioCount", m.subscribedAudioCount.Load(),
851 "subscribedVideoCount", m.subscribedVideoCount.Load(),
852 )
853 }
854 if err == nil && subTrack != nil { // subTrack could be nil if already subscribed
855 subTrack.OnClose(func(isExpectedToResume bool) {
856 m.handleSubscribedTrackClose(sub, isExpectedToResume)
857
858 if isSync {
859 m.lock.Lock()
860 delete(m.subscriptions, trackID)
861 m.lock.Unlock()
862 }
863 })
864 subTrack.AddOnBind(func(err error) {
865 if err != nil {
866 sub.logger.Infow("failed to bind track", "err", err)
867 sub.maybeRecordError(m.params.TelemetryListener, err, true)
868 m.UnsubscribeFromTrack(trackID)
869 m.params.OnSubscriptionError(trackID, false, err)
870 return
871 }
872 sub.setBound()
873 sub.maybeRecordSuccess(m.params.TelemetryListener)
874 })
875 sub.setSubscribedTrack(subTrack)
876
877 switch track.Kind() {
878 case livekit.TrackType_VIDEO:
879 m.subscribedVideoCount.Inc()
880 case livekit.TrackType_AUDIO:
881 m.subscribedAudioCount.Inc()
882 }
883
884 if !isSync && subTrack.NeedsNegotiation() {
885 m.params.Participant.Negotiate(false)
886 }
887
888 go m.params.OnTrackSubscribed(subTrack)
889
890 sub.logger.Debugw(
891 "subscribed to track",
892 "subscribedAudioCount", m.subscribedAudioCount.Load(),
893 "subscribedVideoCount", m.subscribedVideoCount.Load(),

Callers 2

subscribeMethod · 0.95
subscribeSynchronousMethod · 0.95

Calls 15

UnsubscribeFromTrackMethod · 0.95
maybeRecordErrorMethod · 0.80
setBoundMethod · 0.80
maybeRecordSuccessMethod · 0.80
setSubscribedTrackMethod · 0.80
IDMethod · 0.65
AddSubscriberMethod · 0.65
LoadMethod · 0.65
OnCloseMethod · 0.65
AddOnBindMethod · 0.65
KindMethod · 0.65

Tested by

no test coverage detected