Fix re-starting of DefaultHlsPlalyistTracker

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=201530049
This commit is contained in:
aquilescanta 2018-06-21 08:39:25 -07:00 committed by Oliver Woodman
parent 35ac394de3
commit 3ede1aaa8e

View File

@ -28,6 +28,7 @@ import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist.Segmen
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.Loader; import com.google.android.exoplayer2.upstream.Loader;
import com.google.android.exoplayer2.upstream.ParsingLoadable; import com.google.android.exoplayer2.upstream.ParsingLoadable;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.UriUtil; import com.google.android.exoplayer2.util.UriUtil;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -49,10 +50,10 @@ public final class DefaultHlsPlaylistTracker
private final int minRetryCount; private final int minRetryCount;
private final IdentityHashMap<HlsUrl, MediaPlaylistBundle> playlistBundles; private final IdentityHashMap<HlsUrl, MediaPlaylistBundle> playlistBundles;
private final List<PlaylistEventListener> listeners; private final List<PlaylistEventListener> listeners;
private final Loader initialPlaylistLoader;
private Handler playlistRefreshHandler;
private EventDispatcher eventDispatcher; private EventDispatcher eventDispatcher;
private Loader initialPlaylistLoader;
private Handler playlistRefreshHandler;
private PrimaryPlaylistListener primaryPlaylistListener; private PrimaryPlaylistListener primaryPlaylistListener;
private HlsMasterPlaylist masterPlaylist; private HlsMasterPlaylist masterPlaylist;
private HlsUrl primaryHlsUrl; private HlsUrl primaryHlsUrl;
@ -75,7 +76,6 @@ public final class DefaultHlsPlaylistTracker
this.minRetryCount = minRetryCount; this.minRetryCount = minRetryCount;
this.playlistParser = playlistParser; this.playlistParser = playlistParser;
listeners = new ArrayList<>(); listeners = new ArrayList<>();
initialPlaylistLoader = new Loader("DefaultHlsPlaylistTracker:MasterPlaylist");
playlistBundles = new IdentityHashMap<>(); playlistBundles = new IdentityHashMap<>();
initialStartTimeUs = C.TIME_UNSET; initialStartTimeUs = C.TIME_UNSET;
} }
@ -96,6 +96,8 @@ public final class DefaultHlsPlaylistTracker
initialPlaylistUri, initialPlaylistUri,
C.DATA_TYPE_MANIFEST, C.DATA_TYPE_MANIFEST,
playlistParser); playlistParser);
Assertions.checkState(initialPlaylistLoader == null);
initialPlaylistLoader = new Loader("DefaultHlsPlaylistTracker:MasterPlaylist");
long elapsedRealtime = long elapsedRealtime =
initialPlaylistLoader.startLoading(masterPlaylistLoadable, this, minRetryCount); initialPlaylistLoader.startLoading(masterPlaylistLoadable, this, minRetryCount);
eventDispatcher.loadStarted( eventDispatcher.loadStarted(
@ -104,11 +106,17 @@ public final class DefaultHlsPlaylistTracker
@Override @Override
public void release() { public void release() {
primaryHlsUrl = null;
primaryUrlSnapshot = null;
masterPlaylist = null;
initialStartTimeUs = C.TIME_UNSET;
initialPlaylistLoader.release(); initialPlaylistLoader.release();
initialPlaylistLoader = null;
for (MediaPlaylistBundle bundle : playlistBundles.values()) { for (MediaPlaylistBundle bundle : playlistBundles.values()) {
bundle.release(); bundle.release();
} }
playlistRefreshHandler.removeCallbacksAndMessages(null); playlistRefreshHandler.removeCallbacksAndMessages(null);
playlistRefreshHandler = null;
playlistBundles.clear(); playlistBundles.clear();
} }
@ -148,7 +156,9 @@ public final class DefaultHlsPlaylistTracker
@Override @Override
public void maybeThrowPrimaryPlaylistRefreshError() throws IOException { public void maybeThrowPrimaryPlaylistRefreshError() throws IOException {
initialPlaylistLoader.maybeThrowError(); if (initialPlaylistLoader != null) {
initialPlaylistLoader.maybeThrowError();
}
if (primaryHlsUrl != null) { if (primaryHlsUrl != null) {
maybeThrowPlaylistRefreshError(primaryHlsUrl); maybeThrowPlaylistRefreshError(primaryHlsUrl);
} }