Make DashMediaSource reusable.
GitHub:#3498 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=183253017
This commit is contained in:
parent
3d320e9506
commit
bc9dbdb49e
@ -266,6 +266,8 @@ public final class DashMediaSource implements MediaSource {
|
|||||||
|
|
||||||
private static final String TAG = "DashMediaSource";
|
private static final String TAG = "DashMediaSource";
|
||||||
|
|
||||||
|
private final Uri initialManifestUri;
|
||||||
|
private final DashManifest initialManifest;
|
||||||
private final boolean sideloadedManifest;
|
private final boolean sideloadedManifest;
|
||||||
private final DataSource.Factory manifestDataSourceFactory;
|
private final DataSource.Factory manifestDataSourceFactory;
|
||||||
private final DashChunkSource.Factory chunkSourceFactory;
|
private final DashChunkSource.Factory chunkSourceFactory;
|
||||||
@ -280,11 +282,12 @@ public final class DashMediaSource implements MediaSource {
|
|||||||
private final Runnable refreshManifestRunnable;
|
private final Runnable refreshManifestRunnable;
|
||||||
private final Runnable simulateManifestRefreshRunnable;
|
private final Runnable simulateManifestRefreshRunnable;
|
||||||
private final PlayerEmsgCallback playerEmsgCallback;
|
private final PlayerEmsgCallback playerEmsgCallback;
|
||||||
|
private final LoaderErrorThrower manifestLoadErrorThrower;
|
||||||
|
|
||||||
private Listener sourceListener;
|
private Listener sourceListener;
|
||||||
private DataSource dataSource;
|
private DataSource dataSource;
|
||||||
private Loader loader;
|
private Loader loader;
|
||||||
private LoaderErrorThrower manifestLoadErrorThrower;
|
|
||||||
private IOException manifestFatalError;
|
private IOException manifestFatalError;
|
||||||
private Handler handler;
|
private Handler handler;
|
||||||
|
|
||||||
@ -440,6 +443,8 @@ public final class DashMediaSource implements MediaSource {
|
|||||||
long livePresentationDelayMs,
|
long livePresentationDelayMs,
|
||||||
Handler eventHandler,
|
Handler eventHandler,
|
||||||
MediaSourceEventListener eventListener) {
|
MediaSourceEventListener eventListener) {
|
||||||
|
this.initialManifestUri = manifestUri;
|
||||||
|
this.initialManifest = manifest;
|
||||||
this.manifest = manifest;
|
this.manifest = manifest;
|
||||||
this.manifestUri = manifestUri;
|
this.manifestUri = manifestUri;
|
||||||
this.manifestDataSourceFactory = manifestDataSourceFactory;
|
this.manifestDataSourceFactory = manifestDataSourceFactory;
|
||||||
@ -459,8 +464,10 @@ public final class DashMediaSource implements MediaSource {
|
|||||||
manifestCallback = null;
|
manifestCallback = null;
|
||||||
refreshManifestRunnable = null;
|
refreshManifestRunnable = null;
|
||||||
simulateManifestRefreshRunnable = null;
|
simulateManifestRefreshRunnable = null;
|
||||||
|
manifestLoadErrorThrower = new LoaderErrorThrower.Dummy();
|
||||||
} else {
|
} else {
|
||||||
manifestCallback = new ManifestCallback();
|
manifestCallback = new ManifestCallback();
|
||||||
|
manifestLoadErrorThrower = new ManifestLoadErrorThrower();
|
||||||
refreshManifestRunnable = new Runnable() {
|
refreshManifestRunnable = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@ -491,15 +498,12 @@ public final class DashMediaSource implements MediaSource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
|
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
|
||||||
Assertions.checkState(sourceListener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
|
|
||||||
sourceListener = listener;
|
sourceListener = listener;
|
||||||
if (sideloadedManifest) {
|
if (sideloadedManifest) {
|
||||||
manifestLoadErrorThrower = new LoaderErrorThrower.Dummy();
|
|
||||||
processManifest(false);
|
processManifest(false);
|
||||||
} else {
|
} else {
|
||||||
dataSource = manifestDataSourceFactory.createDataSource();
|
dataSource = manifestDataSourceFactory.createDataSource();
|
||||||
loader = new Loader("Loader:DashMediaSource");
|
loader = new Loader("Loader:DashMediaSource");
|
||||||
manifestLoadErrorThrower = new ManifestLoadErrorThrower();
|
|
||||||
handler = new Handler();
|
handler = new Handler();
|
||||||
startLoadingManifest();
|
startLoadingManifest();
|
||||||
}
|
}
|
||||||
@ -543,19 +547,24 @@ public final class DashMediaSource implements MediaSource {
|
|||||||
public void releaseSource() {
|
public void releaseSource() {
|
||||||
manifestLoadPending = false;
|
manifestLoadPending = false;
|
||||||
dataSource = null;
|
dataSource = null;
|
||||||
manifestLoadErrorThrower = null;
|
|
||||||
if (loader != null) {
|
if (loader != null) {
|
||||||
loader.release();
|
loader.release();
|
||||||
loader = null;
|
loader = null;
|
||||||
}
|
}
|
||||||
manifestLoadStartTimestampMs = 0;
|
manifestLoadStartTimestampMs = 0;
|
||||||
manifestLoadEndTimestampMs = 0;
|
manifestLoadEndTimestampMs = 0;
|
||||||
manifest = null;
|
manifest = initialManifest;
|
||||||
|
manifestUri = initialManifestUri;
|
||||||
|
manifestFatalError = null;
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
handler.removeCallbacksAndMessages(null);
|
handler.removeCallbacksAndMessages(null);
|
||||||
handler = null;
|
handler = null;
|
||||||
}
|
}
|
||||||
elapsedRealtimeOffsetMs = 0;
|
elapsedRealtimeOffsetMs = 0;
|
||||||
|
staleManifestReloadAttempt = 0;
|
||||||
|
expiredManifestPublishTimeUs = C.TIME_UNSET;
|
||||||
|
dynamicMediaPresentationEnded = false;
|
||||||
|
firstPeriodId = 0;
|
||||||
periodsById.clear();
|
periodsById.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user