Player decode

pull/301/head
okjack 2 years ago
parent f062cbb035
commit c151a013ff
  1. 11
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 29
      app/src/leanback/res/layout/activity_setting_player.xml
  4. 8
      app/src/main/java/com/fongmi/android/tv/Setting.java
  5. 4
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  6. 21
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  7. 1
      app/src/main/res/values-zh-rCN/strings.xml
  8. 1
      app/src/main/res/values-zh-rTW/strings.xml
  9. 1
      app/src/main/res/values/strings.xml
  10. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  11. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ControlDialog.java
  12. 11
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  13. 29
      app/src/mobile/res/layout/fragment_setting_player.xml

@ -26,6 +26,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
private ActivitySettingPlayerBinding mBinding;
private String[] caption;
private String[] player;
private String[] decode;
private String[] render;
private String[] scale;
private String[] http;
@ -56,6 +57,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_exo_http))[Setting.getHttp()]);
mBinding.scaleText.setText((scale = ResUtil.getStringArray(R.array.select_scale))[Setting.getScale()]);
mBinding.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]);
mBinding.decodeText.setText((decode = ResUtil.getStringArray(R.array.select_decode))[Setting.getDecode(Setting.getPlayer())]);
mBinding.renderText.setText((render = ResUtil.getStringArray(R.array.select_render))[Setting.getRender()]);
mBinding.captionText.setText((caption = ResUtil.getStringArray(R.array.select_caption))[Setting.isCaption() ? 1 : 0]);
}
@ -68,6 +70,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
mBinding.scale.setOnClickListener(this::setScale);
mBinding.buffer.setOnClickListener(this::onBuffer);
mBinding.player.setOnClickListener(this::setPlayer);
mBinding.decode.setOnClickListener(this::setDecode);
mBinding.render.setOnClickListener(this::setRender);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.caption.setOnClickListener(this::setCaption);
@ -125,9 +128,17 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
int index = Setting.getPlayer();
Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index);
mBinding.playerText.setText(player[index]);
mBinding.decodeText.setText(decode[Setting.getDecode(index)]);
setVisible();
}
private void setDecode(View view) {
int player = Setting.getPlayer();
int index = Setting.getDecode(player);
Setting.putDecode(player, index = index == decode.length - 1 ? 0 : ++index);
mBinding.decodeText.setText(decode[index]);
}
private void setRender(View view) {
int index = Setting.getRender();
Setting.putRender(index = index == render.length - 1 ? 0 : ++index);

@ -1001,6 +1001,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void onPlayer() {
mPlayers.togglePlayer();
setPlayerView();
setDecodeView();
onRefresh();
}
@ -1364,6 +1365,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void nextPlayer() {
mPlayers.nextPlayer();
setPlayerView();
setDecodeView();
onRefresh();
}

@ -41,6 +41,35 @@
</LinearLayout>
<LinearLayout
android:id="@+id/decode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_decode"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/decodeText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="Hard" />
</LinearLayout>
<LinearLayout
android:id="@+id/render"
android:layout_width="match_parent"

@ -89,12 +89,12 @@ public class Setting {
Prefers.put("player_live", player);
}
public static int getDecode() {
return Prefers.getInt("decode", Players.HARD);
public static int getDecode(int player) {
return Prefers.getInt("decode_" + player, Players.HARD);
}
public static void putDecode(int decode) {
Prefers.put("decode", decode);
public static void putDecode(int player, int decode) {
Prefers.put("decode_" + player, decode);
}
public static int getRender() {

@ -77,7 +77,7 @@ public class ExoUtil {
}
public static RenderersFactory buildRenderersFactory() {
return new DefaultRenderersFactory(App.get()).setEnableDecoderFallback(true).setExtensionRendererMode(Math.abs(Setting.getDecode() - 2));
return new DefaultRenderersFactory(App.get()).setEnableDecoderFallback(true).setExtensionRendererMode(Math.abs(Setting.getDecode(Players.EXO) - 2));
}
public static CaptionStyleCompat getCaptionStyle() {
@ -145,7 +145,7 @@ public class ExoUtil {
MediaItem.Builder builder = new MediaItem.Builder().setUri(uri);
if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs));
if (drm != null) builder.setDrmConfiguration(drm.get());
builder.setAllowChunklessPreparation(Players.isHard());
builder.setAllowChunklessPreparation(Players.isHard(Players.EXO));
if (mimeType != null) builder.setMimeType(mimeType);
builder.setAds(Sniffer.getRegex(uri));
return builder.build();

@ -81,7 +81,6 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
private long position;
private float speed;
private int decode;
private int player;
private int error;
private int retry;
@ -91,8 +90,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
return type == EXO;
}
public static boolean isHard() {
return Setting.getDecode() == HARD;
public static boolean isHard(int player) {
return Setting.getDecode(player) == HARD;
}
public boolean isExo() {
@ -105,7 +104,6 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
public Players init(Activity activity) {
player = Setting.getPlayer();
decode = Setting.getDecode();
builder = new StringBuilder();
runnable = ErrorEvent::timeout;
formatter = new Formatter(builder, Locale.getDefault());
@ -142,7 +140,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
}
private void setupIjk(IjkVideoView view) {
ijkPlayer = view.render(Setting.getRender()).decode(decode);
ijkPlayer = view.render(Setting.getRender()).decode(Setting.getDecode(IJK));
ijkPlayer.addListener(this);
ijkPlayer.setPlayer(player);
}
@ -191,12 +189,12 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
this.player = player;
}
public int getDecode() {
return decode;
public int getDecode(int player) {
return Setting.getDecode(player);
}
public void setDecode(int decode) {
this.decode = decode;
public void setDecode(int player, int decode) {
Setting.putDecode(player, decode);
}
public void setPosition(long position) {
@ -297,7 +295,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
}
public String getDecodeText() {
return ResUtil.getStringArray(R.array.select_decode)[decode];
return ResUtil.getStringArray(R.array.select_decode)[Setting.getDecode(player)];
}
public String setSpeed(float speed) {
@ -340,8 +338,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
}
public void toggleDecode() {
setDecode(decode == HARD ? SOFT : HARD);
Setting.putDecode(decode);
setDecode(player, getDecode(player) == HARD ? SOFT : HARD);
}
public String getPositionTime(long time) {

@ -92,6 +92,7 @@
<!-- Player -->
<string name="player">播放核心</string>
<string name="player_decode">解码方式</string>
<string name="player_render">渲染方式</string>
<string name="player_scale">缩放比例</string>
<string name="player_caption">字幕样式</string>

@ -92,6 +92,7 @@
<!-- Player -->
<string name="player">播放核心</string>
<string name="player_decode">解碼方式</string>
<string name="player_render">渲染方式</string>
<string name="player_scale">縮放比例</string>
<string name="player_caption">字幕樣式</string>

@ -92,6 +92,7 @@
<!-- Player -->
<string name="player">Player</string>
<string name="player_decode">Decode</string>
<string name="player_render">Render</string>
<string name="player_scale">Scale</string>
<string name="player_caption">Caption style</string>

@ -403,6 +403,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void setDecodeView() {
mBinding.control.action.decode.setText(mPlayers.getDecodeText());
if (mControlDialog != null && mControlDialog.isVisible()) mControlDialog.updateDecode();
}
private void setVideoView() {
@ -856,6 +857,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void onPlayer() {
mPlayers.togglePlayer();
setPlayerView();
setDecodeView();
setR1Callback();
onRefresh();
}
@ -1333,6 +1335,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void nextPlayer() {
mPlayers.nextPlayer();
setPlayerView();
setDecodeView();
onRefresh();
}

@ -215,6 +215,10 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
binding.player.setText(parent.control.action.player.getText());
}
public void updateDecode() {
binding.decode.setText(parent.control.action.decode.getText());
}
public void setParseVisible(boolean visible) {
binding.parse.setVisibility(visible ? View.VISIBLE : View.GONE);
binding.parseText.setVisibility(visible ? View.VISIBLE : View.GONE);

@ -31,6 +31,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
private String[] background;
private String[] caption;
private String[] player;
private String[] decode;
private String[] render;
private String[] scale;
private String[] http;
@ -62,6 +63,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_exo_http))[Setting.getHttp()]);
mBinding.scaleText.setText((scale = ResUtil.getStringArray(R.array.select_scale))[Setting.getScale()]);
mBinding.playerText.setText((player = ResUtil.getStringArray(R.array.select_player))[Setting.getPlayer()]);
mBinding.decodeText.setText((decode = ResUtil.getStringArray(R.array.select_decode))[Setting.getDecode(Setting.getPlayer())]);
mBinding.renderText.setText((render = ResUtil.getStringArray(R.array.select_render))[Setting.getRender()]);
mBinding.captionText.setText((caption = ResUtil.getStringArray(R.array.select_caption))[Setting.isCaption() ? 1 : 0]);
mBinding.backgroundText.setText((background = ResUtil.getStringArray(R.array.select_background))[Setting.getBackground()]);
@ -75,6 +77,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
mBinding.scale.setOnClickListener(this::onScale);
mBinding.buffer.setOnClickListener(this::onBuffer);
mBinding.player.setOnClickListener(this::setPlayer);
mBinding.decode.setOnClickListener(this::setDecode);
mBinding.render.setOnClickListener(this::setRender);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.caption.setOnClickListener(this::setCaption);
@ -136,9 +139,17 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
int index = Setting.getPlayer();
Setting.putPlayer(index = index == player.length - 1 ? 0 : ++index);
mBinding.playerText.setText(player[index]);
mBinding.decodeText.setText(decode[Setting.getDecode(index)]);
setVisible();
}
private void setDecode(View view) {
int player = Setting.getPlayer();
int index = Setting.getDecode(player);
Setting.putDecode(player, index = index == decode.length - 1 ? 0 : ++index);
mBinding.decodeText.setText(decode[index]);
}
private void setRender(View view) {
int index = Setting.getRender();
Setting.putRender(index = index == render.length - 1 ? 0 : ++index);

@ -71,6 +71,35 @@
</LinearLayout>
<LinearLayout
android:id="@+id/decode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_decode"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/decodeText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="Hard" />
</LinearLayout>
<LinearLayout
android:id="@+id/render"
android:layout_width="match_parent"

Loading…
Cancel
Save