AbstractConcatenatedTimeline
, FakeTimeline
, ForwardingTimeline
, MaskingMediaSource.PlaceholderTimeline
, SinglePeriodTimeline
public abstract class Timeline extends Object
A timeline consists of Windows
and Periods
.
Timeline.Window
usually 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.
Timeline.Period
defines 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.
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).
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.
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 Timeline.Window.isLive()
to
indicate it's a live stream and Timeline.Window.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).
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.
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.
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.
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.
Modifier and Type | Class | Description |
---|---|---|
static class |
Timeline.Period |
Holds information about a period in a
Timeline . |
static class |
Timeline.Window |
Holds information about a window in a
Timeline . |
Constructor | Description |
---|---|
Timeline() |
Modifier and Type | Method | Description |
---|---|---|
boolean |
equals(Object obj) |
|
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
Timeline.Period.uid , or C.INDEX_UNSET if the period is not in the timeline. |
int |
getLastWindowIndex(boolean shuffleModeEnabled) |
Returns the index of the last window in the playback order depending on whether shuffling is
enabled.
|
int |
getNextPeriodIndex(int periodIndex,
Timeline.Period period,
Timeline.Window window,
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. |
int |
getNextWindowIndex(int windowIndex,
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. |
Timeline.Period |
getPeriod(int periodIndex,
Timeline.Period period) |
Populates a
Timeline.Period with data for the period at the specified index. |
abstract Timeline.Period |
getPeriod(int periodIndex,
Timeline.Period period,
boolean setIds) |
Populates a
Timeline.Period with data for the period at the specified index. |
Timeline.Period |
getPeriodByUid(Object periodUid,
Timeline.Period period) |
Populates a
Timeline.Period with data for the period with the specified unique identifier. |
abstract int |
getPeriodCount() |
Returns the number of periods in the timeline.
|
Pair<Object,Long> |
getPeriodPosition(Timeline.Window window,
Timeline.Period period,
int windowIndex,
long windowPositionUs) |
Calls
getPeriodPosition(Window, Period, int, long, long) with a zero default position
projection. |
Pair<Object,Long> |
getPeriodPosition(Timeline.Window window,
Timeline.Period period,
int windowIndex,
long windowPositionUs,
long defaultPositionProjectionUs) |
Converts (windowIndex, windowPositionUs) to the corresponding (periodUid, periodPositionUs).
|
int |
getPreviousWindowIndex(int windowIndex,
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. |
abstract Object |
getUidOfPeriod(int periodIndex) |
Returns the unique id of the period identified by its index in the timeline.
|
Timeline.Window |
getWindow(int windowIndex,
Timeline.Window window) |
Populates a
Timeline.Window with data for the window at the specified index. |
Timeline.Window |
getWindow(int windowIndex,
Timeline.Window window,
boolean setTag) |
Deprecated.
Use
getWindow(int, Window) instead. |
abstract Timeline.Window |
getWindow(int windowIndex,
Timeline.Window window,
long defaultPositionProjectionUs) |
Populates a
Timeline.Window with data for the window at the specified index. |
abstract int |
getWindowCount() |
Returns the number of windows in the timeline.
|
int |
hashCode() |
|
boolean |
isEmpty() |
Returns whether the timeline is empty.
|
boolean |
isLastPeriod(int periodIndex,
Timeline.Period period,
Timeline.Window window,
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. |
public static final Timeline EMPTY
public final boolean isEmpty()
public abstract int getWindowCount()
public int getNextWindowIndex(int windowIndex, @RepeatMode int repeatMode, boolean shuffleModeEnabled)
windowIndex
depending on the
repeatMode
and whether shuffling is enabled.windowIndex
- Index of a window in the timeline.repeatMode
- A repeat mode.shuffleModeEnabled
- Whether shuffling is enabled.C.INDEX_UNSET
if this is the last window.public int getPreviousWindowIndex(int windowIndex, @RepeatMode int repeatMode, boolean shuffleModeEnabled)
windowIndex
depending on the
repeatMode
and whether shuffling is enabled.windowIndex
- Index of a window in the timeline.repeatMode
- A repeat mode.shuffleModeEnabled
- Whether shuffling is enabled.C.INDEX_UNSET
if this is the first window.public int getLastWindowIndex(boolean shuffleModeEnabled)
shuffleModeEnabled
- Whether shuffling is enabled.C.INDEX_UNSET
if the
timeline is empty.public int getFirstWindowIndex(boolean shuffleModeEnabled)
shuffleModeEnabled
- Whether shuffling is enabled.C.INDEX_UNSET
if the
timeline is empty.public final Timeline.Window getWindow(int windowIndex, Timeline.Window window)
Timeline.Window
with data for the window at the specified index.windowIndex
- The index of the window.window
- The Timeline.Window
to populate. Must not be null.Timeline.Window
, for convenience.@Deprecated public final Timeline.Window getWindow(int windowIndex, Timeline.Window window, boolean setTag)
getWindow(int, Window)
instead. Tags will always be set.public abstract Timeline.Window getWindow(int windowIndex, Timeline.Window window, long defaultPositionProjectionUs)
Timeline.Window
with data for the window at the specified index.windowIndex
- The index of the window.window
- The Timeline.Window
to populate. Must not be null.defaultPositionProjectionUs
- A duration into the future that the populated window's
default start position should be projected.Timeline.Window
, for convenience.public abstract int getPeriodCount()
public final int getNextPeriodIndex(int periodIndex, Timeline.Period period, Timeline.Window window, @RepeatMode int repeatMode, boolean shuffleModeEnabled)
periodIndex
depending on the
repeatMode
and whether shuffling is enabled.periodIndex
- Index of a period in the timeline.period
- A Timeline.Period
to be used internally. Must not be null.window
- A Timeline.Window
to be used internally. Must not be null.repeatMode
- A repeat mode.shuffleModeEnabled
- Whether shuffling is enabled.C.INDEX_UNSET
if this is the last period.public final boolean isLastPeriod(int periodIndex, Timeline.Period period, Timeline.Window window, @RepeatMode int repeatMode, boolean shuffleModeEnabled)
repeatMode
and whether shuffling is enabled.periodIndex
- A period index.period
- A Timeline.Period
to be used internally. Must not be null.window
- A Timeline.Window
to be used internally. Must not be null.repeatMode
- A repeat mode.shuffleModeEnabled
- Whether shuffling is enabled.public final Pair<Object,Long> getPeriodPosition(Timeline.Window window, Timeline.Period period, int windowIndex, long windowPositionUs)
getPeriodPosition(Window, Period, int, long, long)
with a zero default position
projection.@Nullable public final Pair<Object,Long> getPeriodPosition(Timeline.Window window, Timeline.Period period, int windowIndex, long windowPositionUs, long defaultPositionProjectionUs)
window
- A Timeline.Window
that may be overwritten.period
- A Timeline.Period
that may be overwritten.windowIndex
- The window index.windowPositionUs
- The window time, or C.TIME_UNSET
to use the window's default
start position.defaultPositionProjectionUs
- If windowPositionUs
is C.TIME_UNSET
, the
duration into the future by which the window's position should be projected.#windowPositionUs
is C.TIME_UNSET
, defaultPositionProjectionUs
is non-zero, and the window's
position could not be projected by defaultPositionProjectionUs
.public Timeline.Period getPeriodByUid(Object periodUid, Timeline.Period period)
Timeline.Period
with data for the period with the specified unique identifier.periodUid
- The unique identifier of the period.period
- The Timeline.Period
to populate. Must not be null.Timeline.Period
, for convenience.public final Timeline.Period getPeriod(int periodIndex, Timeline.Period period)
Timeline.Period
with data for the period at the specified index. Timeline.Period.id
and Timeline.Period.uid
will be set to null.periodIndex
- The index of the period.period
- The Timeline.Period
to populate. Must not be null.Timeline.Period
, for convenience.public abstract Timeline.Period getPeriod(int periodIndex, Timeline.Period period, boolean setIds)
Timeline.Period
with data for the period at the specified index.periodIndex
- The index of the period.period
- The Timeline.Period
to populate. Must not be null.setIds
- Whether Timeline.Period.id
and Timeline.Period.uid
should be populated. If false,
the fields will be set to null. The caller should pass false for efficiency reasons unless
the fields are required.Timeline.Period
, for convenience.public abstract int getIndexOfPeriod(Object uid)
Timeline.Period.uid
, or C.INDEX_UNSET
if the period is not in the timeline.uid
- A unique identifier for a period.C.INDEX_UNSET
if the period was not found.public abstract Object getUidOfPeriod(int periodIndex)
periodIndex
- The index of the period.