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 080516cad..fd13365c3 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 @@ -13,7 +13,6 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.media3.common.C; -import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.viewbinding.ViewBinding; @@ -283,6 +282,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List switch (event.getState()) { case PlayerEvent.PREPARE: setState(RenderState.PREPARING); + setDecode(); break; case Player.STATE_IDLE: setState(RenderState.IDLE); @@ -293,6 +293,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List break; case Player.STATE_READY: hideProgress(); + mPlayers.reset(); setState(RenderState.PLAYING); break; case Player.STATE_ENDED: @@ -301,7 +302,6 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List break; case PlayerEvent.TRACK: setMetadata(); - mPlayers.reset(); setTrackVisible(); mClock.setCallback(this); break; @@ -324,19 +324,9 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (mPlayers.retried()) onError(event); - else if (event.isExo()) onCheck(event); else onReset(); } - private void onCheck(ErrorEvent event) { - if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition(); - else if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isSoft()) mPlayers.init(mBinding.exo); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isHard()) onDecode(); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODING_FAILED && mPlayers.isHard()) onDecode(); - else onError(event); - } - private void onError(ErrorEvent event) { showError(event.getMsg()); mPlayers.resetTrack(); 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 a40256e95..efabdce42 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 @@ -14,7 +14,6 @@ import androidx.leanback.widget.ItemBridgeAdapter; import androidx.leanback.widget.OnChildViewHolderSelectedListener; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.C; -import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.recyclerview.widget.RecyclerView; import androidx.viewbinding.ViewBinding; @@ -705,12 +704,14 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick switch (event.getState()) { case PlayerEvent.PREPARE: setInitTrack(true); + setDecode(); break; case Player.STATE_BUFFERING: showProgress(); break; case Player.STATE_READY: hideProgress(); + mPlayers.reset(); break; case Player.STATE_ENDED: checkNext(); @@ -718,7 +719,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick case PlayerEvent.TRACK: setMetadata(); setInitTrack(); - mPlayers.reset(); setTrackVisible(); break; case PlayerEvent.SIZE: @@ -750,19 +750,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (mPlayers.retried()) onError(event); - else if (event.isExo()) onCheck(event); else fetch(); } - private void onCheck(ErrorEvent event) { - if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition(); - else if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isSoft()) mPlayers.init(mBinding.exo); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isHard()) onDecode(); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODING_FAILED && mPlayers.isHard()) onDecode(); - else onError(event); - } - private void onError(ErrorEvent event) { Track.delete(mPlayers.getUrl()); showError(event.getMsg()); 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 ec69c3b95..116fff37d 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 @@ -26,7 +26,6 @@ import androidx.leanback.widget.ItemBridgeAdapter; import androidx.leanback.widget.OnChildViewHolderSelectedListener; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.C; -import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.recyclerview.widget.RecyclerView; import androidx.viewbinding.ViewBinding; @@ -91,9 +90,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.Map; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -1037,12 +1036,14 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List case PlayerEvent.PREPARE: setInitTrack(true); setPosition(); + setDecode(); break; case Player.STATE_BUFFERING: showProgress(); break; case Player.STATE_READY: hideProgress(); + mPlayers.reset(); break; case Player.STATE_ENDED: checkEnded(true); @@ -1050,7 +1051,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List case PlayerEvent.TRACK: setMetadata(); setInitTrack(); - mPlayers.reset(); setTrackVisible(); mClock.setCallback(this); break; @@ -1097,19 +1097,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List public void onErrorEvent(ErrorEvent event) { if (isBackground()) return; if (mPlayers.retried()) onError(event); - else if (event.isExo()) onCheck(event); else onRefresh(); } - private void onCheck(ErrorEvent event) { - if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition(); - else if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isSoft()) mPlayers.init(mBinding.exo); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isHard()) onDecode(); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODING_FAILED && mPlayers.isHard()) onDecode(); - else onError(event); - } - private void onError(ErrorEvent event) { Track.delete(getHistoryKey()); showError(event.getMsg()); 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 601281544..a6c4fe099 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 @@ -582,6 +582,9 @@ public class Players implements Player.Listener, ParseCallback { @Override public void onPlayerError(@NonNull PlaybackException error) { Logger.t(TAG).e(error.errorCode + "," + url); - ErrorEvent.url(error.errorCode); + if (retried()) ErrorEvent.extract(error.getErrorCodeName()); + else if (error.errorCode == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) seekToDefaultPosition(); + else if (error.errorCode >= PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && error.errorCode <= PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED) toggleDecode(); + else if (error.errorCode == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || error.errorCode >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && error.errorCode <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) setFormat(ExoUtil.getMimeType(error.errorCode)); } } 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 4e2192a3a..e36b411ec 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 @@ -16,7 +16,6 @@ import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.C; -import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.viewbinding.ViewBinding; @@ -756,12 +755,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List switch (event.getState()) { case PlayerEvent.PREPARE: setInitTrack(true); + setDecode(); break; case Player.STATE_BUFFERING: showProgress(); break; case Player.STATE_READY: hideProgress(); + mPlayers.reset(); checkPlayImg(mPlayers.isPlaying()); break; case Player.STATE_ENDED: @@ -770,7 +771,6 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List case PlayerEvent.TRACK: setMetadata(); setInitTrack(); - mPlayers.reset(); setTrackVisible(); break; case PlayerEvent.SIZE: @@ -802,19 +802,9 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (mPlayers.retried()) onError(event); - else if (event.isExo()) onCheck(event); else fetch(); } - private void onCheck(ErrorEvent event) { - if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition(); - else if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isSoft()) mPlayers.init(mBinding.exo); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isHard()) onDecode(); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODING_FAILED && mPlayers.isHard()) onDecode(); - else onError(event); - } - private void onError(ErrorEvent event) { Track.delete(mPlayers.getUrl()); showError(event.getMsg()); 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 2ccbca0cd..81892d6c5 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 @@ -31,7 +31,6 @@ import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.C; -import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.recyclerview.widget.RecyclerView; import androidx.viewbinding.ViewBinding; @@ -1082,12 +1081,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo case PlayerEvent.PREPARE: setInitTrack(true); setPosition(); + setDecode(); break; case Player.STATE_BUFFERING: showProgress(); break; case Player.STATE_READY: hideProgress(); + mPlayers.reset(); checkPlayImg(mPlayers.isPlaying()); break; case Player.STATE_ENDED: @@ -1096,7 +1097,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo case PlayerEvent.TRACK: setMetadata(); setInitTrack(); - mPlayers.reset(); setTrackVisible(); mClock.setCallback(this); break; @@ -1153,19 +1153,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo public void onErrorEvent(ErrorEvent event) { if (isRedirect()) return; if (mPlayers.retried()) onError(event); - else if (event.isExo()) onCheck(event); else onRefresh(); } - private void onCheck(ErrorEvent event) { - if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition(); - else if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode())); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isSoft()) mPlayers.init(mBinding.exo); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED && mPlayers.isHard()) onDecode(); - else if (event.getCode() == PlaybackException.ERROR_CODE_DECODING_FAILED && mPlayers.isHard()) onDecode(); - else onError(event); - } - private void onError(ErrorEvent event) { mBinding.swipeLayout.setEnabled(true); Track.delete(getHistoryKey());