From 4633a6aa35c305381c11d6a6bb2439a91b735147 Mon Sep 17 00:00:00 2001 From: guoshuyu Date: Tue, 22 May 2018 14:06:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4view=E5=B1=82=E5=B8=A6IMediaP?= =?UTF-8?q?layer=E7=9A=84=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gsyvideoplayer/WebDetailActivity.java | 2 +- .../exo/GSYExoPlayerManager.java | 85 +++++++++++++++ .../video/DanmakuVideoPlayer.java | 3 +- .../video/PreViewGSYVideoPlayer.java | 3 +- .../gsyvideoplayer/video/SampleVideo.java | 3 +- .../gsyvideoplayer/video/SmartPickVideo.java | 7 +- .../gsyvideoplayer/GSYVideoBaseManager.java | 102 ++++++++++++++++-- .../player/EXO2PlayerManager.java | 86 +++++++++++++++ .../player/IJKPlayerManager.java | 84 +++++++++++++++ .../gsyvideoplayer/player/IPlayerManager.java | 22 ++++ .../player/SystemPlayerManager.java | 86 +++++++++++++++ .../video/base/GSYBaseVideoPlayer.java | 10 +- .../video/base/GSYVideoControlView.java | 12 +-- .../video/base/GSYVideoPlayer.java | 2 + .../video/base/GSYVideoView.java | 54 +++++----- .../video/base/GSYVideoViewBridge.java | 32 +++++- 16 files changed, 532 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/example/gsyvideoplayer/WebDetailActivity.java b/app/src/main/java/com/example/gsyvideoplayer/WebDetailActivity.java index d423da2..459972d 100644 --- a/app/src/main/java/com/example/gsyvideoplayer/WebDetailActivity.java +++ b/app/src/main/java/com/example/gsyvideoplayer/WebDetailActivity.java @@ -123,7 +123,7 @@ public class WebDetailActivity extends GSYBaseActivityDetail optionModelList) { if (optionModelList != null && optionModelList.size() > 0) { for (VideoOptionModel videoOptionModel : optionModelList) { diff --git a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/IPlayerManager.java b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/IPlayerManager.java index b659744..cb81843 100644 --- a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/IPlayerManager.java +++ b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/IPlayerManager.java @@ -64,4 +64,26 @@ public interface IPlayerManager { void setSpeedPlaying(float speed, boolean soundTouch); void setSpeed(float speed, boolean soundTouch); + + void start(); + + void stop(); + + void pause(); + + int getVideoWidth(); + + int getVideoHeight(); + + boolean isPlaying(); + + void seekTo(long time); + + long getCurrentPosition(); + + long getDuration(); + + int getVideoSarNum(); + + int getVideoSarDen(); } diff --git a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/SystemPlayerManager.java b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/SystemPlayerManager.java index 34c4677..6657359 100644 --- a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/SystemPlayerManager.java +++ b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/SystemPlayerManager.java @@ -124,6 +124,92 @@ public class SystemPlayerManager implements IPlayerManager { } + + @Override + public void start() { + if (mediaPlayer != null) { + mediaPlayer.start(); + } + } + + @Override + public void stop() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + } + } + + @Override + public void pause() { + if (mediaPlayer != null) { + mediaPlayer.pause(); + } + } + + @Override + public int getVideoWidth() { + if (mediaPlayer != null) { + return mediaPlayer.getVideoWidth(); + } + return 0; + } + + @Override + public int getVideoHeight() { + if (mediaPlayer != null) { + return mediaPlayer.getVideoHeight(); + } + return 0; + } + + @Override + public boolean isPlaying() { + if (mediaPlayer != null) { + return mediaPlayer.isPlaying(); + } + return false; + } + + @Override + public void seekTo(long time) { + if (mediaPlayer != null) { + mediaPlayer.seekTo(time); + } + } + + @Override + public long getCurrentPosition() { + if (mediaPlayer != null) { + return mediaPlayer.getCurrentPosition(); + } + return 0; + } + + @Override + public long getDuration() { + if (mediaPlayer != null) { + return mediaPlayer.getDuration(); + } + return 0; + } + + @Override + public int getVideoSarNum() { + if (mediaPlayer != null) { + return mediaPlayer.getVideoSarNum(); + } + return 1; + } + + @Override + public int getVideoSarDen() { + if (mediaPlayer != null) { + return mediaPlayer.getVideoSarDen(); + } + return 1; + } + + private void setSpeed(float speed) { if (release) { return; diff --git a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java index ec1b466..277aec4 100644 --- a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java +++ b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java @@ -22,7 +22,6 @@ import com.transitionseverywhere.TransitionManager; import java.lang.reflect.Constructor; -import tv.danmaku.ijk.media.player.IMediaPlayer; import static com.shuyu.gsyvideoplayer.utils.CommonUtil.getActionBarHeight; import static com.shuyu.gsyvideoplayer.utils.CommonUtil.getStatusBarHeight; @@ -161,7 +160,7 @@ public abstract class GSYBaseVideoPlayer extends GSYVideoControlView { @Override public void onInfo(int what, int extra) { super.onInfo(what, extra); - if (what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED) { + if (what == getGSYVideoManager().getRotateInfoFlag()) { checkAutoFullSizeWhenFull(); } } @@ -309,7 +308,7 @@ public abstract class GSYBaseVideoPlayer extends GSYVideoControlView { postDelayed(new Runnable() { @Override public void run() { - Debuger.printfLog("GSYVideoBase resolveFullVideoShow isVerticalFullByVideoSize " + isVertical); + Debuger.printfLog("GSYVideoBase resolveFullVideoShow isVerticalFullByVideoSize " + isVertical); //autoFull模式下,非横屏视频视频不横屏,并且不自动旋转 if (!isVertical && isLockLand && mOrientationUtils.getIsLand() != 1) { mOrientationUtils.resolveByClick(); @@ -473,8 +472,8 @@ public abstract class GSYBaseVideoPlayer extends GSYVideoControlView { boolean isVertical = false; int videoHeight = getCurrentVideoHeight(); int videoWidth = getCurrentVideoWidth(); - Debuger.printfLog("GSYVideoBase isVerticalVideo videoHeight " + videoHeight + " videoWidth " + videoWidth); - Debuger.printfLog("GSYVideoBase isVerticalVideo mRotate " + mRotate); + Debuger.printfLog("GSYVideoBase isVerticalVideo videoHeight " + videoHeight + " videoWidth " + videoWidth); + Debuger.printfLog("GSYVideoBase isVerticalVideo mRotate " + mRotate); if (videoHeight > 0 && videoWidth > 0) { if (mRotate == 90 || mRotate == 270) { isVertical = videoWidth > videoHeight; @@ -923,6 +922,7 @@ public abstract class GSYBaseVideoPlayer extends GSYVideoControlView { /** * 是否根据视频尺寸,自动选择竖屏全屏或者横屏全屏,注意,这时候默认旋转无效 + * * @param autoFullWithSize 默认false */ public void setAutoFullWithSize(boolean autoFullWithSize) { diff --git a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoControlView.java b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoControlView.java index 0365e2a..d9b7ab3 100644 --- a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoControlView.java +++ b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoControlView.java @@ -576,10 +576,10 @@ public abstract class GSYVideoControlView extends GSYVideoView implements View.O mVideoAllCallBack.onClickSeekbar(mOriginUrl, mTitle, this); } } - if (getGSYVideoManager().getMediaPlayer() != null && mHadPlay) { + if (getGSYVideoManager() != null && mHadPlay) { try { int time = seekBar.getProgress() * getDuration() / 100; - getGSYVideoManager().getMediaPlayer().seekTo(time); + getGSYVideoManager().seekTo(time); } catch (Exception e) { Debuger.printfWarning(e.toString()); } @@ -714,9 +714,9 @@ public abstract class GSYVideoControlView extends GSYVideoView implements View.O dismissProgressDialog(); dismissVolumeDialog(); dismissBrightnessDialog(); - if (mChangePosition && getGSYVideoManager().getMediaPlayer() != null && (mCurrentState == CURRENT_STATE_PLAYING || mCurrentState == CURRENT_STATE_PAUSE)) { + if (mChangePosition && getGSYVideoManager() != null && (mCurrentState == CURRENT_STATE_PLAYING || mCurrentState == CURRENT_STATE_PAUSE)) { try { - getGSYVideoManager().getMediaPlayer().seekTo(mSeekTimePosition); + getGSYVideoManager().seekTo(mSeekTimePosition); } catch (Exception e) { e.printStackTrace(); } @@ -807,7 +807,7 @@ public abstract class GSYVideoControlView extends GSYVideoView implements View.O startButtonLogic(); } else if (mCurrentState == CURRENT_STATE_PLAYING) { try { - getGSYVideoManager().getMediaPlayer().pause(); + getGSYVideoManager().pause(); } catch (Exception e) { e.printStackTrace(); } @@ -832,7 +832,7 @@ public abstract class GSYVideoControlView extends GSYVideoView implements View.O } } try { - getGSYVideoManager().getMediaPlayer().start(); + getGSYVideoManager().start(); } catch (Exception e) { e.printStackTrace(); } diff --git a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoPlayer.java b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoPlayer.java index fb9ca7f..4cf58a1 100644 --- a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoPlayer.java +++ b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoPlayer.java @@ -29,6 +29,8 @@ public abstract class GSYVideoPlayer extends GSYBaseVideoPlayer { super(context, attrs, defStyleAttr); } + /*******************************下面方法为管理器和播放控件交互的方法****************************************/ + @Override public GSYVideoViewBridge getGSYVideoManager() { GSYVideoManager.instance().initContext(getContext().getApplicationContext()); diff --git a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java index 56fc395..cc79711 100644 --- a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java +++ b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java @@ -28,8 +28,6 @@ import java.io.File; import java.util.HashMap; import java.util.Map; -import tv.danmaku.ijk.media.player.IMediaPlayer; - import static com.shuyu.gsyvideoplayer.utils.CommonUtil.getTextSpeed; /** @@ -208,32 +206,32 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe @Override public int getCurrentVideoWidth() { - if (getGSYVideoManager().getMediaPlayer() != null) { - return getGSYVideoManager().getMediaPlayer().getVideoWidth(); + if (getGSYVideoManager() != null) { + return getGSYVideoManager().getVideoWidth(); } return 0; } @Override public int getCurrentVideoHeight() { - if (getGSYVideoManager().getMediaPlayer() != null) { - return getGSYVideoManager().getMediaPlayer().getVideoHeight(); + if (getGSYVideoManager() != null) { + return getGSYVideoManager().getVideoHeight(); } return 0; } @Override public int getVideoSarNum() { - if (getGSYVideoManager().getMediaPlayer() != null) { - return getGSYVideoManager().getMediaPlayer().getVideoSarNum(); + if (getGSYVideoManager() != null) { + return getGSYVideoManager().getVideoSarNum(); } return 0; } @Override public int getVideoSarDen() { - if (getGSYVideoManager().getMediaPlayer() != null) { - return getGSYVideoManager().getMediaPlayer().getVideoSarDen(); + if (getGSYVideoManager() != null) { + return getGSYVideoManager().getVideoSarDen(); } return 0; } @@ -459,12 +457,12 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe mPauseBeforePrepared = true; } try { - if (getGSYVideoManager().getMediaPlayer() != null && - getGSYVideoManager().getMediaPlayer().isPlaying()) { + if (getGSYVideoManager() != null && + getGSYVideoManager().isPlaying()) { setStateAndUi(CURRENT_STATE_PAUSE); - mCurrentPosition = getGSYVideoManager().getMediaPlayer().getCurrentPosition(); - if (getGSYVideoManager().getMediaPlayer() != null) - getGSYVideoManager().getMediaPlayer().pause(); + mCurrentPosition = getGSYVideoManager().getCurrentPosition(); + if (getGSYVideoManager() != null) + getGSYVideoManager().pause(); } } catch (Exception e) { e.printStackTrace(); @@ -489,11 +487,11 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe mPauseBeforePrepared = false; if (mCurrentState == CURRENT_STATE_PAUSE) { try { - if (mCurrentPosition > 0 && getGSYVideoManager().getMediaPlayer() != null) { + if (mCurrentPosition > 0 && getGSYVideoManager() != null) { if (seek) { - getGSYVideoManager().getMediaPlayer().seekTo(mCurrentPosition); + getGSYVideoManager().seekTo(mCurrentPosition); } - getGSYVideoManager().getMediaPlayer().start(); + getGSYVideoManager().start(); setStateAndUi(CURRENT_STATE_PLAYING); if (mAudioManager != null && !mReleaseWhenLossAudio) { mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); @@ -649,7 +647,7 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe mBackUpPlayingBufferState = -1; } - } else if (what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED) { + } else if (what == getGSYVideoManager().getRotateInfoFlag()) { mRotate = extra; Debuger.printfLog("Video Rotate Info " + extra); if (mTextureView != null) @@ -698,7 +696,7 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe int position = 0; if (mCurrentState == CURRENT_STATE_PLAYING || mCurrentState == CURRENT_STATE_PAUSE) { try { - position = (int) getGSYVideoManager().getMediaPlayer().getCurrentPosition(); + position = (int) getGSYVideoManager().getCurrentPosition(); } catch (Exception e) { e.printStackTrace(); return position; @@ -716,7 +714,7 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe public int getDuration() { int duration = 0; try { - duration = (int) getGSYVideoManager().getMediaPlayer().getDuration(); + duration = (int) getGSYVideoManager().getDuration(); } catch (Exception e) { e.printStackTrace(); return duration; @@ -745,14 +743,14 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe } try { - if (getGSYVideoManager().getMediaPlayer() != null) { - getGSYVideoManager().getMediaPlayer().start(); + if (getGSYVideoManager() != null) { + getGSYVideoManager().start(); } setStateAndUi(CURRENT_STATE_PLAYING); - if (getGSYVideoManager().getMediaPlayer() != null && mSeekOnStart > 0) { - getGSYVideoManager().getMediaPlayer().seekTo(mSeekOnStart); + if (getGSYVideoManager() != null && mSeekOnStart > 0) { + getGSYVideoManager().seekTo(mSeekOnStart); mSeekOnStart = 0; } } catch (Exception e) { @@ -1002,7 +1000,7 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe public void setSpeed(float speed, boolean soundTouch) { this.mSpeed = speed; this.mSoundTouch = soundTouch; - if (getGSYVideoManager().getMediaPlayer() != null) { + if (getGSYVideoManager() != null) { getGSYVideoManager().setSpeed(speed, soundTouch); } } @@ -1038,8 +1036,8 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe */ public void seekTo(long position) { try { - if (getGSYVideoManager().getMediaPlayer() != null && position > 0) { - getGSYVideoManager().getMediaPlayer().seekTo(position); + if (getGSYVideoManager()!= null && position > 0) { + getGSYVideoManager().seekTo(position); } } catch (Exception e) { e.printStackTrace(); diff --git a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoViewBridge.java b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoViewBridge.java index 91eb39e..c556f72 100644 --- a/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoViewBridge.java +++ b/gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoViewBridge.java @@ -4,12 +4,11 @@ import android.content.Context; import android.view.Surface; import com.shuyu.gsyvideoplayer.listener.GSYMediaPlayerListener; +import com.shuyu.gsyvideoplayer.player.IPlayerManager; import java.io.File; import java.util.Map; -import tv.danmaku.ijk.media.player.IMediaPlayer; - /** * Manager 与 View之间的接口 * Created by guoshuyu on 2018/1/25. @@ -48,7 +47,7 @@ public interface GSYVideoViewBridge { /** * 获取当前播放内核 */ - IMediaPlayer getMediaPlayer(); + IPlayerManager getPlayer(); /** * 针对某些内核,缓冲百分比 @@ -119,4 +118,31 @@ public interface GSYVideoViewBridge { * @param soundTouch */ void setSpeedPlaying(float speed, boolean soundTouch); + + /** + * 获取Rotate选择的flag,目前只有ijk用到 + */ + int getRotateInfoFlag(); + + void start(); + + void stop(); + + void pause(); + + int getVideoWidth(); + + int getVideoHeight(); + + boolean isPlaying(); + + void seekTo(long time); + + long getCurrentPosition(); + + long getDuration(); + + int getVideoSarNum(); + + int getVideoSarDen(); } -- GitLab