Optimize decode

release
FongMi 1 year ago
parent 5c41b115f3
commit d35e63423c
  1. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  2. 29
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 9
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 2
      app/src/main/java/com/fongmi/android/tv/bean/Track.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/db/dao/TrackDao.java
  6. 8
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  7. 29
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  8. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java

@ -329,9 +329,10 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
}
private void onCheck(ErrorEvent event) {
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_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition();
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
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.getRetry() == 1) 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);
}

@ -87,6 +87,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private Runnable mR3;
private Runnable mR4;
private Clock mClock;
private boolean initTrack;
private int count;
public static void start(Context context) {
@ -633,6 +634,8 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
@Override
public void onTrackClick(Track item) {
item.setKey(mPlayers.getUrl());
item.save();
}
@Override
@ -700,6 +703,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
switch (event.getState()) {
case PlayerEvent.PREPARE:
setInitTrack(true);
break;
case Player.STATE_BUFFERING:
showProgress();
break;
@ -711,6 +717,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
break;
case PlayerEvent.TRACK:
setMetadata();
setInitTrack();
mPlayers.reset();
setTrackVisible();
break;
@ -727,6 +734,13 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mBinding.control.speed.setVisibility(mPlayers.isVod() ? View.VISIBLE : View.GONE);
}
private void setInitTrack() {
if (isInitTrack()) {
setInitTrack(false);
mPlayers.setTrack(Track.find(mPlayers.getUrl()));
}
}
private void setMetadata() {
String title = mBinding.widget.name.getText().toString();
String artist = mBinding.widget.play.getText().toString();
@ -741,9 +755,10 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
}
private void onCheck(ErrorEvent event) {
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_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition();
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
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.getRetry() == 1) 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);
}
@ -809,6 +824,14 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
hideCenter();
}
private boolean isInitTrack() {
return initTrack;
}
private void setInitTrack(boolean initTrack) {
this.initTrack = initTrack;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (isVisible(mBinding.control.getRoot())) setR1Callback();

@ -91,9 +91,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;
@ -1098,9 +1098,10 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void onCheck(ErrorEvent event) {
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_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition();
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
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.getRetry() == 1) 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);
}

@ -1,7 +1,6 @@
package com.fongmi.android.tv.bean;
import androidx.annotation.NonNull;
import androidx.media3.common.C;
import androidx.room.Entity;
import androidx.room.Index;
import androidx.room.PrimaryKey;
@ -98,7 +97,6 @@ public class Track {
}
public void save() {
if (getType() != C.TRACK_TYPE_TEXT) return;
AppDatabase.get().getTrackDao().insert(this);
}

@ -12,7 +12,7 @@ import java.util.List;
@Dao
public abstract class TrackDao extends BaseDao<Track> {
@Query("SELECT * FROM Track WHERE `key` = :key and type = 3")
@Query("SELECT * FROM Track WHERE `key` = :key")
public abstract List<Track> find(String key);
@Insert(onConflict = OnConflictStrategy.REPLACE)

@ -178,6 +178,10 @@ public class Players implements Player.Listener, ParseCallback {
return exoPlayer == null ? 0 : exoPlayer.getVideoSize().height;
}
public int getRetry() {
return retry;
}
public float getSpeed() {
return exoPlayer == null ? 1.0f : exoPlayer.getPlaybackParameters().speed;
}
@ -230,6 +234,10 @@ public class Players implements Player.Listener, ParseCallback {
return decode == HARD;
}
public boolean isSoft() {
return decode == SOFT;
}
public boolean isPortrait() {
return getVideoHeight() > getVideoWidth();
}

@ -95,6 +95,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private Runnable mR3;
private Clock mClock;
private boolean foreground;
private boolean initTrack;
private boolean redirect;
private boolean rotate;
private boolean stop;
@ -681,6 +682,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Override
public void onTrackClick(Track item) {
item.setKey(mPlayers.getUrl());
item.save();
}
@Override
@ -751,6 +754,9 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
switch (event.getState()) {
case PlayerEvent.PREPARE:
setInitTrack(true);
break;
case Player.STATE_BUFFERING:
showProgress();
break;
@ -763,6 +769,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
break;
case PlayerEvent.TRACK:
setMetadata();
setInitTrack();
mPlayers.reset();
setTrackVisible();
break;
@ -779,6 +786,13 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mBinding.control.action.speed.setVisibility(mPlayers.isVod() ? View.VISIBLE : View.GONE);
}
private void setInitTrack() {
if (isInitTrack()) {
setInitTrack(false);
mPlayers.setTrack(Track.find(mPlayers.getUrl()));
}
}
private void setMetadata() {
String title = mBinding.widget.name.getText().toString();
String artist = mBinding.widget.play.getText().toString();
@ -793,9 +807,10 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void onCheck(ErrorEvent event) {
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_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition();
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
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.getRetry() == 1) 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);
}
@ -896,6 +911,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
this.foreground = foreground;
}
private boolean isInitTrack() {
return initTrack;
}
private void setInitTrack(boolean initTrack) {
this.initTrack = initTrack;
}
public boolean isRedirect() {
return redirect;
}

@ -1153,9 +1153,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void onCheck(ErrorEvent event) {
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_BEHIND_LIVE_WINDOW) mPlayers.seekToDefaultPosition();
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
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.getRetry() == 1) 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);
}

Loading…
Cancel
Save