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.PlaylistEventListener, HlsPlaylistTracker.PlaylistResetException, HlsPlaylistTracker.PlaylistStuckException, HlsPlaylistTracker.PrimaryPlaylistListener| Constructor and Description |
|---|
DefaultHlsPlaylistTracker(HlsDataSourceFactory dataSourceFactory,
int minRetryCount,
com.google.android.exoplayer2.upstream.ParsingLoadable.Parser<HlsPlaylist> playlistParser) |
| 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)
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) |
int |
onLoadError(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable,
long elapsedRealtimeMs,
long loadDurationMs,
java.io.IOException error) |
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 DefaultHlsPlaylistTracker(HlsDataSourceFactory dataSourceFactory, int minRetryCount, com.google.android.exoplayer2.upstream.ParsingLoadable.Parser<HlsPlaylist> playlistParser)
dataSourceFactory - A factory for DataSource instances.minRetryCount - The minimum number of times loads must be retried before #maybeThrowPlaylistRefreshError(HlsUrl) and maybeThrowPrimaryPlaylistRefreshError() propagate any loading errors.playlistParser - A ParsingLoadable.Parser for HLS playlists.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.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)
HlsPlaylistTrackerHlsMasterPlaylist.HlsUrl.getPlaylistSnapshot in interface HlsPlaylistTrackerurl - The HlsMasterPlaylist.HlsUrl corresponding to the requested media playlist.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 int onLoadError(com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs, long loadDurationMs, java.io.IOException error)
onLoadError in interface com.google.android.exoplayer2.upstream.Loader.Callback<com.google.android.exoplayer2.upstream.ParsingLoadable<HlsPlaylist>>