pull/586/head
FongMi 1 year ago
parent a4a7d7b692
commit 3ef00d2e1c
  1. 14
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  2. 14
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 16
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 5
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  5. 14
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  6. 14
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.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();

@ -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());

@ -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());

@ -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));
}
}

@ -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());

@ -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());

Loading…
Cancel
Save