ConcatenatingMediaSource2
@UnstableApi
public final class ConcatenatingMediaSource2 extends CompositeMediaSource
| java.lang.Object | |||
| ↳ | androidx.media3.exoplayer.source.BaseMediaSource | ||
| ↳ | androidx.media3.exoplayer.source.CompositeMediaSource | ||
| ↳ | androidx.media3.exoplayer.source.ConcatenatingMediaSource2 |
Concatenates multiple MediaSources, combining everything in one single Timeline.Window.
This class can be used under the following conditions:
- All sources must be non-empty.
- The
period offsetin all windows (except for the first one) must not change during the lifetime of this media source. This excludes, for example, live streams with moving live windows or dynamic updates to the clipping start time of aClippingMediaSource.
Summary
Nested types |
|---|
public final class ConcatenatingMediaSource2.BuilderA builder for |
Public methods |
|
|---|---|
boolean |
canUpdateMediaItem(MediaItem mediaItem)Returns whether the |
MediaPeriod |
createPeriod(Returns a new |
@Nullable Timeline |
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. |
synchronized MediaItem |
Returns the |
void |
releasePeriod(MediaPeriod mediaPeriod)Releases the period. |
synchronized void |
updateMediaItem(MediaItem mediaItem)Updates the |
Protected methods |
|
|---|---|
void |
Enables the source, see |
@Nullable MediaSource.MediaPeriodId |
getMediaPeriodIdForChildMediaPeriodId(Returns the |
long |
getMediaTimeForChildMediaTime(Returns the media time in the |
int |
getWindowIndexForChildWindowIndex(Returns the window index in the composite source corresponding to the specified window index in a child source. |
void |
onChildSourceInfoRefreshed(Called when the source info of a child source has been refreshed. |
void |
prepareSourceInternal(@Nullable TransferListener mediaTransferListener)Starts source preparation and enables the source, see |
void |
Releases the source, see |
Inherited methods |
||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
Public methods
canUpdateMediaItem
public boolean canUpdateMediaItem(MediaItem mediaItem)
Returns whether the MediaItem for this source can be updated with the provided item.
Should not be called directly from application code.
This method must be called on the application thread.
| Returns | |
|---|---|
boolean |
Whether the source can be updated using this item. |
createPeriod
public MediaPeriod createPeriod(
MediaSource.MediaPeriodId id,
Allocator allocator,
long startPositionUs
)
Returns a new MediaPeriod identified by periodId.
Should not be called directly from application code.
This method must be called on the playback thread and only if the source is enabled.
| Parameters | |
|---|---|
MediaSource.MediaPeriodId id |
The identifier of the period. |
Allocator allocator |
An |
long startPositionUs |
The expected start position, in microseconds. |
| Returns | |
|---|---|
MediaPeriod |
A new |
getInitialTimeline
public @Nullable Timeline getInitialTimeline()
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.
Should not be called directly from application code.
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.
This method must be called on the application thread.
getMediaItem
synchronized public MediaItem getMediaItem()
Returns the MediaItem whose media is provided by the source.
Should not be called directly from application code.
This method must be called on the application thread.
releasePeriod
public void releasePeriod(MediaPeriod mediaPeriod)
Releases the period.
Should not be called directly from application code.
This method must be called on the playback thread.
| Parameters | |
|---|---|
MediaPeriod mediaPeriod |
The period to release. |
updateMediaItem
synchronized public void updateMediaItem(MediaItem mediaItem)
Updates the MediaItem for this source.
Should not be called directly from application code.
This method must be called on the playback thread and only if canUpdateMediaItem returns true for the new MediaItem.
Protected methods
getMediaPeriodIdForChildMediaPeriodId
protected @Nullable MediaSource.MediaPeriodId getMediaPeriodIdForChildMediaPeriodId(
Integer childSourceId,
MediaSource.MediaPeriodId mediaPeriodId
)
Returns the MediaPeriodId in the composite source corresponding to the specified MediaPeriodId in a child source. The default implementation does not change the media period id.
| Parameters | |
|---|---|
Integer childSourceId |
The unique id used to prepare the child source. |
MediaSource.MediaPeriodId mediaPeriodId |
A |
| Returns | |
|---|---|
@Nullable MediaSource.MediaPeriodId |
The corresponding |
getMediaTimeForChildMediaTime
protected long getMediaTimeForChildMediaTime(
Integer childSourceId,
long mediaTimeMs,
@Nullable MediaSource.MediaPeriodId mediaPeriodId
)
Returns the media time in the MediaPeriod of the composite source corresponding to the specified media time in the MediaPeriod of the child source. The default implementation does not change the media time.
| Parameters | |
|---|---|
Integer childSourceId |
The unique id used to prepare the child source. |
long mediaTimeMs |
A media time in the |
@Nullable MediaSource.MediaPeriodId mediaPeriodId |
The |
| Returns | |
|---|---|
long |
The corresponding media time in the |
getWindowIndexForChildWindowIndex
protected int getWindowIndexForChildWindowIndex(
Integer childSourceId,
int windowIndex
)
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.
| Parameters | |
|---|---|
Integer childSourceId |
The unique id used to prepare the child source. |
int windowIndex |
A window index of the child source. |
| Returns | |
|---|---|
int |
The corresponding window index in the composite source. |
onChildSourceInfoRefreshed
protected void onChildSourceInfoRefreshed(
Integer childSourceId,
MediaSource mediaSource,
Timeline newTimeline
)
Called when the source info of a child source has been refreshed.
| Parameters | |
|---|---|
Integer childSourceId |
The unique id used to prepare the child source. |
MediaSource mediaSource |
The child source whose source info has been refreshed. |
Timeline newTimeline |
The timeline of the child source. |
prepareSourceInternal
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener)
Starts source preparation and enables the source, see prepareSource. This method is called at most once until the next call to releaseSourceInternal.
This method is called on the playback thread.
| Parameters | |
|---|---|
@Nullable TransferListener mediaTransferListener |
The transfer listener which should be informed of any media data transfers. May be null if no listener is available. Note that this listener should usually be only informed of transfers related to the media loads and not of auxiliary loads for manifests and other data. |
releaseSourceInternal
protected void releaseSourceInternal()
Releases the source, see releaseSource. This method is called exactly once after each call to prepareSourceInternal.
This method is called on the playback thread.