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 b521cab2d..3dd942753 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 @@ -637,7 +637,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void checkError(ErrorEvent event) { - if (getHome().getPlayerType() == -1 && event.isFormat() && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { + if (getHome().getPlayerType() == -1 && event.isFormat() && event.getRetry() > 0 && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { toggleCount++; nextPlayer(); } else { 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 7a1f40216..bacf4dac6 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 @@ -556,7 +556,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void setQualityVisible(boolean visible) { mFlagPresenter.setNextFocusDown(visible ? R.id.quality : R.id.episode); mEpisodePresenter.setNextFocusUp(visible ? R.id.quality : R.id.flag); - mBinding.quality.setVisibility(visible?View.VISIBLE:View.GONE); + mBinding.quality.setVisibility(visible ? View.VISIBLE : View.GONE); notifyItemChanged(mBinding.episode, mEpisodeAdapter); notifyItemChanged(mBinding.flag, mFlagAdapter); } @@ -1088,7 +1088,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void checkError(ErrorEvent event) { - if (getSite().getPlayerType() == -1 && event.isFormat() && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { + if (getSite().getPlayerType() == -1 && event.isFormat() && event.getRetry() > 0 && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { toggleCount++; nextPlayer(); } else { diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index 721a8fe97..0cfa81ff0 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -3,7 +3,6 @@ package com.fongmi.android.tv.player; import android.graphics.Color; import android.net.Uri; -import androidx.media3.common.C; import androidx.media3.common.MediaItem; import androidx.media3.common.MimeTypes; import androidx.media3.common.PlaybackException; @@ -69,7 +68,7 @@ public class ExoUtil { public static TrackSelector buildTrackSelector() { DefaultTrackSelector trackSelector = new DefaultTrackSelector(App.get()); - trackSelector.setParameters(trackSelector.buildUponParameters().setIgnoredTextSelectionFlags(C.SELECTION_FLAG_DEFAULT).setPreferredTextLanguage("zh").setTunnelingEnabled(Setting.isTunnel())); + trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("zh").setTunnelingEnabled(Setting.isTunnel())); return trackSelector; } @@ -81,6 +80,12 @@ public class ExoUtil { return new CaptionStyleCompat(Color.WHITE, Color.TRANSPARENT, Color.TRANSPARENT, CaptionStyleCompat.EDGE_TYPE_OUTLINE, Color.BLACK, null); } + public static int getRetry(int errorCode) { + if (errorCode == PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED) return 0; + if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED || errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_IO_UNSPECIFIED) return 2; + return 1; + } + public static boolean haveTrack(Tracks tracks, int type) { int count = 0; for (Tracks.Group trackGroup : tracks.getGroups()) if (trackGroup.getType() == type) count += trackGroup.length; diff --git a/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java b/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java index b9cd6ff82..7bea89e78 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java @@ -15,6 +15,11 @@ import tv.danmaku.ijk.media.player.MediaSource; public class IjkUtil { + public static int getRetry(int errorCode) { + if (errorCode == -10000) return 0; + return 1; + } + public static MediaSource getSource(Result result) { return getSource(result.getHeaders(), result.getRealUrl()); } 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 10840b4ed..40820a7c4 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 @@ -732,7 +732,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void checkError(ErrorEvent event) { - if (getHome().getPlayerType() == -1 && event.isFormat() && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { + if (getHome().getPlayerType() == -1 && event.isFormat() && event.getRetry() > 0 && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { toggleCount++; nextPlayer(); } else { 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 73b5d2d87..98e411c4e 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 @@ -1184,7 +1184,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void checkError(ErrorEvent event) { - if (getSite().getPlayerType() == -1 && event.isFormat() && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { + if (getSite().getPlayerType() == -1 && event.isFormat() && event.getRetry() > 0 && getToggleCount() < 2 && mPlayers.getPlayer() != Players.SYS) { toggleCount++; nextPlayer(); } else {