diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 99d36f66eea..d025e56d927 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -246,6 +246,11 @@ public final class Player implements PlaybackListener, Listener { @NonNull private final SharedPreferences prefs; @NonNull private final HistoryRecordManager recordManager; + /*////////////////////////////////////////////////////////////////////////// + // Error states + //////////////////////////////////////////////////////////////////////////*/ + + private int badHttpStatusRetry = 0; /*////////////////////////////////////////////////////////////////////////// // Constructor @@ -1407,6 +1412,17 @@ public void onPlayerError(@NonNull final PlaybackException error) { break; case ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE: case ERROR_CODE_IO_BAD_HTTP_STATUS: + if (badHttpStatusRetry < 3) { + badHttpStatusRetry += 1; + isCatchableException = true; + // Clears metadata cache and then reloads playback + InfoCache.getInstance().clearCache(); + setRecovery(); + reloadPlayQueueManager(); + } else { + isCatchableException = false; + } + break; case ERROR_CODE_IO_FILE_NOT_FOUND: case ERROR_CODE_IO_NO_PERMISSION: case ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED: