(sub *mediaTrackSubscription, track types.MediaTrack, isSync bool)
| 834 | } |
| 835 | |
| 836 | func (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(), |
no test coverage detected