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