diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index 228133685..8debd5ab0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -364,7 +364,8 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (mPlayers.addRetry() > event.getRetry()) onError(event); + if (event.getCode() / 1000 == 4 && mPlayers.isExo() && Players.isHard(Players.EXO)) onDecode(); + else if (mPlayers.addRetry() > event.getRetry()) onError(event); else onReset(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 044e412ea..826c5f0dd 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -793,7 +793,8 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (mPlayers.addRetry() > event.getRetry()) checkError(event); + if (event.getCode() / 1000 == 4 && mPlayers.isExo() && Players.isHard(Players.EXO)) onDecode(); + else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else fetch(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index bce285bad..0e085dd2b 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1389,7 +1389,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (isBackground()) return; - if (mPlayers.addRetry() > event.getRetry()) checkError(event); + if (event.getCode() / 1000 == 4 && mPlayers.isExo() && Players.isHard(Players.EXO)) onDecode(); + else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else onRefresh(); } diff --git a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java index 91800b1db..db6641687 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java @@ -10,36 +10,43 @@ public class ErrorEvent { private final Type type; private final int retry; private String msg; + private int code; public static void url(int retry) { - EventBus.getDefault().post(new ErrorEvent(Type.URL, retry)); + EventBus.getDefault().post(new ErrorEvent(Type.URL, retry, -1)); + } + + public static void url(int retry, int code) { + EventBus.getDefault().post(new ErrorEvent(Type.URL, retry, code)); } public static void flag() { - EventBus.getDefault().post(new ErrorEvent(Type.FLAG, 0)); + EventBus.getDefault().post(new ErrorEvent(Type.FLAG, 0, -1)); } public static void parse() { - EventBus.getDefault().post(new ErrorEvent(Type.PARSE, 0)); + EventBus.getDefault().post(new ErrorEvent(Type.PARSE, 0, -1)); } public static void timeout() { - EventBus.getDefault().post(new ErrorEvent(Type.TIMEOUT, 0)); + EventBus.getDefault().post(new ErrorEvent(Type.TIMEOUT, 0, -1)); } public static void extract(String msg) { - EventBus.getDefault().post(new ErrorEvent(Type.EXTRACT, 0, msg)); + EventBus.getDefault().post(new ErrorEvent(Type.EXTRACT, 0, -1, msg)); } - public ErrorEvent(Type type, int retry) { + public ErrorEvent(Type type, int retry, int code) { this.type = type; this.retry = retry; + this.code = code; } - public ErrorEvent(Type type, int retry, String msg) { + public ErrorEvent(Type type, int retry, int code, String msg) { this.msg = msg; this.type = type; this.retry = retry; + this.code = code; } public Type getType() { @@ -54,6 +61,10 @@ public class ErrorEvent { return Type.URL.equals(getType()); } + public int getCode() { + return code; + } + public String getMsg() { if (type == Type.URL) return ResUtil.getString(R.string.error_play_url); if (type == Type.FLAG) return ResUtil.getString(R.string.error_play_flag); diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index ce3ef9a55..23d59e26f 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -636,8 +636,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic @Override public void onPlayerError(@NonNull PlaybackException error) { - ErrorEvent.url(ExoUtil.getRetry(this.error = error.errorCode)); setPlaybackState(PlaybackStateCompat.STATE_ERROR); + ErrorEvent.url(ExoUtil.getRetry(this.error = error.errorCode), error.errorCode); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 591354947..d34afa7eb 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -858,7 +858,8 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { - if (mPlayers.addRetry() > event.getRetry()) checkError(event); + if (event.getCode() / 1000 == 4 && mPlayers.isExo() && Players.isHard(Players.EXO)) onDecode(); + else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else fetch(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index e73c6f8ee..316e9b0e1 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1335,7 +1335,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (isRedirect()) return; - if (mPlayers.addRetry() > event.getRetry()) checkError(event); + if (event.getCode() / 1000 == 4 && mPlayers.isExo() && Players.isHard(Players.EXO)) onDecode(); + else if (mPlayers.addRetry() > event.getRetry()) checkError(event); else onRefresh(); }