Timeline
public abstract class Timeline
AbstractConcatenatedTimeline |
Abstract base class for the concatenation of one or more |
FakeMultiPeriodLiveTimeline |
A fake |
FakeTimeline |
Fake |
ForwardingTimeline |
An overridable |
MaskingMediaSource.PlaceholderTimeline |
A timeline with one dynamic window with a period of indeterminate duration. |
SinglePeriodTimeline |
A |
Timeline.RemotableTimeline |
A concrete class of |
FakeMediaSource.InitialTimeline |
A forwarding timeline to provide an initial timeline for fake multi window sources. |
SinglePeriodAdTimeline |
A |
TimelineWithUpdatedMediaItem |
A flexible representation of the structure of media. A timeline is able to represent the structure of a wide variety of media, from simple cases like a single media file through to complex compositions of media such as playlists and streams with inserted ads. Instances are immutable. For cases where media is changing dynamically (e.g. live streams), a timeline provides a snapshot of the current state.
A timeline consists of Windows and Periods.
- A
Windowusually corresponds to one playlist item. It may span one or more periods and it defines the region within those periods that's currently available for playback. The window also provides additional information such as whether seeking is supported within the window and the default position, which is the position from which playback will start when the player starts playing the window. - A
Perioddefines a single logical piece of media, for example a media file. It may also define groups of ads inserted into the media, along with information about whether those ads have been loaded and played.
The following examples illustrate timelines for various use cases.
Single media file or on-demand stream
A timeline for a single media file or on-demand stream consists of a single period and window. The window spans the whole period, indicating that all parts of the media are available for playback. The window's default position is typically at the start of the period (indicated by the black dot in the figure above).
Playlist of media files or on-demand streams
A timeline for a playlist of media files or on-demand streams consists of multiple periods, each with its own window. Each window spans the whole of the corresponding period, and typically has a default position at the start of the period. The properties of the periods and windows (e.g. their durations and whether the window is seekable) will often only become known when the player starts buffering the corresponding file or stream.
Live stream with limited availability
A timeline for a live stream consists of a period whose duration is unknown, since it's continually extending as more content is broadcast. If content only remains available for a limited period of time then the window may start at a non-zero position, defining the region of content that can still be played. The window will return true from isLive to indicate it's a live stream and isDynamic will be set to true as long as we expect changes to the live window. Its default position is typically near to the live edge (indicated by the black dot in the figure above).
Live stream with indefinite availability
A timeline for a live stream with indefinite availability is similar to the Live stream with limited availability case, except that the window starts at the beginning of the period to indicate that all of the previously broadcast content can still be played.
Live stream with multiple periods
This case arises when a live stream is explicitly divided into separate periods, for example at content boundaries. This case is similar to the Live stream with limited availability case, except that the window may span more than one period. Multiple periods are also possible in the indefinite availability case.
On-demand stream followed by live stream
This case is the concatenation of the Single media file or on-demand stream and Live stream with multiple periods cases. When playback of the on-demand stream ends, playback of the live stream will start from its default position near the live edge.
On-demand stream with mid-roll ads
This case includes mid-roll ad groups, which are defined as part of the timeline's single period. The period can be queried for information about the ad groups and the ads they contain.
Summary
Nested types |
|---|
public final class Timeline.PeriodHolds information about a period in a |
@UnstableApiA concrete class of |
public final class Timeline.WindowHolds information about a window in a |
Protected constructors |
|---|
Public methods |
|
|---|---|
final Timeline |
@UnstableApiReturns a copy of this timeline containing just the single specified |
boolean |
|
static Timeline |
@UnstableApiRestores a |
int |
getFirstWindowIndex(boolean shuffleModeEnabled)Returns the index of the first window in the playback order depending on whether shuffling is enabled. |
abstract int |
getIndexOfPeriod(Object uid)Returns the index of the period identified by its unique |
int |
getLastWindowIndex(boolean shuffleModeEnabled)Returns the index of the last window in the playback order depending on whether shuffling is enabled. |
final int |
getNextPeriodIndex(Returns the index of the period after the period at index |
int |
getNextWindowIndex(Returns the index of the window after the window at index |
final Timeline.Period |
getPeriod(int periodIndex, Timeline.Period period)Populates a |
abstract Timeline.Period |
getPeriod(int periodIndex, Timeline.Period period, boolean setIds)Populates a |
Timeline.Period |
getPeriodByUid(Object periodUid, Timeline.Period period)Populates a |
abstract int |
Returns the number of periods in the timeline. |
final Pair<Object, Long> |
@UnstableApiThis method is deprecated. Use |
final @Nullable Pair<Object, Long> |
@UnstableApiThis method is deprecated. Use |
final Pair<Object, Long> |
getPeriodPositionUs(Calls |
final @Nullable Pair<Object, Long> |
getPeriodPositionUs(Converts |
int |
getPreviousWindowIndex(Returns the index of the window before the window at index |
abstract Object |
getUidOfPeriod(int periodIndex)Returns the unique id of the period identified by its index in the timeline. |
final Timeline.Window |
getWindow(int windowIndex, Timeline.Window window)Populates a |
abstract Timeline.Window |
getWindow(Populates a |
abstract int |
Returns the number of windows in the timeline. |
int |
hashCode() |
final boolean |
isEmpty()Returns whether the timeline is empty. |
final boolean |
isLastPeriod(Returns whether the given period is the last period of the timeline depending on the |
final Bundle |
Returns a |
Protected constructors
Public methods
copyWithSingleWindow
@UnstableApi
public final Timeline copyWithSingleWindow(int windowIndex)
Returns a copy of this timeline containing just the single specified Window.
The method returns the same instance if there is only one window.
| Parameters | |
|---|---|
int windowIndex |
The index of the |
fromBundle
@UnstableApi
public static Timeline fromBundle(Bundle bundle)
Restores a Timeline from a Bundle.
getFirstWindowIndex
public int getFirstWindowIndex(boolean shuffleModeEnabled)
Returns the index of the first window in the playback order depending on whether shuffling is enabled.
| Parameters | |
|---|---|
boolean shuffleModeEnabled |
Whether shuffling is enabled. |
| Returns | |
|---|---|
int |
The index of the first window in the playback order, or |
getIndexOfPeriod
public abstract int getIndexOfPeriod(Object uid)
Returns the index of the period identified by its unique uid, or INDEX_UNSET if the period is not in the timeline.
| Parameters | |
|---|---|
Object uid |
A unique identifier for a period. |
| Returns | |
|---|---|
int |
The index of the period, or |
getLastWindowIndex
public int getLastWindowIndex(boolean shuffleModeEnabled)
Returns the index of the last window in the playback order depending on whether shuffling is enabled.
| Parameters | |
|---|---|
boolean shuffleModeEnabled |
Whether shuffling is enabled. |
| Returns | |
|---|---|
int |
The index of the last window in the playback order, or |
getNextPeriodIndex
public final int getNextPeriodIndex(
int periodIndex,
Timeline.Period period,
Timeline.Window window,
@Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)
Returns the index of the period after the period at index periodIndex depending on the repeatMode and whether shuffling is enabled.
| Parameters | |
|---|---|
int periodIndex |
Index of a period in the timeline. |
Timeline.Period period |
A |
Timeline.Window window |
A |
@Player.RepeatMode int repeatMode |
A repeat mode. |
boolean shuffleModeEnabled |
Whether shuffling is enabled. |
| Returns | |
|---|---|
int |
The index of the next period, or |
getNextWindowIndex
public int getNextWindowIndex(
int windowIndex,
@Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)
Returns the index of the window after the window at index windowIndex depending on the repeatMode and whether shuffling is enabled.
| Parameters | |
|---|---|
int windowIndex |
Index of a window in the timeline. |
@Player.RepeatMode int repeatMode |
A repeat mode. |
boolean shuffleModeEnabled |
Whether shuffling is enabled. |
| Returns | |
|---|---|
int |
The index of the next window, or |
getPeriod
public final Timeline.Period getPeriod(int periodIndex, Timeline.Period period)
Populates a Period with data for the period at the specified index. id and uid will be set to null.
| Parameters | |
|---|---|
int periodIndex |
The index of the period. |
Timeline.Period period |
The |
| Returns | |
|---|---|
Timeline.Period |
The populated |
getPeriod
public abstract Timeline.Period getPeriod(int periodIndex, Timeline.Period period, boolean setIds)
Populates a Period with data for the period at the specified index.
| Parameters | |
|---|---|
int periodIndex |
The index of the period. |
Timeline.Period period |
The |
boolean setIds |
Whether |
| Returns | |
|---|---|
Timeline.Period |
The populated |
getPeriodByUid
public Timeline.Period getPeriodByUid(Object periodUid, Timeline.Period period)
Populates a Period with data for the period with the specified unique identifier.
| Parameters | |
|---|---|
Object periodUid |
The unique identifier of the period. |
Timeline.Period period |
The |
| Returns | |
|---|---|
Timeline.Period |
The populated |
getPeriodPosition
@UnstableApi
@InlineMe(replacement = "this.getPeriodPositionUs(window, period, windowIndex, windowPositionUs)")
public final Pair<Object, Long>getPeriodPosition(
Timeline.Window window,
Timeline.Period period,
int windowIndex,
long windowPositionUs
)
getPeriodPosition
@UnstableApi
@InlineMe(replacement = "this.getPeriodPositionUs(" + "window, period, windowIndex, windowPositionUs, defaultPositionProjectionUs)")
public final @Nullable Pair<Object, Long>getPeriodPosition(
Timeline.Window window,
Timeline.Period period,
int windowIndex,
long windowPositionUs,
long defaultPositionProjectionUs
)
getPeriodPositionUs
public final Pair<Object, Long> getPeriodPositionUs(
Timeline.Window window,
Timeline.Period period,
int windowIndex,
long windowPositionUs
)
Calls getPeriodPositionUs with a zero default position projection.
getPeriodPositionUs
public final @Nullable Pair<Object, Long> getPeriodPositionUs(
Timeline.Window window,
Timeline.Period period,
int windowIndex,
long windowPositionUs,
long defaultPositionProjectionUs
)
Converts (windowIndex, windowPositionUs) to the corresponding (periodUid,
periodPositionUs). The returned periodPositionUs is constrained to be non-negative, and to be less than the containing period's duration if it is known.
| Parameters | |
|---|---|
Timeline.Window window |
A |
Timeline.Period period |
A |
int windowIndex |
The window index. |
long windowPositionUs |
The window time, or |
long defaultPositionProjectionUs |
If |
| Returns | |
|---|---|
@Nullable Pair<Object, Long> |
The corresponding (periodUid, periodPositionUs), or null if |
getPreviousWindowIndex
public int getPreviousWindowIndex(
int windowIndex,
@Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)
Returns the index of the window before the window at index windowIndex depending on the repeatMode and whether shuffling is enabled.
| Parameters | |
|---|---|
int windowIndex |
Index of a window in the timeline. |
@Player.RepeatMode int repeatMode |
A repeat mode. |
boolean shuffleModeEnabled |
Whether shuffling is enabled. |
| Returns | |
|---|---|
int |
The index of the previous window, or |
getUidOfPeriod
public abstract Object getUidOfPeriod(int periodIndex)
Returns the unique id of the period identified by its index in the timeline.
| Parameters | |
|---|---|
int periodIndex |
The index of the period. |
| Returns | |
|---|---|
Object |
The unique id of the period. |
getWindow
public final Timeline.Window getWindow(int windowIndex, Timeline.Window window)
Populates a Window with data for the window at the specified index.
| Parameters | |
|---|---|
int windowIndex |
The index of the window. |
Timeline.Window window |
The |
| Returns | |
|---|---|
Timeline.Window |
The populated |
getWindow
public abstract Timeline.Window getWindow(
int windowIndex,
Timeline.Window window,
long defaultPositionProjectionUs
)
Populates a Window with data for the window at the specified index.
| Parameters | |
|---|---|
int windowIndex |
The index of the window. |
Timeline.Window window |
The |
long defaultPositionProjectionUs |
A duration into the future that the populated window's default start position should be projected. |
| Returns | |
|---|---|
Timeline.Window |
The populated |
isLastPeriod
public final boolean isLastPeriod(
int periodIndex,
Timeline.Period period,
Timeline.Window window,
@Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)
Returns whether the given period is the last period of the timeline depending on the
repeatMode and whether shuffling is enabled.
| Parameters | |
|---|---|
int periodIndex |
A period index. |
Timeline.Period period |
A |
Timeline.Window window |
A |
@Player.RepeatMode int repeatMode |
A repeat mode. |
boolean shuffleModeEnabled |
Whether shuffling is enabled. |
| Returns | |
|---|---|
boolean |
Whether the period of the given index is the last period of the timeline. |
toBundle
@UnstableApi
public final Bundle toBundle()
Returns a Bundle representing the information stored in this object.
The getWindow windows} and periods of an instance restored by fromBundle may have missing fields as described in toBundle and toBundle.