From c1e25f7768a1bcc3730cf51487c9f7c941137709 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 12 Apr 2019 14:13:26 +0100 Subject: [PATCH] Add check for retryDelayMs==C.TIME_UNSET in DASH and SS manifest onLoadError. If the returned retry delay is unset, we should use a DONT_RETRY_FATAL action instead and dispatch the event with the "canceled" flag. PiperOrigin-RevId: 243251554 --- .../source/dash/DashMediaSource.java | 17 +++++++++-------- .../source/smoothstreaming/SsMediaSource.java | 18 +++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index 5284f8b936..cdc32553f3 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -814,7 +814,13 @@ public final class DashMediaSource extends BaseMediaSource { long loadDurationMs, IOException error, int errorCount) { - boolean isFatal = error instanceof ParserException; + long retryDelayMs = + loadErrorHandlingPolicy.getRetryDelayMsFor( + C.DATA_TYPE_MANIFEST, loadDurationMs, error, errorCount); + LoadErrorAction loadErrorAction = + retryDelayMs == C.TIME_UNSET + ? Loader.DONT_RETRY_FATAL + : Loader.createRetryAction(/* resetErrorCount= */ false, retryDelayMs); manifestEventDispatcher.loadError( loadable.dataSpec, loadable.getUri(), @@ -824,13 +830,8 @@ public final class DashMediaSource extends BaseMediaSource { loadDurationMs, loadable.bytesLoaded(), error, - isFatal); - return isFatal - ? Loader.DONT_RETRY_FATAL - : Loader.createRetryAction( - /* resetErrorCount= */ false, - loadErrorHandlingPolicy.getRetryDelayMsFor( - C.DATA_TYPE_MANIFEST, loadDurationMs, error, errorCount)); + !loadErrorAction.isRetry()); + return loadErrorAction; } /* package */ void onUtcTimestampLoadCompleted(ParsingLoadable loadable, diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java index 1291b846ba..09820f092d 100644 --- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java +++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java @@ -21,7 +21,6 @@ import android.os.SystemClock; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlayerLibraryInfo; -import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.offline.FilteringManifestParser; import com.google.android.exoplayer2.offline.StreamKey; @@ -628,7 +627,13 @@ public final class SsMediaSource extends BaseMediaSource long loadDurationMs, IOException error, int errorCount) { - boolean isFatal = error instanceof ParserException; + long retryDelayMs = + loadErrorHandlingPolicy.getRetryDelayMsFor( + C.DATA_TYPE_MANIFEST, loadDurationMs, error, errorCount); + LoadErrorAction loadErrorAction = + retryDelayMs == C.TIME_UNSET + ? Loader.DONT_RETRY_FATAL + : Loader.createRetryAction(/* resetErrorCount= */ false, retryDelayMs); manifestEventDispatcher.loadError( loadable.dataSpec, loadable.getUri(), @@ -638,13 +643,8 @@ public final class SsMediaSource extends BaseMediaSource loadDurationMs, loadable.bytesLoaded(), error, - isFatal); - return isFatal - ? Loader.DONT_RETRY_FATAL - : Loader.createRetryAction( - /* resetErrorCount= */ false, - loadErrorHandlingPolicy.getRetryDelayMsFor( - C.DATA_TYPE_MANIFEST, loadDurationMs, error, errorCount)); + !loadErrorAction.isRetry()); + return loadErrorAction; } // Internal methods