From a0d06297246934f6c6fc945ad087ed2db348b543 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 10 May 2023 10:15:01 +0800 Subject: [PATCH] Ijkplayer support keep_content_on_player_reset --- app/src/leanback/res/layout/activity_detail.xml | 1 + app/src/leanback/res/layout/activity_live.xml | 1 + app/src/mobile/res/layout/activity_detail.xml | 1 + app/src/mobile/res/layout/activity_live.xml | 1 + .../ijk/media/player/ui/IjkVideoView.java | 16 ++++++++++++++-- ijkplayer/src/main/res/values/attrs.xml | 10 ++++++++++ 6 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 ijkplayer/src/main/res/values/attrs.xml diff --git a/app/src/leanback/res/layout/activity_detail.xml b/app/src/leanback/res/layout/activity_detail.xml index f9d144e9b..6d5a499e6 100644 --- a/app/src/leanback/res/layout/activity_detail.xml +++ b/app/src/leanback/res/layout/activity_detail.xml @@ -37,6 +37,7 @@ diff --git a/app/src/leanback/res/layout/activity_live.xml b/app/src/leanback/res/layout/activity_live.xml index c6e9cee7f..c567a517b 100644 --- a/app/src/leanback/res/layout/activity_live.xml +++ b/app/src/leanback/res/layout/activity_live.xml @@ -32,6 +32,7 @@ diff --git a/app/src/mobile/res/layout/activity_detail.xml b/app/src/mobile/res/layout/activity_detail.xml index 81064a893..af8d074d4 100644 --- a/app/src/mobile/res/layout/activity_detail.xml +++ b/app/src/mobile/res/layout/activity_detail.xml @@ -32,6 +32,7 @@ diff --git a/app/src/mobile/res/layout/activity_live.xml b/app/src/mobile/res/layout/activity_live.xml index 0d1834d1d..0321c3e25 100644 --- a/app/src/mobile/res/layout/activity_live.xml +++ b/app/src/mobile/res/layout/activity_live.xml @@ -32,6 +32,7 @@ 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 7816067c6..2ce14e9ed 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 @@ -1,6 +1,7 @@ package tv.danmaku.ijk.media.player.ui; import android.content.Context; +import android.content.res.TypedArray; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; @@ -42,7 +43,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private static final int RENDER_SURFACE_VIEW = 0; private static final int RENDER_TEXTURE_VIEW = 1; - private int mVideoRotationDegree; private int mVideoWidth; private int mVideoHeight; @@ -57,6 +57,8 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private long mCurrentBufferPosition; private float mCurrentSpeed; + private boolean mKeepContentOnPlayerReset; + private IRenderView.ISurfaceHolder mSurfaceHolder; private IMediaPlayer.Listener mListener; private IRenderView mRenderView; @@ -78,6 +80,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl super(context, attrs, defStyleAttr); LayoutInflater.from(context).inflate(R.layout.ijk_player_view, this); mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); + if (attrs != null) initAttr(context, attrs, defStyleAttr); mContentFrame = findViewById(R.id.ijk_content_frame); mSubtitleView = findViewById(R.id.ijk_subtitle); mCurrentState = STATE_IDLE; @@ -85,6 +88,15 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl mCurrentSpeed = 1; } + private void initAttr(Context context, AttributeSet attrs, int defStyleAttr) { + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.IjkVideoView, defStyleAttr, 0); + try { + mKeepContentOnPlayerReset = a.getBoolean(R.styleable.IjkVideoView_keep_content_on_player_reset, mKeepContentOnPlayerReset); + } finally { + a.recycle(); + } + } + public IjkVideoView decode(int decode) { mCurrentDecode = decode; return this; @@ -147,6 +159,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl } private void setVideoURI(Uri uri, Map headers) { + if (!mKeepContentOnPlayerReset) removeRenderView(); openVideo(uri, headers); requestLayout(); invalidate(); @@ -440,7 +453,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public void onInfo(IMediaPlayer mp, int what, int extra) { mListener.onInfo(mp, what, extra); if (what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED) { - mVideoRotationDegree = extra; if (mRenderView != null) mRenderView.setVideoRotation(extra); } } diff --git a/ijkplayer/src/main/res/values/attrs.xml b/ijkplayer/src/main/res/values/attrs.xml new file mode 100644 index 000000000..4f71ddac8 --- /dev/null +++ b/ijkplayer/src/main/res/values/attrs.xml @@ -0,0 +1,10 @@ + + + + + + + + + +