From e491300a2703013678fb06d830a4e54cb67b614d Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 23 Nov 2022 23:34:37 +0800 Subject: [PATCH] Support video size --- .../tv/ui/activity/DetailActivity.java | 21 +++++-- .../leanback/res/layout/view_widget_vod.xml | 40 +++++++++---- .../com/fongmi/android/tv/player/Players.java | 59 +++++++++++-------- .../ijk/media/player/ui/IjkVideoView.java | 15 ++++- 4 files changed, 92 insertions(+), 43 deletions(-) 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 2b7199c2f..d2d5c843d 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 @@ -368,11 +368,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void exitFullscreen() { - mBinding.widget.info.setVisibility(View.GONE); - mBinding.widget.center.setVisibility(View.GONE); mBinding.video.setForeground(ResUtil.getDrawable(R.drawable.selector_video)); mBinding.video.setLayoutParams(mFrameParams); mFullscreen = false; + hideInfo(); } private void onDesc() { @@ -503,6 +502,17 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.widget.error.setVisibility(View.GONE); } + private void showInfo() { + mBinding.widget.size.setText(mPlayers.getSizeText()); + mBinding.widget.center.setVisibility(View.VISIBLE); + mBinding.widget.info.setVisibility(View.VISIBLE); + } + + private void hideInfo() { + mBinding.widget.center.setVisibility(View.GONE); + mBinding.widget.info.setVisibility(View.GONE); + } + private void showControl() { mBinding.control.getRoot().setVisibility(View.VISIBLE); } @@ -587,7 +597,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis public void run() { mBinding.widget.action.setImageResource(R.drawable.ic_play); mBinding.widget.center.setVisibility(View.GONE); - mBinding.widget.info.setVisibility(View.GONE); + hideInfo(); } }; @@ -652,8 +662,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void onPause(boolean visible) { mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); - mBinding.widget.info.setVisibility(visible ? View.VISIBLE : View.GONE); - mBinding.widget.center.setVisibility(visible ? View.VISIBLE : View.GONE); + if (visible) showInfo(); else hideInfo(); mPlayers.pause(); } @@ -664,7 +673,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis @Override public boolean dispatchKeyEvent(KeyEvent event) { - if (mFullscreen && mBinding.control.tracks.getVisibility() == View.VISIBLE && Utils.isMenuKey(event)) onTracks(); + if (mFullscreen && mBinding.control.tracks.getVisibility() == View.VISIBLE && Utils.isMenuKey(event)) onToggle(); else if (mFullscreen && isGone(mBinding.control.getRoot()) && mKeyDown.hasEvent(event)) return mKeyDown.onKeyDown(event); return super.dispatchKeyEvent(event); } diff --git a/app/src/leanback/res/layout/view_widget_vod.xml b/app/src/leanback/res/layout/view_widget_vod.xml index f022f378a..770e8218a 100644 --- a/app/src/leanback/res/layout/view_widget_vod.xml +++ b/app/src/leanback/res/layout/view_widget_vod.xml @@ -4,22 +4,19 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_height="wrap_content"> + + - + = 2 ? 1f : 0.25f; speed = speed == 5 ? 0.25f : speed + addon; exoPlayer.setPlaybackSpeed(speed); @@ -107,6 +137,7 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM } public String toggleSpeed() { + float speed = getSpeed(); speed = speed == 1 ? 3f : 1f; exoPlayer.setPlaybackSpeed(speed); ijkPlayer.setSpeed(speed); @@ -126,22 +157,6 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM return stringToTime(time); } - public String stringToTime(long time) { - return Util.getStringForTime(builder, formatter, time); - } - - public long getPosition() { - return isExo() ? exoPlayer.getCurrentPosition() : ijkPlayer.getCurrentPosition(); - } - - public long getDuration() { - return isExo() ? exoPlayer.getDuration() : ijkPlayer.getDuration(); - } - - public long getBuffered() { - return isExo() ? exoPlayer.getBufferedPosition() : ijkPlayer.getBufferedPosition(); - } - public void seekTo(int time) { if (time == 0) return; if (isExo()) exoPlayer.seekTo(getPosition() + time); @@ -154,10 +169,6 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM else if (isIjk()) ijkPlayer.seekTo(time); } - public boolean isPlaying() { - return isExo() ? exoPlayer.isPlaying() : ijkPlayer.isPlaying(); - } - public boolean isVod() { return getDuration() > 5 * 60 * 1000; } 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 6ebf6e9c5..72c0c59dc 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 @@ -8,6 +8,7 @@ import android.net.Uri; import android.os.Build; import android.util.AttributeSet; import android.util.Log; +import android.util.Size; import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; @@ -46,6 +47,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public static final int RENDER_SURFACE_VIEW = 0; public static final int RENDER_TEXTURE_VIEW = 1; + private float mCurrentSpeed = 1; private int mCurrentAspectRatio; private int mCurrentRender; @@ -185,6 +187,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl try { createPlayer(); fixUserAgent(); + setSpeed(mCurrentSpeed); setRender(mCurrentRender); mCurrentBufferPosition = 0; mCurrentBufferPercentage = 0; @@ -428,7 +431,17 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl } public void setSpeed(float speed) { - mIjkPlayer.setSpeed(speed); + if (mIjkPlayer != null) mIjkPlayer.setSpeed(speed); + mCurrentSpeed = speed; + } + + public float getSpeed() { + if (mIjkPlayer != null) return mIjkPlayer.getSpeed(); + return mCurrentSpeed; + } + + public Size getSize() { + return new Size(mVideoWidth, mVideoHeight); } @Override