Class ConcatenatingMediaSource

  • All Implemented Interfaces:
    MediaSource

    public final class ConcatenatingMediaSource
    extends CompositeMediaSource<com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder>
    Concatenates multiple MediaSources. The list of MediaSources can be modified during playback. It is valid for the same MediaSource instance to be present more than once in the concatenation. Access to this class is thread-safe.
    • Constructor Detail

      • ConcatenatingMediaSource

        public ConcatenatingMediaSource​(MediaSource... mediaSources)
        Parameters:
        mediaSources - The MediaSources to concatenate. It is valid for the same MediaSource instance to be present more than once in the array.
      • ConcatenatingMediaSource

        public ConcatenatingMediaSource​(boolean isAtomic,
                                        MediaSource... mediaSources)
        Parameters:
        isAtomic - Whether the concatenating media source will be treated as atomic, i.e., treated as a single item for repeating and shuffling.
        mediaSources - The MediaSources to concatenate. It is valid for the same MediaSource instance to be present more than once in the array.
      • ConcatenatingMediaSource

        public ConcatenatingMediaSource​(boolean isAtomic,
                                        ShuffleOrder shuffleOrder,
                                        MediaSource... mediaSources)
        Parameters:
        isAtomic - Whether the concatenating media source will be treated as atomic, i.e., treated as a single item for repeating and shuffling.
        shuffleOrder - The ShuffleOrder to use when shuffling the child media sources.
        mediaSources - The MediaSources to concatenate. It is valid for the same MediaSource instance to be present more than once in the array.
      • ConcatenatingMediaSource

        public ConcatenatingMediaSource​(boolean isAtomic,
                                        boolean useLazyPreparation,
                                        ShuffleOrder shuffleOrder,
                                        MediaSource... mediaSources)
        Parameters:
        isAtomic - Whether the concatenating media source will be treated as atomic, i.e., treated as a single item for repeating and shuffling.
        useLazyPreparation - Whether playlist items are prepared lazily. If false, all manifest loads and other initial preparation steps happen immediately. If true, these initial preparations are triggered only when the player starts buffering the media.
        shuffleOrder - The ShuffleOrder to use when shuffling the child media sources.
        mediaSources - The MediaSources to concatenate. It is valid for the same MediaSource instance to be present more than once in the array.
    • Method Detail

      • getInitialTimeline

        public Timeline getInitialTimeline()
        Description copied from interface: MediaSource
        Returns the initial placeholder timeline that is returned immediately when the real timeline is not yet known, or null to let the player create an initial timeline.

        The initial timeline must use the same uids for windows and periods that the real timeline will use. It also must provide windows which are marked as dynamic to indicate that the window is expected to change when the real timeline arrives.

        Any media source which has multiple windows should typically provide such an initial timeline to make sure the player reports the correct number of windows immediately.

      • isSingleWindow

        public boolean isSingleWindow()
        Description copied from interface: MediaSource
        Returns true if the media source is guaranteed to never have zero or more than one window.

        The default implementation returns true.

        Returns:
        true if the source has exactly one window.
      • addMediaSource

        public void addMediaSource​(MediaSource mediaSource)
        Appends a MediaSource to the playlist.
        Parameters:
        mediaSource - The MediaSource to be added to the list.
      • addMediaSource

        public void addMediaSource​(MediaSource mediaSource,
                                   Handler handler,
                                   Runnable onCompletionAction)
        Appends a MediaSource to the playlist and executes a custom action on completion.
        Parameters:
        mediaSource - The MediaSource to be added to the list.
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the media source has been added to the playlist.
      • addMediaSource

        public void addMediaSource​(int index,
                                   MediaSource mediaSource)
        Adds a MediaSource to the playlist.
        Parameters:
        index - The index at which the new MediaSource will be inserted. This index must be in the range of 0 <= index <= getSize().
        mediaSource - The MediaSource to be added to the list.
      • addMediaSource

        public void addMediaSource​(int index,
                                   MediaSource mediaSource,
                                   Handler handler,
                                   Runnable onCompletionAction)
        Adds a MediaSource to the playlist and executes a custom action on completion.
        Parameters:
        index - The index at which the new MediaSource will be inserted. This index must be in the range of 0 <= index <= getSize().
        mediaSource - The MediaSource to be added to the list.
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the media source has been added to the playlist.
      • addMediaSources

        public void addMediaSources​(Collection<MediaSource> mediaSources)
        Appends multiple MediaSources to the playlist.
        Parameters:
        mediaSources - A collection of MediaSources to be added to the list. The media sources are added in the order in which they appear in this collection.
      • addMediaSources

        public void addMediaSources​(Collection<MediaSource> mediaSources,
                                    Handler handler,
                                    Runnable onCompletionAction)
        Appends multiple MediaSources to the playlist and executes a custom action on completion.
        Parameters:
        mediaSources - A collection of MediaSources to be added to the list. The media sources are added in the order in which they appear in this collection.
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the media sources have been added to the playlist.
      • addMediaSources

        public void addMediaSources​(int index,
                                    Collection<MediaSource> mediaSources)
        Adds multiple MediaSources to the playlist.
        Parameters:
        index - The index at which the new MediaSources will be inserted. This index must be in the range of 0 <= index <= getSize().
        mediaSources - A collection of MediaSources to be added to the list. The media sources are added in the order in which they appear in this collection.
      • addMediaSources

        public void addMediaSources​(int index,
                                    Collection<MediaSource> mediaSources,
                                    Handler handler,
                                    Runnable onCompletionAction)
        Adds multiple MediaSources to the playlist and executes a custom action on completion.
        Parameters:
        index - The index at which the new MediaSources will be inserted. This index must be in the range of 0 <= index <= getSize().
        mediaSources - A collection of MediaSources to be added to the list. The media sources are added in the order in which they appear in this collection.
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the media sources have been added to the playlist.
      • removeMediaSource

        public MediaSource removeMediaSource​(int index)
        Removes a MediaSource from the playlist.

        Note: If you want to move the instance, it's preferable to use moveMediaSource(int, int) instead.

        Note: If you want to remove a set of contiguous sources, it's preferable to use removeMediaSourceRange(int, int) instead.

        Parameters:
        index - The index at which the media source will be removed. This index must be in the range of 0 <= index < getSize().
        Returns:
        The removed MediaSource.
      • removeMediaSourceRange

        public void removeMediaSourceRange​(int fromIndex,
                                           int toIndex)
        Removes a range of MediaSources from the playlist, by specifying an initial index (included) and a final index (excluded).

        Note: when specified range is empty, no actual media source is removed and no exception is thrown.

        Parameters:
        fromIndex - The initial range index, pointing to the first media source that will be removed. This index must be in the range of 0 <= index <= getSize().
        toIndex - The final range index, pointing to the first media source that will be left untouched. This index must be in the range of 0 <= index <= getSize().
        Throws:
        IndexOutOfBoundsException - When the range is malformed, i.e. fromIndex < 0, toIndex > getSize(), fromIndex > toIndex
      • removeMediaSourceRange

        public void removeMediaSourceRange​(int fromIndex,
                                           int toIndex,
                                           Handler handler,
                                           Runnable onCompletionAction)
        Removes a range of MediaSources from the playlist, by specifying an initial index (included) and a final index (excluded), and executes a custom action on completion.

        Note: when specified range is empty, no actual media source is removed and no exception is thrown.

        Parameters:
        fromIndex - The initial range index, pointing to the first media source that will be removed. This index must be in the range of 0 <= index <= getSize().
        toIndex - The final range index, pointing to the first media source that will be left untouched. This index must be in the range of 0 <= index <= getSize().
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the media source range has been removed from the playlist.
        Throws:
        IllegalArgumentException - When the range is malformed, i.e. fromIndex < 0, toIndex > getSize(), fromIndex > toIndex
      • moveMediaSource

        public void moveMediaSource​(int currentIndex,
                                    int newIndex)
        Moves an existing MediaSource within the playlist.
        Parameters:
        currentIndex - The current index of the media source in the playlist. This index must be in the range of 0 <= index < getSize().
        newIndex - The target index of the media source in the playlist. This index must be in the range of 0 <= index < getSize().
      • moveMediaSource

        public void moveMediaSource​(int currentIndex,
                                    int newIndex,
                                    Handler handler,
                                    Runnable onCompletionAction)
        Moves an existing MediaSource within the playlist and executes a custom action on completion.
        Parameters:
        currentIndex - The current index of the media source in the playlist. This index must be in the range of 0 <= index < getSize().
        newIndex - The target index of the media source in the playlist. This index must be in the range of 0 <= index < getSize().
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the media source has been moved.
      • clear

        public void clear()
        Clears the playlist.
      • clear

        public void clear​(Handler handler,
                          Runnable onCompletionAction)
        Clears the playlist and executes a custom action on completion.
        Parameters:
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the playlist has been cleared.
      • getSize

        public int getSize()
        Returns the number of media sources in the playlist.
      • getMediaSource

        public MediaSource getMediaSource​(int index)
        Returns the MediaSource at a specified index.
        Parameters:
        index - An index in the range of 0 <= index <= getSize().
        Returns:
        The MediaSource at this index.
      • setShuffleOrder

        public void setShuffleOrder​(ShuffleOrder shuffleOrder)
        Sets a new shuffle order to use when shuffling the child media sources.
        Parameters:
        shuffleOrder - A ShuffleOrder.
      • setShuffleOrder

        public void setShuffleOrder​(ShuffleOrder shuffleOrder,
                                    Handler handler,
                                    Runnable onCompletionAction)
        Sets a new shuffle order to use when shuffling the child media sources.
        Parameters:
        shuffleOrder - A ShuffleOrder.
        handler - The Handler to run onCompletionAction.
        onCompletionAction - A Runnable which is executed immediately after the shuffle order has been changed.
      • getMediaItem

        public MediaItem getMediaItem()
        Description copied from interface: MediaSource
        Returns the MediaItem whose media is provided by the source.
      • createPeriod

        public MediaPeriod createPeriod​(MediaSource.MediaPeriodId id,
                                        Allocator allocator,
                                        long startPositionUs)
        Description copied from interface: MediaSource
        Returns a new MediaPeriod identified by periodId.

        Should not be called directly from application code.

        Must only be called if the source is enabled.

        Parameters:
        id - The identifier of the period.
        allocator - An Allocator from which to obtain media buffer allocations.
        startPositionUs - The expected start position, in microseconds.
        Returns:
        A new MediaPeriod.
      • releasePeriod

        public void releasePeriod​(MediaPeriod mediaPeriod)
        Description copied from interface: MediaSource
        Releases the period.

        Should not be called directly from application code.

        Parameters:
        mediaPeriod - The period to release.
      • onChildSourceInfoRefreshed

        protected void onChildSourceInfoRefreshed​(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder mediaSourceHolder,
                                                  MediaSource mediaSource,
                                                  Timeline timeline)
        Description copied from class: CompositeMediaSource
        Called when the source info of a child source has been refreshed.
        Specified by:
        onChildSourceInfoRefreshed in class CompositeMediaSource<com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder>
        Parameters:
        mediaSourceHolder - The unique id used to prepare the child source.
        mediaSource - The child source whose source info has been refreshed.
        timeline - The timeline of the child source.
      • getWindowIndexForChildWindowIndex

        protected int getWindowIndexForChildWindowIndex​(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder mediaSourceHolder,
                                                        int windowIndex)
        Description copied from class: CompositeMediaSource
        Returns the window index in the composite source corresponding to the specified window index in a child source. The default implementation does not change the window index.
        Overrides:
        getWindowIndexForChildWindowIndex in class CompositeMediaSource<com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder>
        Parameters:
        mediaSourceHolder - The unique id used to prepare the child source.
        windowIndex - A window index of the child source.
        Returns:
        The corresponding window index in the composite source.