杨充 пре 4 година
родитељ
комит
b3c95815bd
40 измењених фајлова са 326 додато и 157 уклоњено
  1. 6 5
      VideoKernel/src/main/java/com/yc/kernel/impl/exo/ExoMediaPlayer.java
  2. 2 1
      VideoKernel/src/main/java/com/yc/kernel/impl/ijk/IjkVideoPlayer.java
  3. 4 2
      VideoKernel/src/main/java/com/yc/kernel/impl/media/AndroidMediaPlayer.java
  4. 0 25
      VideoKernel/src/main/java/com/yc/kernel/inter/AbstractVideoPlayer.java
  5. 41 0
      VideoKernel/src/main/java/com/yc/kernel/utils/PlayerConstant.java
  6. 1 1
      VideoKernel/src/main/java/com/yc/kernel/utils/VideoLogUtils.java
  7. 60 43
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/BaseVideoController.java
  8. 11 11
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/GestureVideoController.java
  9. 2 2
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/IGestureComponent.java
  10. 15 9
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/player/VideoPlayer.java
  11. 4 1
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/player/VideoPlayerConfig.java
  12. 2 2
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/pip/CustomFloatView.java
  13. 2 2
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/pip/FloatVideoManager.java
  14. 1 2
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomBottomView.java
  15. 1 1
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomCompleteView.java
  16. 1 1
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomErrorView.java
  17. 1 1
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomLiveControlView.java
  18. 1 1
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomPrepareView.java
  19. 1 1
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomTitleView.java
  20. 1 1
      VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/InterControlView.java
  21. 1 14
      app/src/main/java/org/yczbj/ycvideoplayer/BaseApplication.java
  22. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/activity/DetailActivity.java
  23. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/activity/MultipleActivity.java
  24. 8 4
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/activity/NormalActivity.java
  25. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/ad/AdActivity.java
  26. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/ad/AdControlView.java
  27. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/clarity/ClarityActivity.java
  28. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/danmu/DanmuActivity.java
  29. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/danmu/MyDanmakuView.java
  30. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/ListVideoActivity.java
  31. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/PlayerMonitor.java
  32. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/RecyclerViewFragment.java
  33. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/SeamlessPlayFragment.java
  34. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/pip/PipActivity.java
  35. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/pip/PipListActivity.java
  36. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiktok/TikTok2Activity.java
  37. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiktok/TikTokView.java
  38. 1 1
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiny/TestFullActivity.java
  39. 2 2
      app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiny/TinyScreenActivity.java
  40. 134 1
      read/01.视频播放器介绍文档.md

+ 6 - 5
VideoKernel/src/main/java/com/yc/kernel/impl/exo/ExoMediaPlayer.java

@@ -27,6 +27,7 @@ import com.google.android.exoplayer2.util.EventLogger;
 import com.google.android.exoplayer2.util.Util;
 import com.google.android.exoplayer2.util.Util;
 import com.google.android.exoplayer2.video.VideoListener;
 import com.google.android.exoplayer2.video.VideoListener;
 import com.yc.kernel.inter.AbstractVideoPlayer;
 import com.yc.kernel.inter.AbstractVideoPlayer;
+import com.yc.kernel.utils.PlayerConstant;
 import com.yc.kernel.utils.VideoLogUtils;
 import com.yc.kernel.utils.VideoLogUtils;
 
 
 import java.util.Map;
 import java.util.Map;
@@ -118,7 +119,7 @@ public class ExoMediaPlayer extends AbstractVideoPlayer implements VideoListener
         // 设置dataSource
         // 设置dataSource
         if(path==null || path.length()==0){
         if(path==null || path.length()==0){
             if (mPlayerEventListener!=null){
             if (mPlayerEventListener!=null){
-                mPlayerEventListener.onInfo(MEDIA_INFO_URL_NULL, 0);
+                mPlayerEventListener.onInfo(PlayerConstant.MEDIA_INFO_URL_NULL, 0);
             }
             }
             return;
             return;
         }
         }
@@ -381,12 +382,12 @@ public class ExoMediaPlayer extends AbstractVideoPlayer implements VideoListener
         if (mLastReportedPlayWhenReady != playWhenReady || mLastReportedPlaybackState != playbackState) {
         if (mLastReportedPlayWhenReady != playWhenReady || mLastReportedPlaybackState != playbackState) {
             switch (playbackState) {
             switch (playbackState) {
                 case Player.STATE_BUFFERING:
                 case Player.STATE_BUFFERING:
-                    mPlayerEventListener.onInfo(MEDIA_INFO_BUFFERING_START, getBufferedPercentage());
+                    mPlayerEventListener.onInfo(PlayerConstant.MEDIA_INFO_BUFFERING_START, getBufferedPercentage());
                     mIsBuffering = true;
                     mIsBuffering = true;
                     break;
                     break;
                 case Player.STATE_READY:
                 case Player.STATE_READY:
                     if (mIsBuffering) {
                     if (mIsBuffering) {
-                        mPlayerEventListener.onInfo(MEDIA_INFO_BUFFERING_END, getBufferedPercentage());
+                        mPlayerEventListener.onInfo(PlayerConstant.MEDIA_INFO_BUFFERING_END, getBufferedPercentage());
                         mIsBuffering = false;
                         mIsBuffering = false;
                     }
                     }
                     break;
                     break;
@@ -413,7 +414,7 @@ public class ExoMediaPlayer extends AbstractVideoPlayer implements VideoListener
         if (mPlayerEventListener != null) {
         if (mPlayerEventListener != null) {
             mPlayerEventListener.onVideoSizeChanged(width, height);
             mPlayerEventListener.onVideoSizeChanged(width, height);
             if (unappliedRotationDegrees > 0) {
             if (unappliedRotationDegrees > 0) {
-                mPlayerEventListener.onInfo(MEDIA_INFO_VIDEO_ROTATION_CHANGED, unappliedRotationDegrees);
+                mPlayerEventListener.onInfo(PlayerConstant.MEDIA_INFO_VIDEO_ROTATION_CHANGED, unappliedRotationDegrees);
             }
             }
         }
         }
     }
     }
@@ -421,7 +422,7 @@ public class ExoMediaPlayer extends AbstractVideoPlayer implements VideoListener
     @Override
     @Override
     public void onRenderedFirstFrame() {
     public void onRenderedFirstFrame() {
         if (mPlayerEventListener != null && mIsPreparing) {
         if (mPlayerEventListener != null && mIsPreparing) {
-            mPlayerEventListener.onInfo(MEDIA_INFO_VIDEO_RENDERING_START, 0);
+            mPlayerEventListener.onInfo(PlayerConstant.MEDIA_INFO_VIDEO_RENDERING_START, 0);
             mIsPreparing = false;
             mIsPreparing = false;
         }
         }
     }
     }

+ 2 - 1
VideoKernel/src/main/java/com/yc/kernel/impl/ijk/IjkVideoPlayer.java

@@ -26,6 +26,7 @@ import android.text.TextUtils;
 import android.view.Surface;
 import android.view.Surface;
 import android.view.SurfaceHolder;
 import android.view.SurfaceHolder;
 import com.yc.kernel.inter.AbstractVideoPlayer;
 import com.yc.kernel.inter.AbstractVideoPlayer;
+import com.yc.kernel.utils.PlayerConstant;
 import com.yc.kernel.utils.VideoLogUtils;
 import com.yc.kernel.utils.VideoLogUtils;
 
 
 import java.util.Map;
 import java.util.Map;
@@ -153,7 +154,7 @@ public class IjkVideoPlayer extends AbstractVideoPlayer {
         // 设置dataSource
         // 设置dataSource
         if(path==null || path.length()==0){
         if(path==null || path.length()==0){
             if (mPlayerEventListener!=null){
             if (mPlayerEventListener!=null){
-                mPlayerEventListener.onInfo(MEDIA_INFO_URL_NULL, 0);
+                mPlayerEventListener.onInfo(PlayerConstant.MEDIA_INFO_URL_NULL, 0);
             }
             }
             return;
             return;
         }
         }

+ 4 - 2
VideoKernel/src/main/java/com/yc/kernel/impl/media/AndroidMediaPlayer.java

@@ -25,6 +25,8 @@ import android.os.Build;
 import android.view.Surface;
 import android.view.Surface;
 import android.view.SurfaceHolder;
 import android.view.SurfaceHolder;
 import com.yc.kernel.inter.AbstractVideoPlayer;
 import com.yc.kernel.inter.AbstractVideoPlayer;
+import com.yc.kernel.utils.PlayerConstant;
+
 import java.util.Map;
 import java.util.Map;
 
 
 
 
@@ -83,7 +85,7 @@ public class AndroidMediaPlayer extends AbstractVideoPlayer {
         // 设置dataSource
         // 设置dataSource
         if(path==null || path.length()==0){
         if(path==null || path.length()==0){
             if (mPlayerEventListener!=null){
             if (mPlayerEventListener!=null){
-                mPlayerEventListener.onInfo(MEDIA_INFO_URL_NULL, 0);
+                mPlayerEventListener.onInfo(PlayerConstant.MEDIA_INFO_URL_NULL, 0);
             }
             }
             return;
             return;
         }
         }
@@ -351,7 +353,7 @@ public class AndroidMediaPlayer extends AbstractVideoPlayer {
         @Override
         @Override
         public boolean onInfo(MediaPlayer mp, int what, int extra) {
         public boolean onInfo(MediaPlayer mp, int what, int extra) {
             //解决MEDIA_INFO_VIDEO_RENDERING_START多次回调问题
             //解决MEDIA_INFO_VIDEO_RENDERING_START多次回调问题
-            if (what == AbstractVideoPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
+            if (what == PlayerConstant.MEDIA_INFO_VIDEO_RENDERING_START) {
                 if (mIsPreparing) {
                 if (mIsPreparing) {
                     mPlayerEventListener.onInfo(what, extra);
                     mPlayerEventListener.onInfo(what, extra);
                     mIsPreparing = false;
                     mIsPreparing = false;

+ 0 - 25
VideoKernel/src/main/java/com/yc/kernel/inter/AbstractVideoPlayer.java

@@ -33,31 +33,6 @@ import java.util.Map;
  */
  */
 public abstract class AbstractVideoPlayer {
 public abstract class AbstractVideoPlayer {
 
 
-    /**
-     * 视频传入url为空
-     */
-    public static final int MEDIA_INFO_URL_NULL = -1;
-
-    /**
-     * 开始渲染视频画面
-     */
-    public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3;
-
-    /**
-     * 缓冲开始
-     */
-    public static final int MEDIA_INFO_BUFFERING_START = 701;
-
-    /**
-     * 缓冲结束
-     */
-    public static final int MEDIA_INFO_BUFFERING_END = 702;
-
-    /**
-     * 视频旋转信息
-     */
-    public static final int MEDIA_INFO_VIDEO_ROTATION_CHANGED = 10001;
-
     /**
     /**
      * 播放器事件回调
      * 播放器事件回调
      */
      */

+ 41 - 0
VideoKernel/src/main/java/com/yc/kernel/utils/PlayerConstant.java

@@ -0,0 +1,41 @@
+package com.yc.kernel.utils;
+
+/**
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/10/21
+ *     desc  : 常量类
+ *     revise:
+ * </pre>
+ */
+public final class PlayerConstant {
+
+
+    /**
+     * 视频传入url为空
+     */
+    public static final int MEDIA_INFO_URL_NULL = -1;
+
+    /**
+     * 开始渲染视频画面
+     */
+    public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3;
+
+    /**
+     * 缓冲开始
+     */
+    public static final int MEDIA_INFO_BUFFERING_START = 701;
+
+    /**
+     * 缓冲结束
+     */
+    public static final int MEDIA_INFO_BUFFERING_END = 702;
+
+    /**
+     * 视频旋转信息
+     */
+    public static final int MEDIA_INFO_VIDEO_ROTATION_CHANGED = 10001;
+
+
+}

+ 1 - 1
VideoKernel/src/main/java/com/yc/kernel/utils/VideoLogUtils.java

@@ -29,7 +29,7 @@ import android.util.Log;
 public final class VideoLogUtils {
 public final class VideoLogUtils {
 
 
     private static final String TAG = "YCVideoPlayer";
     private static final String TAG = "YCVideoPlayer";
-    private static boolean isLog = true;
+    private static boolean isLog = false;
 
 
     /**
     /**
      * 设置是否开启日志
      * 设置是否开启日志

+ 60 - 43
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/BaseVideoController.java

@@ -38,7 +38,7 @@ import org.yczbj.ycvideoplayerlib.player.VideoPlayer;
 import org.yczbj.ycvideoplayerlib.tool.StatesCutoutUtils;
 import org.yczbj.ycvideoplayerlib.tool.StatesCutoutUtils;
 import org.yczbj.ycvideoplayerlib.tool.NetworkUtils;
 import org.yczbj.ycvideoplayerlib.tool.NetworkUtils;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 
 
 import com.yc.kernel.utils.VideoLogUtils;
 import com.yc.kernel.utils.VideoLogUtils;
 
 
@@ -97,18 +97,19 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     private boolean mIsStartProgress;
     private boolean mIsStartProgress;
 
 
     //保存了所有的控制组件
     //保存了所有的控制组件
-    protected LinkedHashMap<IControlComponent, Boolean> mControlComponents = new LinkedHashMap<>();
+    protected LinkedHashMap<InterControlView, Boolean> mControlComponents = new LinkedHashMap<>();
 
 
     private Animation mShowAnim;
     private Animation mShowAnim;
     private Animation mHideAnim;
     private Animation mHideAnim;
 
 
     public BaseVideoController(@NonNull Context context) {
     public BaseVideoController(@NonNull Context context) {
+        //创建
         this(context, null);
         this(context, null);
     }
     }
 
 
     public BaseVideoController(@NonNull Context context, @Nullable AttributeSet attrs) {
     public BaseVideoController(@NonNull Context context, @Nullable AttributeSet attrs) {
+        //创建
         this(context, attrs, 0);
         this(context, attrs, 0);
-
     }
     }
 
 
     public BaseVideoController(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
     public BaseVideoController(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
@@ -116,6 +117,36 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
         initView(context);
         initView(context);
     }
     }
 
 
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        if (mShowAnim != null){
+            mShowAnim.cancel();
+            mShowAnim = null;
+        }
+        if (mHideAnim != null){
+            mHideAnim.cancel();
+            mHideAnim = null;
+        }
+    }
+
+    @Override
+    public void onWindowFocusChanged(boolean hasWindowFocus) {
+        super.onWindowFocusChanged(hasWindowFocus);
+        if (mControlWrapper.isPlaying() && (mEnableOrientation || mControlWrapper.isFullScreen())) {
+            if (hasWindowFocus) {
+                postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        mOrientationHelper.enable();
+                    }
+                }, 800);
+            } else {
+                mOrientationHelper.disable();
+            }
+        }
+    }
+
     protected void initView(Context context) {
     protected void initView(Context context) {
         if (getLayoutId() != 0) {
         if (getLayoutId() != 0) {
             LayoutInflater.from(getContext()).inflate(getLayoutId(), this, true);
             LayoutInflater.from(getContext()).inflate(getLayoutId(), this, true);
@@ -123,12 +154,10 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
         mOrientationHelper = new OrientationHelper(context.getApplicationContext());
         mOrientationHelper = new OrientationHelper(context.getApplicationContext());
         mEnableOrientation = VideoViewManager.getConfig().mEnableOrientation;
         mEnableOrientation = VideoViewManager.getConfig().mEnableOrientation;
         mAdaptCutout = VideoViewManager.getConfig().mAdaptCutout;
         mAdaptCutout = VideoViewManager.getConfig().mAdaptCutout;
-
         mShowAnim = new AlphaAnimation(0f, 1f);
         mShowAnim = new AlphaAnimation(0f, 1f);
         mShowAnim.setDuration(300);
         mShowAnim.setDuration(300);
         mHideAnim = new AlphaAnimation(1f, 0f);
         mHideAnim = new AlphaAnimation(1f, 0f);
         mHideAnim.setDuration(300);
         mHideAnim.setDuration(300);
-
         mActivity = PlayerUtils.scanForActivity(context);
         mActivity = PlayerUtils.scanForActivity(context);
     }
     }
 
 
@@ -144,8 +173,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     public void setMediaPlayer(InterVideoPlayer mediaPlayer) {
     public void setMediaPlayer(InterVideoPlayer mediaPlayer) {
         mControlWrapper = new ControlWrapper(mediaPlayer, this);
         mControlWrapper = new ControlWrapper(mediaPlayer, this);
         //绑定ControlComponent和Controller
         //绑定ControlComponent和Controller
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             component.attach(mControlWrapper);
             component.attach(mControlWrapper);
         }
         }
         //开始监听设备方向
         //开始监听设备方向
@@ -155,8 +184,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     /**
     /**
      * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让ControlComponent位于不同的层级
      * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让ControlComponent位于不同的层级
      */
      */
-    public void addControlComponent(IControlComponent... component) {
-        for (IControlComponent item : component) {
+    public void addControlComponent(InterControlView... component) {
+        for (InterControlView item : component) {
             addControlComponent(item, false);
             addControlComponent(item, false);
         }
         }
     }
     }
@@ -166,7 +195,7 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      *
      *
      * @param isPrivate 是否为独有的组件,如果是就不添加到控制器中
      * @param isPrivate 是否为独有的组件,如果是就不添加到控制器中
      */
      */
-    public void addControlComponent(IControlComponent component, boolean isPrivate) {
+    public void addControlComponent(InterControlView component, boolean isPrivate) {
         mControlComponents.put(component, isPrivate);
         mControlComponents.put(component, isPrivate);
         if (mControlWrapper != null) {
         if (mControlWrapper != null) {
             component.attach(mControlWrapper);
             component.attach(mControlWrapper);
@@ -180,22 +209,22 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     /**
     /**
      * 移除控制组件
      * 移除控制组件
      */
      */
-    public void removeControlComponent(IControlComponent component) {
+    public void removeControlComponent(InterControlView component) {
         removeView(component.getView());
         removeView(component.getView());
         mControlComponents.remove(component);
         mControlComponents.remove(component);
     }
     }
 
 
     public void removeAllControlComponent() {
     public void removeAllControlComponent() {
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
             removeView(next.getKey().getView());
             removeView(next.getKey().getView());
         }
         }
         mControlComponents.clear();
         mControlComponents.clear();
     }
     }
 
 
     public void removeAllPrivateComponents() {
     public void removeAllPrivateComponents() {
-        Iterator<Map.Entry<IControlComponent, Boolean>> it = mControlComponents.entrySet().iterator();
+        Iterator<Map.Entry<InterControlView, Boolean>> it = mControlComponents.entrySet().iterator();
         while (it.hasNext()) {
         while (it.hasNext()) {
-            Map.Entry<IControlComponent, Boolean> next = it.next();
+            Map.Entry<InterControlView, Boolean> next = it.next();
             if (next.getValue()) {
             if (next.getValue()) {
                 it.remove();
                 it.remove();
             }
             }
@@ -300,7 +329,9 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      */
      */
     @Override
     @Override
     public void startProgress() {
     public void startProgress() {
-        if (mIsStartProgress) return;
+        if (mIsStartProgress) {
+            return;
+        }
         post(mShowProgress);
         post(mShowProgress);
         mIsStartProgress = true;
         mIsStartProgress = true;
     }
     }
@@ -437,24 +468,6 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
         return false;
         return false;
     }
     }
 
 
-    @Override
-    public void onWindowFocusChanged(boolean hasWindowFocus) {
-        super.onWindowFocusChanged(hasWindowFocus);
-        if (mControlWrapper.isPlaying()
-                && (mEnableOrientation || mControlWrapper.isFullScreen())) {
-            if (hasWindowFocus) {
-                postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        mOrientationHelper.enable();
-                    }
-                }, 800);
-            } else {
-                mOrientationHelper.disable();
-            }
-        }
-    }
-
     /**
     /**
      * 是否自动旋转, 默认不自动旋转
      * 是否自动旋转, 默认不自动旋转
      */
      */
@@ -549,8 +562,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     private void handleVisibilityChanged(boolean isVisible, Animation anim) {
     private void handleVisibilityChanged(boolean isVisible, Animation anim) {
         if (!mIsLocked) {
         if (!mIsLocked) {
             //没锁住时才向ControlComponent下发此事件
             //没锁住时才向ControlComponent下发此事件
-            for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-                IControlComponent component = next.getKey();
+            for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+                InterControlView component = next.getKey();
                 component.onVisibilityChanged(isVisible, anim);
                 component.onVisibilityChanged(isVisible, anim);
             }
             }
         }
         }
@@ -568,8 +581,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     }
     }
 
 
     private void handlePlayStateChanged(int playState) {
     private void handlePlayStateChanged(int playState) {
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             component.onPlayStateChanged(playState);
             component.onPlayStateChanged(playState);
         }
         }
         onPlayStateChanged(playState);
         onPlayStateChanged(playState);
@@ -598,9 +611,13 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
         }
         }
     }
     }
 
 
+    /**
+     * 播放器状态改变
+     * @param playerState                       播放器状态
+     */
     private void handlePlayerStateChanged(int playerState) {
     private void handlePlayerStateChanged(int playerState) {
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             component.onPlayerStateChanged(playerState);
             component.onPlayerStateChanged(playerState);
         }
         }
         onPlayerStateChanged(playerState);
         onPlayerStateChanged(playerState);
@@ -636,8 +653,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     }
     }
 
 
     private void handleSetProgress(int duration, int position) {
     private void handleSetProgress(int duration, int position) {
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             component.setProgress(duration, position);
             component.setProgress(duration, position);
         }
         }
         setProgress(duration, position);
         setProgress(duration, position);
@@ -654,8 +671,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     }
     }
 
 
     private void handleLockStateChanged(boolean isLocked) {
     private void handleLockStateChanged(boolean isLocked) {
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             component.onLockStateChanged(isLocked);
             component.onLockStateChanged(isLocked);
         }
         }
         onLockStateChanged(isLocked);
         onLockStateChanged(isLocked);

+ 11 - 11
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/GestureVideoController.java

@@ -30,7 +30,7 @@ import androidx.annotation.Nullable;
 
 
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 
 
 import java.util.Map;
 import java.util.Map;
 
 
@@ -213,8 +213,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
             }
             }
 
 
             if (mChangePosition || mChangeBrightness || mChangeVolume) {
             if (mChangePosition || mChangeBrightness || mChangeVolume) {
-                for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-                    IControlComponent component = next.getKey();
+                for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+                    InterControlView component = next.getKey();
                     if (component instanceof IGestureComponent) {
                     if (component instanceof IGestureComponent) {
                         ((IGestureComponent) component).onStartSlide();
                         ((IGestureComponent) component).onStartSlide();
                     }
                     }
@@ -240,8 +240,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
         int position = (int) (deltaX / width * 120000 + currentPosition);
         int position = (int) (deltaX / width * 120000 + currentPosition);
         if (position > duration) position = duration;
         if (position > duration) position = duration;
         if (position < 0) position = 0;
         if (position < 0) position = 0;
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
             if (component instanceof IGestureComponent) {
                 ((IGestureComponent) component).onPositionChange(position, currentPosition, duration);
                 ((IGestureComponent) component).onPositionChange(position, currentPosition, duration);
             }
             }
@@ -264,8 +264,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
         int percent = (int) (brightness * 100);
         int percent = (int) (brightness * 100);
         attributes.screenBrightness = brightness;
         attributes.screenBrightness = brightness;
         window.setAttributes(attributes);
         window.setAttributes(attributes);
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
             if (component instanceof IGestureComponent) {
                 ((IGestureComponent) component).onBrightnessChange(percent);
                 ((IGestureComponent) component).onBrightnessChange(percent);
             }
             }
@@ -281,8 +281,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
         if (index < 0) index = 0;
         if (index < 0) index = 0;
         int percent = (int) (index / streamMaxVolume * 100);
         int percent = (int) (index / streamMaxVolume * 100);
         mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, (int) index, 0);
         mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, (int) index, 0);
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
             if (component instanceof IGestureComponent) {
                 ((IGestureComponent) component).onVolumeChange(percent);
                 ((IGestureComponent) component).onVolumeChange(percent);
             }
             }
@@ -312,8 +312,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
     }
     }
 
 
     private void stopSlide() {
     private void stopSlide() {
-        for (Map.Entry<IControlComponent, Boolean> next : mControlComponents.entrySet()) {
-            IControlComponent component = next.getKey();
+        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+            InterControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
             if (component instanceof IGestureComponent) {
                 ((IGestureComponent) component).onStopSlide();
                 ((IGestureComponent) component).onStopSlide();
             }
             }

+ 2 - 2
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/IGestureComponent.java

@@ -15,9 +15,9 @@ limitations under the License.
 */
 */
 package org.yczbj.ycvideoplayerlib.controller;
 package org.yczbj.ycvideoplayerlib.controller;
 
 
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 
 
-public interface IGestureComponent extends IControlComponent {
+public interface IGestureComponent extends InterControlView {
     /**
     /**
      * 开始滑动
      * 开始滑动
      */
      */

+ 15 - 9
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/player/VideoPlayer.java

@@ -28,6 +28,7 @@ import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 import org.yczbj.ycvideoplayerlib.tool.VideoException;
 import org.yczbj.ycvideoplayerlib.tool.VideoException;
 
 
 import com.yc.kernel.inter.VideoPlayerListener;
 import com.yc.kernel.inter.VideoPlayerListener;
+import com.yc.kernel.utils.PlayerConstant;
 import com.yc.kernel.utils.VideoLogUtils;
 import com.yc.kernel.utils.VideoLogUtils;
 
 
 import java.io.IOException;
 import java.io.IOException;
@@ -156,15 +157,21 @@ public class VideoPlayer<P extends AbstractVideoPlayer> extends FrameLayout
     private void init(AttributeSet attrs) {
     private void init(AttributeSet attrs) {
         BaseToast.init(mContext.getApplicationContext());
         BaseToast.init(mContext.getApplicationContext());
         //读取全局配置
         //读取全局配置
+        initConfig();
+        //读取xml中的配置,并综合全局配置
+        initAttrs(attrs);
+        initView();
+    }
+
+    private void initConfig() {
         VideoPlayerConfig config = VideoViewManager.getConfig();
         VideoPlayerConfig config = VideoViewManager.getConfig();
         mEnableAudioFocus = config.mEnableAudioFocus;
         mEnableAudioFocus = config.mEnableAudioFocus;
         mProgressManager = config.mProgressManager;
         mProgressManager = config.mProgressManager;
         mPlayerFactory = config.mPlayerFactory;
         mPlayerFactory = config.mPlayerFactory;
         mCurrentScreenScaleType = config.mScreenScaleType;
         mCurrentScreenScaleType = config.mScreenScaleType;
         mRenderViewFactory = config.mRenderViewFactory;
         mRenderViewFactory = config.mRenderViewFactory;
-        //读取xml中的配置,并综合全局配置
-        initAttrs(attrs);
-        initView();
+        //设置是否打印日志
+        VideoLogUtils.setIsLog(config.mIsEnableLog);
     }
     }
 
 
     @Override
     @Override
@@ -233,7 +240,7 @@ public class VideoPlayer<P extends AbstractVideoPlayer> extends FrameLayout
      * 设置控制器,传null表示移除控制器
      * 设置控制器,传null表示移除控制器
      * @param mediaController                           controller
      * @param mediaController                           controller
      */
      */
-    public void setVideoController(@Nullable BaseVideoController mediaController) {
+    public void setController(@Nullable BaseVideoController mediaController) {
         mPlayerContainer.removeView(mVideoController);
         mPlayerContainer.removeView(mVideoController);
         mVideoController = mediaController;
         mVideoController = mediaController;
         if (mediaController != null) {
         if (mediaController != null) {
@@ -614,19 +621,19 @@ public class VideoPlayer<P extends AbstractVideoPlayer> extends FrameLayout
     @Override
     @Override
     public void onInfo(int what, int extra) {
     public void onInfo(int what, int extra) {
         switch (what) {
         switch (what) {
-            case AbstractVideoPlayer.MEDIA_INFO_BUFFERING_START:
+            case PlayerConstant.MEDIA_INFO_BUFFERING_START:
                 setPlayState(ConstantKeys.CurrentState.STATE_BUFFERING_PAUSED);
                 setPlayState(ConstantKeys.CurrentState.STATE_BUFFERING_PAUSED);
                 break;
                 break;
-            case AbstractVideoPlayer.MEDIA_INFO_BUFFERING_END:
+            case PlayerConstant.MEDIA_INFO_BUFFERING_END:
                 setPlayState(ConstantKeys.CurrentState.STATE_COMPLETED);
                 setPlayState(ConstantKeys.CurrentState.STATE_COMPLETED);
                 break;
                 break;
-            case AbstractVideoPlayer.MEDIA_INFO_VIDEO_RENDERING_START: // 视频开始渲染
+            case PlayerConstant.MEDIA_INFO_VIDEO_RENDERING_START: // 视频开始渲染
                 setPlayState(ConstantKeys.CurrentState.STATE_PLAYING);
                 setPlayState(ConstantKeys.CurrentState.STATE_PLAYING);
                 if (mPlayerContainer.getWindowVisibility() != VISIBLE) {
                 if (mPlayerContainer.getWindowVisibility() != VISIBLE) {
                     pause();
                     pause();
                 }
                 }
                 break;
                 break;
-            case AbstractVideoPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED:
+            case PlayerConstant.MEDIA_INFO_VIDEO_ROTATION_CHANGED:
                 if (mRenderView != null)
                 if (mRenderView != null)
                     mRenderView.setVideoRotation(extra);
                     mRenderView.setVideoRotation(extra);
                 break;
                 break;
@@ -864,7 +871,6 @@ public class VideoPlayer<P extends AbstractVideoPlayer> extends FrameLayout
     public void onVideoSizeChanged(int videoWidth, int videoHeight) {
     public void onVideoSizeChanged(int videoWidth, int videoHeight) {
         mVideoSize[0] = videoWidth;
         mVideoSize[0] = videoWidth;
         mVideoSize[1] = videoHeight;
         mVideoSize[1] = videoHeight;
-
         if (mRenderView != null) {
         if (mRenderView != null) {
             mRenderView.setScaleType(mCurrentScreenScaleType);
             mRenderView.setScaleType(mCurrentScreenScaleType);
             mRenderView.setVideoSize(videoWidth, videoHeight);
             mRenderView.setVideoSize(videoWidth, videoHeight);

+ 4 - 1
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/player/VideoPlayerConfig.java

@@ -28,7 +28,10 @@ public class VideoPlayerConfig {
 
 
     public final static class Builder {
     public final static class Builder {
 
 
-        private boolean mIsEnableLog;
+        /**
+         * 默认是关闭日志的
+         */
+        private boolean mIsEnableLog = false;
         private boolean mPlayOnMobileNetwork;
         private boolean mPlayOnMobileNetwork;
         private boolean mEnableOrientation;
         private boolean mEnableOrientation;
         private boolean mEnableAudioFocus = true;
         private boolean mEnableAudioFocus = true;

+ 2 - 2
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/pip/CustomFloatView.java

@@ -28,7 +28,7 @@ import androidx.annotation.Nullable;
 import org.yczbj.ycvideoplayerlib.R;
 import org.yczbj.ycvideoplayerlib.R;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 
 
 /**
 /**
  * <pre>
  * <pre>
@@ -39,7 +39,7 @@ import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
  *     revise:
  *     revise:
  * </pre>
  * </pre>
  */
  */
-public class CustomFloatView extends FrameLayout implements IControlComponent, View.OnClickListener {
+public class CustomFloatView extends FrameLayout implements InterControlView, View.OnClickListener {
 
 
     private ControlWrapper mControlWrapper;
     private ControlWrapper mControlWrapper;
     private Context mContext;
     private Context mContext;

+ 2 - 2
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/pip/FloatVideoManager.java

@@ -67,7 +67,7 @@ public class FloatVideoManager {
             return;
             return;
         }
         }
         PlayerUtils.removeViewFormParent(mVideoPlayer);
         PlayerUtils.removeViewFormParent(mVideoPlayer);
-        mVideoPlayer.setVideoController(mFloatController);
+        mVideoPlayer.setController(mFloatController);
         mFloatController.setPlayState(mVideoPlayer.getCurrentPlayState());
         mFloatController.setPlayState(mVideoPlayer.getCurrentPlayState());
         mFloatController.setPlayerState(mVideoPlayer.getCurrentPlayerState());
         mFloatController.setPlayerState(mVideoPlayer.getCurrentPlayerState());
         mFloatView.addView(mVideoPlayer);
         mFloatView.addView(mVideoPlayer);
@@ -112,7 +112,7 @@ public class FloatVideoManager {
         }
         }
         PlayerUtils.removeViewFormParent(mVideoPlayer);
         PlayerUtils.removeViewFormParent(mVideoPlayer);
         mVideoPlayer.release();
         mVideoPlayer.release();
-        mVideoPlayer.setVideoController(null);
+        mVideoPlayer.setController(null);
         mPlayingPosition = -1;
         mPlayingPosition = -1;
         mActClass = null;
         mActClass = null;
     }
     }

+ 1 - 2
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomBottomView.java

@@ -50,7 +50,7 @@ import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
  *     revise: 用于普通播放器
  *     revise: 用于普通播放器
  * </pre>
  * </pre>
  */
  */
-public class CustomBottomView extends FrameLayout implements IControlComponent,
+public class CustomBottomView extends FrameLayout implements InterControlView,
         View.OnClickListener, SeekBar.OnSeekBarChangeListener {
         View.OnClickListener, SeekBar.OnSeekBarChangeListener {
 
 
     private Context mContext;
     private Context mContext;
@@ -102,7 +102,6 @@ public class CustomBottomView extends FrameLayout implements IControlComponent,
         mTvClarity = view.findViewById(R.id.tv_clarity);
         mTvClarity = view.findViewById(R.id.tv_clarity);
         mIvFullscreen = view.findViewById(R.id.iv_fullscreen);
         mIvFullscreen = view.findViewById(R.id.iv_fullscreen);
         mPbBottomProgress = view.findViewById(R.id.pb_bottom_progress);
         mPbBottomProgress = view.findViewById(R.id.pb_bottom_progress);
-
     }
     }
 
 
     private void initListener() {
     private void initListener() {

+ 1 - 1
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomCompleteView.java

@@ -46,7 +46,7 @@ import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
  *     revise:
  *     revise:
  * </pre>
  * </pre>
  */
  */
-public class CustomCompleteView extends FrameLayout implements IControlComponent, View.OnClickListener {
+public class CustomCompleteView extends FrameLayout implements InterControlView, View.OnClickListener {
 
 
     private Context mContext;
     private Context mContext;
     private ControlWrapper mControlWrapper;
     private ControlWrapper mControlWrapper;

+ 1 - 1
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomErrorView.java

@@ -41,7 +41,7 @@ import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
  *     revise:
  *     revise:
  * </pre>
  * </pre>
  */
  */
-public class CustomErrorView extends LinearLayout implements IControlComponent {
+public class CustomErrorView extends LinearLayout implements InterControlView {
 
 
     private Context mContext;
     private Context mContext;
     private float mDownX;
     private float mDownX;

+ 1 - 1
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomLiveControlView.java

@@ -43,7 +43,7 @@ import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
  *     revise: 用于直播
  *     revise: 用于直播
  * </pre>
  * </pre>
  */
  */
-public class CustomLiveControlView extends FrameLayout implements IControlComponent, View.OnClickListener {
+public class CustomLiveControlView extends FrameLayout implements InterControlView, View.OnClickListener {
 
 
     private Context mContext;
     private Context mContext;
     private ControlWrapper mControlWrapper;
     private ControlWrapper mControlWrapper;

+ 1 - 1
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomPrepareView.java

@@ -43,7 +43,7 @@ import org.yczbj.ycvideoplayerlib.player.VideoViewManager;
  *     revise:
  *     revise:
  * </pre>
  * </pre>
  */
  */
-public class CustomPrepareView extends FrameLayout implements IControlComponent {
+public class CustomPrepareView extends FrameLayout implements InterControlView {
 
 
     private Context mContext;
     private Context mContext;
     private ControlWrapper mControlWrapper;
     private ControlWrapper mControlWrapper;

+ 1 - 1
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/CustomTitleView.java

@@ -47,7 +47,7 @@ import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
  *     revise:
  *     revise:
  * </pre>
  * </pre>
  */
  */
-public class CustomTitleView extends FrameLayout implements IControlComponent, View.OnClickListener {
+public class CustomTitleView extends FrameLayout implements InterControlView, View.OnClickListener {
 
 
     private Context mContext;
     private Context mContext;
     private ControlWrapper mControlWrapper;
     private ControlWrapper mControlWrapper;

+ 1 - 1
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/IControlComponent.java → VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/ui/view/InterControlView.java

@@ -32,7 +32,7 @@ import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
  *     revise:
  *     revise:
  * </pre>
  * </pre>
  */
  */
-public interface IControlComponent {
+public interface InterControlView {
 
 
     /**
     /**
      * 这个是绑定视图操作
      * 这个是绑定视图操作

+ 1 - 14
app/src/main/java/org/yczbj/ycvideoplayer/BaseApplication.java

@@ -54,23 +54,10 @@ public class BaseApplication extends Application {
         ScreenDensityUtils.setup(this);
         ScreenDensityUtils.setup(this);
         ScreenDensityUtils.register(this,375.0f,
         ScreenDensityUtils.register(this,375.0f,
                 ScreenDensityUtils.MATCH_BASE_WIDTH,ScreenDensityUtils.MATCH_UNIT_DP);
                 ScreenDensityUtils.MATCH_BASE_WIDTH,ScreenDensityUtils.MATCH_UNIT_DP);
-        if(BuildConfig.DEBUG){
-            VideoLogUtils.setIsLog(true);
-        }else {
-            VideoLogUtils.setIsLog(false);
-        }
         //播放器配置,注意:此为全局配置,按需开启
         //播放器配置,注意:此为全局配置,按需开启
         VideoViewManager.setConfig(VideoPlayerConfig.newBuilder()
         VideoViewManager.setConfig(VideoPlayerConfig.newBuilder()
-                .setLogEnabled(BuildConfig.DEBUG)//调试的时候请打开日志,方便排错
+                .setLogEnabled(true)//调试的时候请打开日志,方便排错
                 .setPlayerFactory(IjkPlayerFactory.create())
                 .setPlayerFactory(IjkPlayerFactory.create())
-//                .setPlayerFactory(ExoMediaPlayerFactory.create())
-//                .setRenderViewFactory(SurfaceRenderViewFactory.create())
-//                .setEnableOrientation(true)
-//                .setEnableAudioFocus(false)
-//                .setScreenScaleType(VideoView.SCREEN_SCALE_MATCH_PARENT)
-//                .setAdaptCutout(false)
-//                .setPlayOnMobileNetwork(true)
-//                .setProgressManager(new ProgressManagerImpl())
                 .build());
                 .build());
     }
     }
 
 

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/activity/DetailActivity.java

@@ -48,7 +48,7 @@ public class DetailActivity extends AppCompatActivity {
         mPlayerContainer.addView(mVideoView);
         mPlayerContainer.addView(mVideoView);
         //设置新的控制器
         //设置新的控制器
         BasisVideoController controller = new BasisVideoController(DetailActivity.this);
         BasisVideoController controller = new BasisVideoController(DetailActivity.this);
-        mVideoView.setVideoController(controller);
+        mVideoView.setController(controller);
 
 
         Intent intent = getIntent();
         Intent intent = getIntent();
         boolean seamlessPlay = intent.getBooleanExtra(IntentKeys.SEAMLESS_PLAY, false);
         boolean seamlessPlay = intent.getBooleanExtra(IntentKeys.SEAMLESS_PLAY, false);
@@ -104,7 +104,7 @@ public class DetailActivity extends AppCompatActivity {
     protected void onPause() {
     protected void onPause() {
         if (isFinishing()) {
         if (isFinishing()) {
             //移除Controller
             //移除Controller
-            mVideoView.setVideoController(null);
+            mVideoView.setController(null);
             //将VideoView置空,其目的是不执行 super.onPause(); 和 super.onDestroy(); 中的代码
             //将VideoView置空,其目的是不执行 super.onPause(); 和 super.onDestroy(); 中的代码
             mVideoView = null;
             mVideoView = null;
         }
         }

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/activity/MultipleActivity.java

@@ -46,7 +46,7 @@ public class MultipleActivity extends AppCompatActivity {
         player1.setVideoBuilder(videoPlayerBuilder);
         player1.setVideoBuilder(videoPlayerBuilder);
 
 
         BasisVideoController controller1 = new BasisVideoController(this);
         BasisVideoController controller1 = new BasisVideoController(this);
-        player1.setVideoController(controller1);
+        player1.setController(controller1);
         mVideoViews.add(player1);
         mVideoViews.add(player1);
 
 
         player2.setUrl(VOD_URL_2);
         player2.setUrl(VOD_URL_2);
@@ -56,7 +56,7 @@ public class MultipleActivity extends AppCompatActivity {
         VideoPlayerBuilder videoPlayerBuilder2 = new VideoPlayerBuilder(builder2);
         VideoPlayerBuilder videoPlayerBuilder2 = new VideoPlayerBuilder(builder2);
         player2.setVideoBuilder(videoPlayerBuilder2);
         player2.setVideoBuilder(videoPlayerBuilder2);
         BasisVideoController controller2 = new BasisVideoController(this);
         BasisVideoController controller2 = new BasisVideoController(this);
-        player2.setVideoController(controller2);
+        player2.setController(controller2);
         mVideoViews.add(player2);
         mVideoViews.add(player2);
     }
     }
 
 

+ 8 - 4
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/activity/NormalActivity.java

@@ -77,13 +77,17 @@ public class NormalActivity extends AppCompatActivity implements View.OnClickLis
     }
     }
 
 
     private void initVideoPlayer() {
     private void initVideoPlayer() {
+        String url = ConstantVideo.VideoPlayerList[0];
+        //创建基础视频播放器,一般播放器的功能
         BasisVideoController controller = new BasisVideoController(this);
         BasisVideoController controller = new BasisVideoController(this);
-        //设置视频背景图
-        Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         //设置控制器
         //设置控制器
-        mVideoPlayer.setVideoController(controller);
-        mVideoPlayer.setUrl(ConstantVideo.VideoPlayerList[0]);
+        mVideoPlayer.setController(controller);
+        //设置视频播放链接地址
+        mVideoPlayer.setUrl(url);
+        //开始播放
         mVideoPlayer.start();
         mVideoPlayer.start();
+        //设置视频背景图
+        Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
     }
     }
 
 
     private void initListener() {
     private void initListener() {

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/ad/AdActivity.java

@@ -97,7 +97,7 @@ public class AdActivity extends AppCompatActivity implements View.OnClickListene
         //设置视频背景图
         //设置视频背景图
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         //设置控制器
         //设置控制器
-        mVideoPlayer.setVideoController(controller);
+        mVideoPlayer.setController(controller);
         HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(this);
         HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(this);
         String proxyUrl = cacheServer.getProxyUrl(URL_AD);
         String proxyUrl = cacheServer.getProxyUrl(URL_AD);
         mVideoPlayer.setUrl(proxyUrl);
         mVideoPlayer.setUrl(proxyUrl);

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/ad/AdControlView.java

@@ -16,11 +16,11 @@ import androidx.annotation.Nullable;
 import org.yczbj.ycvideoplayer.R;
 import org.yczbj.ycvideoplayer.R;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 
 
 
 
-public class AdControlView extends FrameLayout implements IControlComponent, View.OnClickListener {
+public class AdControlView extends FrameLayout implements InterControlView, View.OnClickListener {
 
 
     protected TextView mAdTime, mAdDetail;
     protected TextView mAdTime, mAdDetail;
     protected ImageView mBack, mVolume, mFullScreen, mPlayButton;
     protected ImageView mBack, mVolume, mFullScreen, mPlayButton;

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/clarity/ClarityActivity.java

@@ -99,7 +99,7 @@ public class ClarityActivity extends AppCompatActivity implements View.OnClickLi
         //设置视频背景图
         //设置视频背景图
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         //设置控制器
         //设置控制器
-        mVideoPlayer.setVideoController(controller);
+        mVideoPlayer.setController(controller);
         mVideoPlayer.setUrl(clarites.get(0).getVideoUrl());
         mVideoPlayer.setUrl(clarites.get(0).getVideoUrl());
         mVideoPlayer.start();
         mVideoPlayer.start();
     }
     }

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/danmu/DanmuActivity.java

@@ -82,7 +82,7 @@ public class DanmuActivity extends BaseActivity implements View.OnClickListener
         //设置视频背景图
         //设置视频背景图
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         //设置控制器
         //设置控制器
-        mVideoPlayer.setVideoController(controller);
+        mVideoPlayer.setController(controller);
         mVideoPlayer.setUrl(ConstantVideo.VideoPlayerList[0]);
         mVideoPlayer.setUrl(ConstantVideo.VideoPlayerList[0]);
         mVideoPlayer.setScreenScaleType(ConstantKeys.PlayerScreenScaleType.SCREEN_SCALE_16_9);
         mVideoPlayer.setScreenScaleType(ConstantKeys.PlayerScreenScaleType.SCREEN_SCALE_16_9);
         mVideoPlayer.start();
         mVideoPlayer.start();

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/danmu/MyDanmakuView.java

@@ -20,7 +20,7 @@ import androidx.core.content.ContextCompat;
 import org.yczbj.ycvideoplayer.R;
 import org.yczbj.ycvideoplayer.R;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 
 
 import master.flame.danmaku.controller.DrawHandler;
 import master.flame.danmaku.controller.DrawHandler;
@@ -34,7 +34,7 @@ import master.flame.danmaku.danmaku.model.android.SpannedCacheStuffer;
 import master.flame.danmaku.danmaku.parser.BaseDanmakuParser;
 import master.flame.danmaku.danmaku.parser.BaseDanmakuParser;
 import master.flame.danmaku.ui.widget.DanmakuView;
 import master.flame.danmaku.ui.widget.DanmakuView;
 
 
-public class MyDanmakuView extends DanmakuView implements IControlComponent {
+public class MyDanmakuView extends DanmakuView implements InterControlView {
 
 
     private DanmakuContext mContext;
     private DanmakuContext mContext;
     private BaseDanmakuParser mParser;
     private BaseDanmakuParser mParser;

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/ListVideoActivity.java

@@ -83,7 +83,7 @@ public class ListVideoActivity extends AppCompatActivity implements View.OnClick
         //设置视频背景图
         //设置视频背景图
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         //设置控制器
         //设置控制器
-        mVideoPlayer.setVideoController(controller);
+        mVideoPlayer.setController(controller);
         mVideoPlayer.setUrl(ConstantVideo.VideoPlayerList[0]);
         mVideoPlayer.setUrl(ConstantVideo.VideoPlayerList[0]);
         mVideoPlayer.start();
         mVideoPlayer.start();
 
 
@@ -100,7 +100,7 @@ public class ListVideoActivity extends AppCompatActivity implements View.OnClick
                         //重新设置数据
                         //重新设置数据
                         VideoInfoBean videoBean = data.get(mCurrentVideoPosition);
                         VideoInfoBean videoBean = data.get(mCurrentVideoPosition);
                         mVideoPlayer.setUrl(videoBean.getVideoUrl());
                         mVideoPlayer.setUrl(videoBean.getVideoUrl());
-                        mVideoPlayer.setVideoController(controller);
+                        mVideoPlayer.setController(controller);
                         //开始播放
                         //开始播放
                         mVideoPlayer.start();
                         mVideoPlayer.start();
                     }
                     }

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/PlayerMonitor.java

@@ -8,11 +8,11 @@ import androidx.annotation.NonNull;
 import com.yc.kernel.utils.VideoLogUtils;
 import com.yc.kernel.utils.VideoLogUtils;
 
 
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 import org.yczbj.ycvideoplayerlib.tool.PlayerUtils;
 
 
 
 
-public class PlayerMonitor implements IControlComponent {
+public class PlayerMonitor implements InterControlView {
 
 
     private ControlWrapper mControlWrapper;
     private ControlWrapper mControlWrapper;
 
 

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/RecyclerViewFragment.java

@@ -102,7 +102,7 @@ public class RecyclerViewFragment extends Fragment implements OnItemChildClickLi
             }
             }
         });
         });
         mController = new BasisVideoController(getActivity());
         mController = new BasisVideoController(getActivity());
-        mVideoView.setVideoController(mController);
+        mVideoView.setController(mController);
     }
     }
 
 
     protected void initData() {
     protected void initData() {

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/list/SeamlessPlayFragment.java

@@ -62,7 +62,7 @@ public class SeamlessPlayFragment extends RecyclerViewAutoPlayFragment {
 
 
     @Override
     @Override
     protected void startPlay(int position) {
     protected void startPlay(int position) {
-        mVideoView.setVideoController(mController);
+        mVideoView.setController(mController);
         super.startPlay(position);
         super.startPlay(position);
     }
     }
 
 
@@ -139,7 +139,7 @@ public class SeamlessPlayFragment extends RecyclerViewAutoPlayFragment {
         mRecyclerView.postDelayed(new Runnable() {
         mRecyclerView.postDelayed(new Runnable() {
             @Override
             @Override
             public void run() {
             public void run() {
-                mVideoView.setVideoController(mController);
+                mVideoView.setController(mController);
             }
             }
         }, 100);
         }, 100);
     }
     }

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/pip/PipActivity.java

@@ -67,7 +67,7 @@ public class PipActivity extends AppCompatActivity{
         mPIPManager = FloatVideoManager.getInstance(this);
         mPIPManager = FloatVideoManager.getInstance(this);
         VideoPlayer videoView = VideoViewManager.instance().get(FloatVideoManager.PIP);
         VideoPlayer videoView = VideoViewManager.instance().get(FloatVideoManager.PIP);
         BasisVideoController controller = new BasisVideoController(this);
         BasisVideoController controller = new BasisVideoController(this);
-        videoView.setVideoController(controller);
+        videoView.setController(controller);
         if (mPIPManager.isStartFloatWindow()) {
         if (mPIPManager.isStartFloatWindow()) {
             mPIPManager.stopFloatWindow();
             mPIPManager.stopFloatWindow();
             controller.setPlayerState(videoView.getCurrentPlayerState());
             controller.setPlayerState(videoView.getCurrentPlayerState());

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/pip/PipListActivity.java

@@ -130,7 +130,7 @@ public class PipListActivity extends AppCompatActivity implements OnItemChildCli
         View itemView = mLinearLayoutManager.findViewByPosition(position);
         View itemView = mLinearLayoutManager.findViewByPosition(position);
         if (itemView == null) return;
         if (itemView == null) return;
         //注意:要先设置控制才能去设置控制器的状态。
         //注意:要先设置控制才能去设置控制器的状态。
-        mVideoView.setVideoController(mController);
+        mVideoView.setController(mController);
         mController.setPlayState(mVideoView.getCurrentPlayState());
         mController.setPlayState(mVideoView.getCurrentPlayState());
 
 
         VideoRecyclerViewAdapter.VideoHolder viewHolder = (VideoRecyclerViewAdapter.VideoHolder) itemView.getTag();
         VideoRecyclerViewAdapter.VideoHolder viewHolder = (VideoRecyclerViewAdapter.VideoHolder) itemView.getTag();

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiktok/TikTok2Activity.java

@@ -125,7 +125,7 @@ public class TikTok2Activity extends AppCompatActivity {
         //以下只能二选一,看你的需求
         //以下只能二选一,看你的需求
         mVideoPlayer.setRenderViewFactory(TikTokRenderViewFactory.create());
         mVideoPlayer.setRenderViewFactory(TikTokRenderViewFactory.create());
         mController = new BasisVideoController(this);
         mController = new BasisVideoController(this);
-        mVideoPlayer.setVideoController(mController);
+        mVideoPlayer.setController(mController);
     }
     }
 
 
     private void initViewPager() {
     private void initViewPager() {

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiktok/TikTokView.java

@@ -19,9 +19,9 @@ import com.yc.kernel.utils.VideoLogUtils;
 import org.yczbj.ycvideoplayer.R;
 import org.yczbj.ycvideoplayer.R;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.config.ConstantKeys;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
 import org.yczbj.ycvideoplayerlib.controller.ControlWrapper;
-import org.yczbj.ycvideoplayerlib.ui.view.IControlComponent;
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
 
 
-public class TikTokView extends FrameLayout implements IControlComponent {
+public class TikTokView extends FrameLayout implements InterControlView {
 
 
     private ImageView thumb;
     private ImageView thumb;
     private ImageView mPlayBtn;
     private ImageView mPlayBtn;

+ 1 - 1
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiny/TestFullActivity.java

@@ -75,7 +75,7 @@ public class TestFullActivity extends BaseActivity implements View.OnClickListen
         //设置视频背景图
         //设置视频背景图
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         Glide.with(this).load(R.drawable.image_default).into(controller.getThumb());
         //设置控制器
         //设置控制器
-        mVideoPlayer.setVideoController(controller);
+        mVideoPlayer.setController(controller);
         mVideoPlayer.setUrl(ConstantVideo.VideoPlayerList[0]);
         mVideoPlayer.setUrl(ConstantVideo.VideoPlayerList[0]);
         mVideoPlayer.setScreenScaleType(ConstantKeys.PlayerScreenScaleType.SCREEN_SCALE_16_9);
         mVideoPlayer.setScreenScaleType(ConstantKeys.PlayerScreenScaleType.SCREEN_SCALE_16_9);
         mVideoPlayer.start();
         mVideoPlayer.start();

+ 2 - 2
app/src/main/java/org/yczbj/ycvideoplayer/newPlayer/tiny/TinyScreenActivity.java

@@ -116,7 +116,7 @@ public class TinyScreenActivity extends AppCompatActivity implements OnItemChild
                 int position = holder.mPosition;
                 int position = holder.mPosition;
                 if (position == mCurPos && !mVideoPlayer.isFullScreen()) {
                 if (position == mCurPos && !mVideoPlayer.isFullScreen()) {
                     mVideoPlayer.startTinyScreen();
                     mVideoPlayer.startTinyScreen();
-                    mVideoPlayer.setVideoController(null);
+                    mVideoPlayer.setController(null);
                     mController.setPlayState(ConstantKeys.CurrentState.STATE_IDLE);
                     mController.setPlayState(ConstantKeys.CurrentState.STATE_IDLE);
                 }
                 }
             }
             }
@@ -144,7 +144,7 @@ public class TinyScreenActivity extends AppCompatActivity implements OnItemChild
         View itemView = mLinearLayoutManager.findViewByPosition(position);
         View itemView = mLinearLayoutManager.findViewByPosition(position);
         if (itemView == null) return;
         if (itemView == null) return;
         //注意:要先设置控制才能去设置控制器的状态。
         //注意:要先设置控制才能去设置控制器的状态。
-        mVideoPlayer.setVideoController(mController);
+        mVideoPlayer.setController(mController);
         mController.setPlayState(mVideoPlayer.getCurrentPlayState());
         mController.setPlayState(mVideoPlayer.getCurrentPlayState());
 
 
         VideoRecyclerViewAdapter.VideoHolder viewHolder = (VideoRecyclerViewAdapter.VideoHolder) itemView.getTag();
         VideoRecyclerViewAdapter.VideoHolder viewHolder = (VideoRecyclerViewAdapter.VideoHolder) itemView.getTag();

+ 134 - 1
read/01.视频播放器介绍文档.md

@@ -80,7 +80,7 @@
     - B.1.7 支持切换视频清晰度模式
     - B.1.7 支持切换视频清晰度模式
     - B.1.8 添加锁屏功能,竖屏不提供锁屏按钮,横屏全屏时显示,并且锁屏时,屏蔽手势处理
     - B.1.8 添加锁屏功能,竖屏不提供锁屏按钮,横屏全屏时显示,并且锁屏时,屏蔽手势处理
 - C拓展功能【这块根据实际情况选择是否需要使用,一般视频付费App会有这个工鞥】
 - C拓展功能【这块根据实际情况选择是否需要使用,一般视频付费App会有这个工鞥】
-    - **C1产品需求:类似优酷,爱奇艺视频播放器部分逻辑。比如如果用户没有登录也没有看视频权限,则提示试看视频[自定义布局];如果用户没有登录但是有看视频权限,则正常观看;如果用户登录,但是没有充值会员,部分需要权限视频则进入试看模式,试看结束后弹出充值会员界面;如果用户余额不足,比如余额只有99元,但是视频观看要199元,则又有其他提示。**
+    - C1产品需求:类似优酷,爱奇艺视频播放器部分逻辑。比如如果用户没有登录也没有看视频权限,则提示试看视频[自定义布局];如果用户没有登录但是有看视频权限,则正常观看;如果用户登录,但是没有充值会员,部分需要权限视频则进入试看模式,试看结束后弹出充值会员界面;如果用户余额不足,比如余额只有99元,但是视频观看要199元,则又有其他提示。
     - C2自身需求:比如封装好了视频播放库,那么点击视频上登录按钮则跳到登录页面;点击充值会员页面也跳到充值页面。这个通过定义接口,可以让使用者通过方法调用,灵活处理点击事件。
     - C2自身需求:比如封装好了视频播放库,那么点击视频上登录按钮则跳到登录页面;点击充值会员页面也跳到充值页面。这个通过定义接口,可以让使用者通过方法调用,灵活处理点击事件。
     - C.1.1 可以设置试看模式,设置试看时长。试看结束后就提示登录或者充值……
     - C.1.1 可以设置试看模式,设置试看时长。试看结束后就提示登录或者充值……
     - C.1.2 对于设置视频的宽高,建议设置成4:3或者16:9或者常用比例,如果不是常用比例,则可能会有黑边。其中黑边的背景可以设置
     - C.1.2 对于设置视频的宽高,建议设置成4:3或者16:9或者常用比例,如果不是常用比例,则可能会有黑边。其中黑边的背景可以设置
@@ -88,9 +88,129 @@
     - C.1.4 锁定屏幕功能,这个参考大部分播放器,只有在全屏模式下才会有
     - C.1.4 锁定屏幕功能,这个参考大部分播放器,只有在全屏模式下才会有
 
 
 
 
+### 03.视频播放器结构说明
+- 视频常见的布局视图
+    - 视频底图(用于显示初始化视频时的封面图),视频状态视图【加载loading,播放异常,加载视频失败,播放完成等】
+    - 改变亮度和声音【改变声音视图,改变亮度视图】,改变视频快进和快退,左右滑动快进和快退视图(手势滑动的快进快退提示框)
+    - 顶部控制区视图(包含返回健,title等),底部控制区视图(包含进度条,播放暂停,时间,切换全屏等)
+    - 锁屏布局视图(全屏时展示,其他隐藏),底部播放进度条视图(很多播放器都有这个),清晰度列表视图(切换清晰度弹窗)
+- 后期可能涉及的布局视图
+    - 手势指导页面(有些播放器有新手指导功能),离线下载的界面(该界面中包含下载列表, 列表的item编辑(全选, 删除))
+    - 用户从wifi切换到4g网络,提示网络切换弹窗界面(当网络由wifi变为4g的时候会显示)
+    - 图片广告视图(带有倒计时消失),开始视频广告视图,非会员试看视图
+    - 弹幕视图(这个很重要),水印显示视图,倍速播放界面(用于控制倍速),底部视频列表缩略图视图
+    - 投屏视频视图界面,视频直播间刷礼物界面,老师开课界面,展示更多视图(下载,分享,切换音频等)
+- 需要达到的目的和效果
+    - 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换
+    - 对于视图状态切换和后期维护拓展,避免功能和业务出现耦合。比如需要支持播放器UI高度定制,而不是该lib库中UI代码
+    - 针对视频播放,视频投屏,音频播放,播放回放,以及视频直播的功能
+- 视频分层
+    - 播放器内核
+        - 可以切换ExoPlayer、MediaPlayer,IjkPlayer,声网视频播放器,这里使用工厂模式Factory + AbstractVideoPlayer + 各个实现AbstractVideoPlayer抽象类的播放器类
+        - 定义抽象的播放器,主要包含视频初始化,设置,状态设置,以及播放监听。由于每个内核播放器api可能不一样,所以这里需要实现AbstractVideoPlayer抽象类的播放器类,方便后期统一调用
+        - 为了方便创建不同内核player,所以需要创建一个PlayerFactory,定义一个createPlayer创建播放器的抽象方法,然后各个内核都实现它,各自创建自己的播放器
+    - VideoPlayer播放器
+        - 可以自由切换视频内核,Player+Controller。player负责播放的逻辑,Controller负责视图相关的逻辑,两者之间用接口进行通信
+        - 针对Controller,需要定义一个接口,主要负责视图UI处理逻辑,支持添加各种自定义视图View【统一实现自定义接口Control】,每个view尽量保证功能单一性,最后通过addView形式添加进来
+        - 针对Player,需要定义一个接口,主要负责视频播放处理逻辑,比如视频播放,暂停,设置播放进度,设置视频链接,切换播放模式等操作。需要注意把Controller设置到Player里面,两者之间通过接口交互
+    - UI控制器视图
+        - 定义一个BaseVideoController类,这个主要是集成各种事件的处理逻辑,比如播放器状态改变,控制视图隐藏和显示,播放进度改变,锁定状态改变,设备方向监听等等操作
+        - 定义一个view的接口InterControlView,在这里类里定义绑定视图,视图隐藏和显示,播放状态,播放模式,播放进度,锁屏等操作。这个每个实现类则都可以拿到这些属性呢
+        - 在BaseVideoController中使用LinkedHashMap保存每个自定义view视图,添加则put进来后然后通过addView将视图添加到该控制器中,这样非常方便添加自定义视图
+        - 播放器切换状态需要改变Controller视图,比如视频异常则需要显示异常视图view,则它们之间的交互是通过ControlWrapper(同时实现Controller接口和Player接口)实现
+
+
+### 04.视频播放器如何使用
+#### 4.1 关于gradle引用说明
+- 如下所示
+    ```
+    
+    ```
+
+#### 4.2 添加布局
+- 注意,在实际开发中,由于Android手机碎片化比较严重,分辨率太多了,建议灵活设置布局的宽高比为4:3或者16:9或者你认为合适的,可以用代码设置。
+- 如果宽高比变形,则会有黑边
+    ```
+    <org.yczbj.ycvideoplayerlib.player.VideoPlayer
+        android:id="@+id/video_player"
+        android:layout_width="match_parent"
+        android:layout_height="240dp"/>
+    ```
+
+#### 4.3 最简单的视频播放器参数设定
+- 如下所示
+    ```
+    //创建基础视频播放器,一般播放器的功能
+    BasisVideoController controller = new BasisVideoController(this);
+    //设置控制器
+    mVideoPlayer.setVideoController(controller);
+    //设置视频播放链接地址
+    mVideoPlayer.setUrl(url);
+    //开始播放
+    mVideoPlayer.start();
+    ```
+
+
+#### 2.4 优化代码
+- **如果是在Activity中的话,建议设置下面这段代码**
+    ```
+    @Override
+    protected void onStop() {
+        super.onStop();
+        //从前台切到后台,当视频正在播放或者正在缓冲时,调用该方法暂停视频
+        VideoPlayerManager.instance().suspendVideoPlayer();
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        //销毁页面,释放,内部的播放器被释放掉,同时如果在全屏、小窗口模式下都会退出
+        VideoPlayerManager.instance().releaseVideoPlayer();
+    }
+
+    @Override
+    public void onBackPressed() {
+        //处理返回键逻辑;如果是全屏,则退出全屏;如果是小窗口,则退出小窗口
+        if (VideoPlayerManager.instance().onBackPressed()){
+            return;
+        }else {
+            //销毁页面
+            VideoPlayerManager.instance().releaseVideoPlayer();
+        }
+        super.onBackPressed();
+    }
+
+    @Override
+    protected void onRestart() {
+        super.onRestart();
+        //从后台切换到前台,当视频暂停时或者缓冲暂停时,调用该方法重新开启视频播放
+        VideoPlayerManager.instance().resumeVideoPlayer();
+    }
+    ```
+
+
+### 05.播放器详细Api文档
+
+
+### 06.播放器封装思路
+
+
+### 07.播放器示例展示图
+
+
+### 08.播放器悬浮窗口介绍
+
+
+### 09.视频优化处理
+
+
+### 10.播放器问题记录说明
 
 
+### 11.性能优化和库大小
 
 
 
 
+### 12.视频缓存原理介绍
+
 
 
 ### 13.查看视频播放器日志
 ### 13.查看视频播放器日志
 - 统一管理视频播放器封装库日志,方便后期排查问题
 - 统一管理视频播放器封装库日志,方便后期排查问题
@@ -98,6 +218,19 @@
     - 比如,视频player,日志过滤则是:bbb
     - 比如,视频player,日志过滤则是:bbb
 
 
 
 
+### 14.该库异常code说明
+
+
+
+### 15.该库系列wiki文档
+
+
+
+### 16.版本更新文档记录
+
+
+
+