Clean up HlsPlaylistTracker

This commit is contained in:
Oliver Woodman 2017-09-26 17:06:36 +01:00
parent 8ee6da1fe9
commit 792f046c02

View File

@ -200,7 +200,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
*/ */
public HlsMediaPlaylist getPlaylistSnapshot(HlsUrl url) { public HlsMediaPlaylist getPlaylistSnapshot(HlsUrl url) {
HlsMediaPlaylist snapshot = playlistBundles.get(url).getPlaylistSnapshot(); HlsMediaPlaylist snapshot = playlistBundles.get(url).getPlaylistSnapshot();
if (url != primaryHlsUrl && snapshot != null) { if (snapshot != null) {
maybeSetPrimaryUrl(url); maybeSetPrimaryUrl(url);
} }
return snapshot; return snapshot;
@ -338,23 +338,22 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
} }
private void maybeSetPrimaryUrl(HlsUrl url) { private void maybeSetPrimaryUrl(HlsUrl url) {
if (!masterPlaylist.variants.contains(url) if (url == primaryHlsUrl
|| !masterPlaylist.variants.contains(url)
|| (primaryUrlSnapshot != null && primaryUrlSnapshot.hasEndTag)) { || (primaryUrlSnapshot != null && primaryUrlSnapshot.hasEndTag)) {
// Only allow variant urls to be chosen as primary. Also prevent changing the primary url if // Ignore if the primary url is unchanged, if the url is not a variant url, or if the last
// the last primary snapshot contains an end tag. // primary snapshot contains an end tag.
return; return;
} }
primaryHlsUrl = url; primaryHlsUrl = url;
playlistBundles.get(primaryHlsUrl).loadPlaylist(); playlistBundles.get(primaryHlsUrl).loadPlaylist();
} }
private void createBundles(List<HlsUrl> urls) { private void createBundles(List<HlsUrl> urls) {
int listSize = urls.size(); int listSize = urls.size();
long currentTimeMs = SystemClock.elapsedRealtime();
for (int i = 0; i < listSize; i++) { for (int i = 0; i < listSize; i++) {
HlsUrl url = urls.get(i); HlsUrl url = urls.get(i);
MediaPlaylistBundle bundle = new MediaPlaylistBundle(url, currentTimeMs); MediaPlaylistBundle bundle = new MediaPlaylistBundle(url);
playlistBundles.put(url, bundle); playlistBundles.put(url, bundle);
} }
} }
@ -470,14 +469,12 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
private HlsMediaPlaylist playlistSnapshot; private HlsMediaPlaylist playlistSnapshot;
private long lastSnapshotLoadMs; private long lastSnapshotLoadMs;
private long lastSnapshotChangeMs; private long lastSnapshotChangeMs;
private long lastSnapshotAccessTimeMs;
private long blacklistUntilMs; private long blacklistUntilMs;
private boolean pendingRefresh; private boolean pendingRefresh;
private IOException playlistError; private IOException playlistError;
public MediaPlaylistBundle(HlsUrl playlistUrl, long initialLastSnapshotAccessTimeMs) { public MediaPlaylistBundle(HlsUrl playlistUrl) {
this.playlistUrl = playlistUrl; this.playlistUrl = playlistUrl;
lastSnapshotAccessTimeMs = initialLastSnapshotAccessTimeMs;
mediaPlaylistLoader = new Loader("HlsPlaylistTracker:MediaPlaylist"); mediaPlaylistLoader = new Loader("HlsPlaylistTracker:MediaPlaylist");
mediaPlaylistLoadable = new ParsingLoadable<>( mediaPlaylistLoadable = new ParsingLoadable<>(
dataSourceFactory.createDataSource(C.DATA_TYPE_MANIFEST), dataSourceFactory.createDataSource(C.DATA_TYPE_MANIFEST),
@ -486,7 +483,6 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
} }
public HlsMediaPlaylist getPlaylistSnapshot() { public HlsMediaPlaylist getPlaylistSnapshot() {
lastSnapshotAccessTimeMs = SystemClock.elapsedRealtime();
return playlistSnapshot; return playlistSnapshot;
} }