public final class DefaultHlsPlaylistTracker extends java.lang.Object implements HlsPlaylistTracker, com.google.android.exoplayer2.upstream.Loader.Callback<com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist>>
HlsPlaylistTracker.HlsPlaylistTracker.Factory, HlsPlaylistTracker.PlaylistEventListener, HlsPlaylistTracker.PlaylistResetException, HlsPlaylistTracker.PlaylistStuckException, HlsPlaylistTracker.PrimaryPlaylistListener| Modifier and Type | Field and Description |
|---|---|
static HlsPlaylistTracker.Factory |
FACTORY
Factory for
DefaultHlsPlaylistTracker instances. |
| Constructor and Description |
|---|
DefaultHlsPlaylistTracker(HlsDataSourceFactory dataSourceFactory,
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy loadErrorHandlingPolicy,
HlsPlaylistParserFactory playlistParserFactory) |
DefaultHlsPlaylistTracker(HlsDataSourceFactory dataSourceFactory,
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy loadErrorHandlingPolicy,
com.google.android.exoplayer2.upstream.ParsingLoadable.Parser<HlsPlaylist> playlistParser)
Deprecated.
Use
DefaultHlsPlaylistTracker(HlsDataSourceFactory,
LoadErrorHandlingPolicy, HlsPlaylistParserFactory) instead. Using this constructor
prevents support for attributes that are carried over from the master playlist to the media
playlists. |
| Modifier and Type | Method and Description |
|---|---|
void |
addListener(HlsPlaylistTracker.PlaylistEventListener listener)
Registers a listener to receive events from the playlist tracker.
|
long |
getInitialStartTimeUs()
Returns the start time of the first loaded primary playlist, or
C.TIME_UNSET if no
media playlist has been loaded. |
HlsMasterPlaylist |
getMasterPlaylist()
Returns the master playlist.
|
HlsMediaPlaylist |
getPlaylistSnapshot(HlsMasterPlaylist.HlsUrl url,
boolean isForPlayback)
Returns the most recent snapshot available of the playlist referenced by the provided
HlsMasterPlaylist.HlsUrl. |
boolean |
isLive()
Returns whether the tracked playlists describe a live stream.
|
boolean |
isSnapshotValid(HlsMasterPlaylist.HlsUrl url)
Returns whether the snapshot of the playlist referenced by the provided
HlsMasterPlaylist.HlsUrl is
valid, meaning all the segments referenced by the playlist are expected to be available. |
void |
maybeThrowPlaylistRefreshError(HlsMasterPlaylist.HlsUrl url)
If the playlist is having trouble refreshing the playlist referenced by the given
HlsMasterPlaylist.HlsUrl, this method throws the underlying error. |
void |
maybeThrowPrimaryPlaylistRefreshError()
If the tracker is having trouble refreshing the master playlist or the primary playlist, this
method throws the underlying error.
|
void |
onLoadCanceled(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable,
long elapsedRealtimeMs,
long loadDurationMs,
boolean released) |
void |
onLoadCompleted(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable,
long elapsedRealtimeMs,
long loadDurationMs) |
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction |
onLoadError(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable,
long elapsedRealtimeMs,
long loadDurationMs,
java.io.IOException error,
int errorCount) |
void |
refreshPlaylist(HlsMasterPlaylist.HlsUrl url)
Requests a playlist refresh and whitelists it.
|
void |
removeListener(HlsPlaylistTracker.PlaylistEventListener listener)
Unregisters a listener.
|
void |
start(android.net.Uri initialPlaylistUri,
com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher eventDispatcher,
HlsPlaylistTracker.PrimaryPlaylistListener primaryPlaylistListener)
Starts the playlist tracker.
|
void |
stop()
Stops the playlist tracker and releases any acquired resources.
|
public static final HlsPlaylistTracker.Factory FACTORY
DefaultHlsPlaylistTracker instances.@Deprecated public DefaultHlsPlaylistTracker(HlsDataSourceFactory dataSourceFactory, com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy loadErrorHandlingPolicy, com.google.android.exoplayer2.upstream.ParsingLoadable.Parser<HlsPlaylist> playlistParser)
DefaultHlsPlaylistTracker(HlsDataSourceFactory,
LoadErrorHandlingPolicy, HlsPlaylistParserFactory) instead. Using this constructor
prevents support for attributes that are carried over from the master playlist to the media
playlists.dataSourceFactory - A factory for DataSource instances.loadErrorHandlingPolicy - The LoadErrorHandlingPolicy.playlistParser - A ParsingLoadable.Parser for HLS playlists.public DefaultHlsPlaylistTracker(HlsDataSourceFactory dataSourceFactory, com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy loadErrorHandlingPolicy, HlsPlaylistParserFactory playlistParserFactory)
dataSourceFactory - A factory for DataSource instances.loadErrorHandlingPolicy - The LoadErrorHandlingPolicy.playlistParserFactory - An HlsPlaylistParserFactory.public void start(android.net.Uri initialPlaylistUri,
com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher eventDispatcher,
HlsPlaylistTracker.PrimaryPlaylistListener primaryPlaylistListener)
HlsPlaylistTrackerMust be called from the playback thread. A tracker may be restarted after a HlsPlaylistTracker.stop()
call.
start in interface HlsPlaylistTrackerinitialPlaylistUri - Uri of the HLS stream. Can point to a media playlist or a master
playlist.eventDispatcher - A dispatcher to notify of events.primaryPlaylistListener - A callback for the primary playlist change events.public void stop()
HlsPlaylistTrackerMust be called once per HlsPlaylistTracker.start(android.net.Uri, com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher, com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker.PrimaryPlaylistListener) call.
stop in interface HlsPlaylistTrackerpublic void addListener(HlsPlaylistTracker.PlaylistEventListener listener)
HlsPlaylistTrackeraddListener in interface HlsPlaylistTrackerlistener - The listener.public void removeListener(HlsPlaylistTracker.PlaylistEventListener listener)
HlsPlaylistTrackerremoveListener in interface HlsPlaylistTrackerlistener - The listener to unregister.@Nullable public HlsMasterPlaylist getMasterPlaylist()
HlsPlaylistTrackerIf the uri passed to HlsPlaylistTracker.start(android.net.Uri, com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher, com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker.PrimaryPlaylistListener) points to a media playlist, an HlsMasterPlaylist
with a single variant for said media playlist is returned.
getMasterPlaylist in interface HlsPlaylistTrackerpublic HlsMediaPlaylist getPlaylistSnapshot(HlsMasterPlaylist.HlsUrl url, boolean isForPlayback)
HlsPlaylistTrackerHlsMasterPlaylist.HlsUrl.getPlaylistSnapshot in interface HlsPlaylistTrackerurl - The HlsMasterPlaylist.HlsUrl corresponding to the requested media playlist.isForPlayback - Whether the caller might use the snapshot to request media segments for
playback. If true, the primary playlist may be updated to the one requested.HlsMasterPlaylist.HlsUrl. May
be null if no snapshot has been loaded yet.public long getInitialStartTimeUs()
HlsPlaylistTrackerC.TIME_UNSET if no
media playlist has been loaded.getInitialStartTimeUs in interface HlsPlaylistTrackerpublic boolean isSnapshotValid(HlsMasterPlaylist.HlsUrl url)
HlsPlaylistTrackerHlsMasterPlaylist.HlsUrl is
valid, meaning all the segments referenced by the playlist are expected to be available. If the
playlist is not valid then some of the segments may no longer be available.isSnapshotValid in interface HlsPlaylistTrackerurl - The HlsMasterPlaylist.HlsUrl.HlsMasterPlaylist.HlsUrl is
valid.public void maybeThrowPrimaryPlaylistRefreshError()
throws java.io.IOException
HlsPlaylistTrackermaybeThrowPrimaryPlaylistRefreshError in interface HlsPlaylistTrackerjava.io.IOException - The underlying error.public void maybeThrowPlaylistRefreshError(HlsMasterPlaylist.HlsUrl url) throws java.io.IOException
HlsPlaylistTrackerHlsMasterPlaylist.HlsUrl, this method throws the underlying error.maybeThrowPlaylistRefreshError in interface HlsPlaylistTrackerurl - The HlsMasterPlaylist.HlsUrl.java.io.IOException - The underyling error.public void refreshPlaylist(HlsMasterPlaylist.HlsUrl url)
HlsPlaylistTrackerThe playlist tracker may choose the delay the playlist refresh. The request is discarded if a refresh was already pending.
refreshPlaylist in interface HlsPlaylistTrackerurl - The HlsMasterPlaylist.HlsUrl of the playlist to be refreshed.public boolean isLive()
HlsPlaylistTrackerisLive in interface HlsPlaylistTrackerpublic void onLoadCompleted(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs)
onLoadCompleted in interface com.google.android.exoplayer2.upstream.Loader.Callback<com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist>>public void onLoadCanceled(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs, boolean released)
onLoadCanceled in interface com.google.android.exoplayer2.upstream.Loader.Callback<com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist>>public com.google.android.exoplayer2.upstream.Loader.LoadErrorAction onLoadError(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs, java.io.IOException error, int errorCount)
onLoadError in interface com.google.android.exoplayer2.upstream.Loader.Callback<com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist>>