From 97a23ce5726757d82eba0b64cc2cb5d0cfd011f4 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Fri, 25 Nov 2016 06:13:35 -0800 Subject: [PATCH] Fix main thread playlist refreshes in HlsPlaylistTracker The refresh handler in HlsPlaylistTracker was being instantiated in the same thread as the MediaSource (i.e. Main thread). Issue:#2108 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=140197553 --- .../android/exoplayer2/source/hls/HlsMediaSource.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java index 6fd82df316..f418bbded3 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java @@ -42,11 +42,12 @@ public final class HlsMediaSource implements MediaSource, */ public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT = 3; - private final HlsPlaylistTracker playlistTracker; + private final Uri manifestUri; private final DataSource.Factory dataSourceFactory; private final int minLoadableRetryCount; private final EventDispatcher eventDispatcher; + private HlsPlaylistTracker playlistTracker; private MediaSource.Listener sourceListener; public HlsMediaSource(Uri manifestUri, DataSource.Factory dataSourceFactory, Handler eventHandler, @@ -58,15 +59,17 @@ public final class HlsMediaSource implements MediaSource, public HlsMediaSource(Uri manifestUri, DataSource.Factory dataSourceFactory, int minLoadableRetryCount, Handler eventHandler, AdaptiveMediaSourceEventListener eventListener) { + this.manifestUri = manifestUri; this.dataSourceFactory = dataSourceFactory; this.minLoadableRetryCount = minLoadableRetryCount; eventDispatcher = new EventDispatcher(eventHandler, eventListener); - playlistTracker = new HlsPlaylistTracker(manifestUri, dataSourceFactory, eventDispatcher, - minLoadableRetryCount, this); } @Override public void prepareSource(MediaSource.Listener listener) { + Assertions.checkState(playlistTracker == null); + playlistTracker = new HlsPlaylistTracker(manifestUri, dataSourceFactory, eventDispatcher, + minLoadableRetryCount, this); sourceListener = listener; playlistTracker.start(); } @@ -91,6 +94,7 @@ public final class HlsMediaSource implements MediaSource, @Override public void releaseSource() { playlistTracker.release(); + playlistTracker = null; sourceListener = null; }