diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index f67ae1be7..a7bf1429f 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -153,7 +153,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mR1 = this::hideControl; mR2 = this::hideCenter; setRecyclerView(); - setVideoVisible(); + setPlayerView(); setVideoView(); setViewModel(); getDetail(); @@ -170,6 +170,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.scale.setOnClickListener(view -> onScale()); mBinding.control.speed.setOnClickListener(view -> onSpeed()); mBinding.control.player.setOnClickListener(view -> onPlayer()); + mBinding.control.decode.setOnClickListener(view -> onDecode()); mBinding.control.tracks.setOnClickListener(view -> onTracks()); mBinding.control.ending.setOnClickListener(view -> onEnding()); mBinding.control.opening.setOnClickListener(view -> onOpening()); @@ -210,18 +211,21 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mParseAdapter.setItems(ApiConfig.get().getParses(), null); } - private void setVideoVisible() { + private void setPlayerView() { getExo().setVisibility(mPlayers.isExo() ? View.VISIBLE : View.GONE); getIjk().setVisibility(mPlayers.isIjk() ? View.VISIBLE : View.GONE); + mBinding.control.decode.setVisibility(mPlayers.isExo() ? View.GONE : View.VISIBLE); } private void setVideoView() { - mPlayers.setupIjk(mBinding.ijk); + mPlayers.setupIjk(getIjk()); setScale(Prefers.getVodScale()); getExo().setPlayer(mPlayers.exo()); getIjk().setRender(Prefers.getRender()); + getIjk().setDecode(Prefers.getDecode()); getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle()); mBinding.control.player.setText(ResUtil.getStringArray(R.array.select_player)[Prefers.getPlayer()]); + mBinding.control.decode.setText(ResUtil.getStringArray(R.array.select_decode)[Prefers.getDecode()]); mBinding.control.speed.setText(mPlayers.getSpeedText()); } @@ -474,11 +478,21 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis if (SoLoader.isFail()) return; int index = Prefers.getPlayer(); CharSequence[] array = ResUtil.getStringArray(R.array.select_player); - Prefers.putPlayer(index = index == array.length - 1 ? 0 : ++index); + Prefers.putPlayer(index = index == 0 ? 1 : 0); mBinding.control.player.setText(array[index]); App.post(() -> getPlayer(false), 250); - setVideoVisible(); mPlayers.toggle(); + setPlayerView(); + } + + private void onDecode() { + if (mPlayers.isExo()) return; + int index = Prefers.getDecode(); + CharSequence[] array = ResUtil.getStringArray(R.array.select_decode); + Prefers.putDecode(index = index == 0 ? 1 : 0); + mBinding.control.decode.setText(array[index]); + mPlayers.setDecode(index); + getPlayer(false); } private void onTracks() { 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 e14403a98..b91c4f368 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 @@ -127,7 +127,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mFormatTime = new SimpleDateFormat("yyyy-MM-ddHH:mm", Locale.getDefault()); mHides = new ArrayList<>(); setRecyclerView(); - setVideoVisible(); + setPlayerView(); setVideoView(); setViewModel(); getLive(); @@ -142,6 +142,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.control.scale.setOnClickListener(view -> onScale()); mBinding.control.speed.setOnClickListener(view -> onSpeed()); mBinding.control.player.setOnClickListener(view -> onPlayer()); + mBinding.control.decode.setOnClickListener(view -> onDecode()); mBinding.control.tracks.setOnClickListener(view -> onTracks()); mBinding.control.line.setOnClickListener(view -> nextLine(false)); mBinding.control.speed.setOnLongClickListener(view -> onSpeedLong()); @@ -160,25 +161,28 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.channel.setAdapter(new ItemBridgeAdapter(mChannelAdapter = new ArrayObjectAdapter(new ChannelPresenter(this)))); } - private void setVideoVisible() { + private void setPlayerView() { getExo().setVisibility(mPlayers.isExo() ? View.VISIBLE : View.GONE); getIjk().setVisibility(mPlayers.isIjk() ? View.VISIBLE : View.GONE); + mBinding.control.decode.setVisibility(mPlayers.isExo() ? View.GONE : View.VISIBLE); } private void setVideoView() { - mPlayers.setupIjk(mBinding.ijk); + mPlayers.setupIjk(getIjk()); getExo().setPlayer(mPlayers.exo()); getExo().setResizeMode(Prefers.getLiveScale()); getExo().setOnClickListener(view -> onToggle()); getExo().setOnLongClickListener(view -> onLongPress()); getIjk().setResizeMode(Prefers.getLiveScale()); getIjk().setRender(Prefers.getRender()); + getIjk().setDecode(Prefers.getDecode()); getIjk().setOnClickListener(view -> onToggle()); getIjk().setOnLongClickListener(view -> onLongPress()); + mBinding.control.speed.setText(mPlayers.getSpeedText()); mBinding.control.home.setVisibility(LiveConfig.isOnly() ? View.GONE : View.VISIBLE); mBinding.control.player.setText(ResUtil.getStringArray(R.array.select_player)[Prefers.getPlayer()]); + mBinding.control.decode.setText(ResUtil.getStringArray(R.array.select_decode)[Prefers.getDecode()]); mBinding.control.scale.setText(ResUtil.getStringArray(R.array.select_scale)[Prefers.getLiveScale()]); - mBinding.control.speed.setText(mPlayers.getSpeedText()); } private void setViewModel() { @@ -274,11 +278,21 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick if (SoLoader.isFail()) return; int index = Prefers.getPlayer(); CharSequence[] array = ResUtil.getStringArray(R.array.select_player); - Prefers.putPlayer(index = index == array.length - 1 ? 0 : ++index); + Prefers.putPlayer(index = index == 0 ? 1 : 0); mBinding.control.player.setText(array[index]); App.post(this::getUrl, 250); - setVideoVisible(); mPlayers.toggle(); + setPlayerView(); + } + + private void onDecode() { + if (mPlayers.isExo()) return; + int index = Prefers.getDecode(); + CharSequence[] array = ResUtil.getStringArray(R.array.select_decode); + Prefers.putDecode(index = index == 0 ? 1 : 0); + mBinding.control.decode.setText(array[index]); + mPlayers.setDecode(index); + getUrl(); } private void onTracks() { @@ -632,7 +646,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick protected void onResume() { super.onResume(); Clock.start(mBinding.widget.time); - mBinding.ijk.start(); mPlayers.play(); } diff --git a/app/src/leanback/res/layout/view_control_live.xml b/app/src/leanback/res/layout/view_control_live.xml index 575623dc7..eff5f3080 100644 --- a/app/src/leanback/res/layout/view_control_live.xml +++ b/app/src/leanback/res/layout/view_control_live.xml @@ -86,6 +86,19 @@ android:focusableInTouchMode="true" android:textColor="@color/white" android:textSize="14sp" + tools:text="EXO" /> + + + + 5 * 60 * 1000; - } - - public boolean canNext() { - return getPosition() >= getDuration(); - } - public void play() { if (isExo()) exoPlayer.play(); else if (isIjk()) ijkPlayer.start(); @@ -204,6 +200,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM else if (isIjk()) releaseIjk(); } + public boolean isVod() { + return getDuration() > 5 * 60 * 1000; + } + + public boolean canNext() { + return getPosition() >= getDuration(); + } + public void start(Channel channel) { setMediaSource(channel.getHeaders(), channel.getUrl()); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java index 6790277e2..c9243b95f 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java @@ -75,6 +75,14 @@ public class Prefers { put("player", player); } + public static int getDecode() { + return getInt("decode", 0); + } + + public static void putDecode(int decode) { + put("decode", decode); + } + public static int getRender() { return getInt("render", 0); } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 07d17522d..e6e355a0b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -98,9 +98,14 @@ 全部 - - 硬解 + 软解 + 硬解 + + + + EXO + IJK diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fbdee59a1..148c1e6a1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -98,9 +98,14 @@ 全部 - - 硬解 + 軟解 + 硬解 + + + + EXO + IJK diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 452724efc..16fd6b555 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -98,9 +98,14 @@ All + + Soft + Hard + + - Hardware - Software + EXO + IJK diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index 4f7c8d7fe..9418f215c 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -50,6 +50,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private float mCurrentSpeed = 1; private int mCurrentAspectRatio; private int mCurrentRender; + private int mCurrentDecode; private int mStartPosition; private int mCurrentState = STATE_IDLE; @@ -449,6 +450,10 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl return mCurrentSpeed; } + public void setDecode(int decode) { + this.mCurrentDecode = decode; + } + public Size getSize() { return new Size(mVideoWidth, mVideoHeight); } @@ -520,10 +525,10 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl mIjkPlayer.setOption(player, "fast", 1); mIjkPlayer.setOption(player, "framedrop", 1); mIjkPlayer.setOption(player, "max-buffer-size", 1024 * 1024); - mIjkPlayer.setOption(player, "mediacodec", 0); - mIjkPlayer.setOption(player, "mediacodec-auto-rotate", 0); - mIjkPlayer.setOption(player, "mediacodec-handle-resolution-change", 0); - mIjkPlayer.setOption(player, "mediacodec-hevc", 0); + mIjkPlayer.setOption(player, "mediacodec", mCurrentDecode); + mIjkPlayer.setOption(player, "mediacodec-auto-rotate", mCurrentDecode); + mIjkPlayer.setOption(player, "mediacodec-handle-resolution-change", mCurrentDecode); + mIjkPlayer.setOption(player, "mediacodec-hevc", mCurrentDecode); mIjkPlayer.setOption(player, "min-frames", 1024); mIjkPlayer.setOption(player, "opensles", 0); mIjkPlayer.setOption(player, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);