Commit 97a23ce5 by aquilescanta Committed by Oliver Woodman

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
parent 894ae1a3
...@@ -42,11 +42,12 @@ public final class HlsMediaSource implements MediaSource, ...@@ -42,11 +42,12 @@ public final class HlsMediaSource implements MediaSource,
*/ */
public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT = 3; 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 DataSource.Factory dataSourceFactory;
private final int minLoadableRetryCount; private final int minLoadableRetryCount;
private final EventDispatcher eventDispatcher; private final EventDispatcher eventDispatcher;
private HlsPlaylistTracker playlistTracker;
private MediaSource.Listener sourceListener; private MediaSource.Listener sourceListener;
public HlsMediaSource(Uri manifestUri, DataSource.Factory dataSourceFactory, Handler eventHandler, public HlsMediaSource(Uri manifestUri, DataSource.Factory dataSourceFactory, Handler eventHandler,
...@@ -58,15 +59,17 @@ public final class HlsMediaSource implements MediaSource, ...@@ -58,15 +59,17 @@ public final class HlsMediaSource implements MediaSource,
public HlsMediaSource(Uri manifestUri, DataSource.Factory dataSourceFactory, public HlsMediaSource(Uri manifestUri, DataSource.Factory dataSourceFactory,
int minLoadableRetryCount, Handler eventHandler, int minLoadableRetryCount, Handler eventHandler,
AdaptiveMediaSourceEventListener eventListener) { AdaptiveMediaSourceEventListener eventListener) {
this.manifestUri = manifestUri;
this.dataSourceFactory = dataSourceFactory; this.dataSourceFactory = dataSourceFactory;
this.minLoadableRetryCount = minLoadableRetryCount; this.minLoadableRetryCount = minLoadableRetryCount;
eventDispatcher = new EventDispatcher(eventHandler, eventListener); eventDispatcher = new EventDispatcher(eventHandler, eventListener);
playlistTracker = new HlsPlaylistTracker(manifestUri, dataSourceFactory, eventDispatcher,
minLoadableRetryCount, this);
} }
@Override @Override
public void prepareSource(MediaSource.Listener listener) { public void prepareSource(MediaSource.Listener listener) {
Assertions.checkState(playlistTracker == null);
playlistTracker = new HlsPlaylistTracker(manifestUri, dataSourceFactory, eventDispatcher,
minLoadableRetryCount, this);
sourceListener = listener; sourceListener = listener;
playlistTracker.start(); playlistTracker.start();
} }
...@@ -91,6 +94,7 @@ public final class HlsMediaSource implements MediaSource, ...@@ -91,6 +94,7 @@ public final class HlsMediaSource implements MediaSource,
@Override @Override
public void releaseSource() { public void releaseSource() {
playlistTracker.release(); playlistTracker.release();
playlistTracker = null;
sourceListener = null; sourceListener = null;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment