From d15bbc76f795314fb33346b382f1b0bf26edac67 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 19 Nov 2022 21:33:05 +0800 Subject: [PATCH] Update IjkVideoView.java --- .../ijk/media/player/ui/IjkVideoView.java | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) 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 0dddf4227..93024bbf6 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 @@ -38,12 +38,15 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private static final int STATE_PAUSED = 4; private static final int STATE_PLAYBACK_COMPLETED = 5; + private static final int codec = IjkMediaPlayer.OPT_CATEGORY_CODEC; + private static final int format = IjkMediaPlayer.OPT_CATEGORY_FORMAT; + private static final int player = IjkMediaPlayer.OPT_CATEGORY_PLAYER; + public static final int RENDER_NONE = -1; public static final int RENDER_SURFACE_VIEW = 0; public static final int RENDER_TEXTURE_VIEW = 1; private int mCurrentAspectRatio; - private int mCurrentRender; private int mCurrentState = STATE_IDLE; private int mTargetState = STATE_IDLE; @@ -100,18 +103,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl subtitleDisplay.setGravity(Gravity.CENTER); FrameLayout.LayoutParams layoutParams_txt = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); addView(subtitleDisplay, layoutParams_txt); - setPlayer(); - } - - private void setPlayer() { - mMediaPlayer = new IjkMediaPlayer(); - mMediaPlayer.setOnPreparedListener(mPreparedListener); - mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener); - mMediaPlayer.setOnCompletionListener(mCompletionListener); - mMediaPlayer.setOnErrorListener(mErrorListener); - mMediaPlayer.setOnInfoListener(mInfoListener); - mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener); - mMediaPlayer.setOnTimedTextListener(mOnTimedTextListener); } private void setRenderView(IRenderView renderView) { @@ -143,11 +134,9 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl case RENDER_TEXTURE_VIEW: TextureRenderView texture = new TextureRenderView(getContext()); if (mMediaPlayer != null) texture.getSurfaceHolder().bindToMediaPlayer(mMediaPlayer); - mCurrentRender = render; setRenderView(texture); break; case RENDER_SURFACE_VIEW: - mCurrentRender = render; setRenderView(new SurfaceRenderView(getContext())); break; } @@ -165,9 +154,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public void setVideoURI(Uri uri, Map headers) { mUri = uri; mHeaders = headers; - mMediaPlayer.reset(); - setRender(mCurrentRender); - setOption(); openVideo(); requestLayout(); invalidate(); @@ -176,6 +162,8 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public void stopPlayback() { if (mMediaPlayer == null) return; mMediaPlayer.stop(); + mMediaPlayer.release(); + mMediaPlayer = null; mCurrentState = STATE_IDLE; mTargetState = STATE_IDLE; AudioManager am = (AudioManager) mAppContext.getSystemService(Context.AUDIO_SERVICE); @@ -185,9 +173,11 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl @TargetApi(Build.VERSION_CODES.M) private void openVideo() { if (mUri == null || mSurfaceHolder == null) return; + release(false); AudioManager am = (AudioManager) mAppContext.getSystemService(Context.AUDIO_SERVICE); am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); try { + createPlayer(); mCurrentBufferPercentage = 0; mMediaPlayer.setDataSource(mAppContext, mUri, mHeaders); bindSurfaceHolder(mMediaPlayer, mSurfaceHolder); @@ -489,10 +479,15 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl return 0; } - private void setOption() { - int codec = IjkMediaPlayer.OPT_CATEGORY_CODEC; - int format = IjkMediaPlayer.OPT_CATEGORY_FORMAT; - int player = IjkMediaPlayer.OPT_CATEGORY_PLAYER; + private void createPlayer() { + mMediaPlayer = new IjkMediaPlayer(); + mMediaPlayer.setOnPreparedListener(mPreparedListener); + mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener); + mMediaPlayer.setOnCompletionListener(mCompletionListener); + mMediaPlayer.setOnErrorListener(mErrorListener); + mMediaPlayer.setOnInfoListener(mInfoListener); + mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener); + mMediaPlayer.setOnTimedTextListener(mOnTimedTextListener); mMediaPlayer.setOption(codec, "skip_loop_filter", 48); mMediaPlayer.setOption(format, "dns_cache_timeout", 600000000); mMediaPlayer.setOption(format, "fflags", "fastseek");