Pārlūkot izejas kodu

完善视频播放器内核库

yangchong 3 gadi atpakaļ
vecāks
revīzija
7343adec96
25 mainītis faili ar 180 papildinājumiem un 104 dzēšanām
  1. 2 2
      Demo/src/main/java/com/yc/ycvideoplayer/video/ad/AdControlView.java
  2. 2 2
      Demo/src/main/java/com/yc/ycvideoplayer/video/danmu/MyDanmakuView.java
  3. 2 2
      Demo/src/main/java/com/yc/ycvideoplayer/video/list/PlayerMonitor.java
  4. 2 2
      Demo/src/main/java/com/yc/ycvideoplayer/video/tiktok/TikTokView.java
  5. 96 20
      ReadMeWiki/00.方案实践/03.播放器UI抽取封装.md
  6. 7 7
      VideoPlayer/src/main/java/com/yc/video/bridge/ControlWrapper.java
  7. 1 1
      VideoPlayer/src/main/java/com/yc/video/config/VideoPlayerConfig.java
  8. 25 25
      VideoPlayer/src/main/java/com/yc/video/controller/BaseVideoController.java
  9. 11 11
      VideoPlayer/src/main/java/com/yc/video/controller/GestureVideoController.java
  10. 2 2
      VideoPlayer/src/main/java/com/yc/video/controller/IGestureComponent.java
  11. 1 1
      VideoPlayer/src/main/java/com/yc/video/controller/IVideoController.java
  12. 5 5
      VideoPlayer/src/main/java/com/yc/video/controller/IViewController.java
  13. 1 1
      VideoPlayer/src/main/java/com/yc/video/player/IVideoPlayer.java
  14. 2 2
      VideoPlayer/src/main/java/com/yc/video/player/VideoPlayer.java
  15. 1 1
      VideoPlayer/src/main/java/com/yc/video/ui/inter/IControlView.java
  16. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/more/CustomNetworkView.java
  17. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/more/CustomTrailersView.java
  18. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/pip/CustomFloatView.java
  19. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/view/CustomBottomView.java
  20. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/view/CustomCompleteView.java
  21. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/view/CustomErrorView.java
  22. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/view/CustomLiveControlView.java
  23. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/view/CustomOncePlayView.java
  24. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/view/CustomPrepareView.java
  25. 2 2
      VideoPlayer/src/main/java/com/yc/video/ui/view/CustomTitleView.java

+ 2 - 2
Demo/src/main/java/com/yc/ycvideoplayer/video/ad/AdControlView.java

@@ -17,11 +17,11 @@ import com.yc.ycvideoplayer.R;
 
 import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.config.ConstantKeys;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 import com.yc.video.tool.PlayerUtils;
 
 
-public class AdControlView extends FrameLayout implements InterControlView, View.OnClickListener {
+public class AdControlView extends FrameLayout implements IControlView, View.OnClickListener {
 
     private Context mContext;
     protected TextView mAdTime, mAdDetail;

+ 2 - 2
Demo/src/main/java/com/yc/ycvideoplayer/video/danmu/MyDanmakuView.java

@@ -21,7 +21,7 @@ import com.yc.ycvideoplayer.R;
 
 import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.config.ConstantKeys;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 import com.yc.video.tool.PlayerUtils;
 
 import master.flame.danmaku.controller.DrawHandler;
@@ -35,7 +35,7 @@ import master.flame.danmaku.danmaku.model.android.SpannedCacheStuffer;
 import master.flame.danmaku.danmaku.parser.BaseDanmakuParser;
 import master.flame.danmaku.ui.widget.DanmakuView;
 
-public class MyDanmakuView extends DanmakuView implements InterControlView {
+public class MyDanmakuView extends DanmakuView implements IControlView {
 
     private DanmakuContext mContext;
     private BaseDanmakuParser mParser;

+ 2 - 2
Demo/src/main/java/com/yc/ycvideoplayer/video/list/PlayerMonitor.java

@@ -8,11 +8,11 @@ import androidx.annotation.NonNull;
 import com.yc.videotool.VideoLogUtils;
 
 import com.yc.video.bridge.ControlWrapper;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 import com.yc.video.tool.PlayerUtils;
 
 
-public class PlayerMonitor implements InterControlView {
+public class PlayerMonitor implements IControlView {
 
     private ControlWrapper mControlWrapper;
     private static final String TAG = "PlayerMonitor";

+ 2 - 2
Demo/src/main/java/com/yc/ycvideoplayer/video/tiktok/TikTokView.java

@@ -20,9 +20,9 @@ import com.yc.ycvideoplayer.R;
 
 import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.config.ConstantKeys;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
-public class TikTokView extends FrameLayout implements InterControlView {
+public class TikTokView extends FrameLayout implements IControlView {
 
     private ImageView thumb;
     private ImageView mPlayBtn;

+ 96 - 20
ReadMeWiki/00.方案实践/03.播放器UI抽取封装.md

@@ -1,9 +1,34 @@
 # 视频播放器UI抽取封装
 #### 目录介绍
-
-
-
-
+- 01.播放器UI封装背景
+    - 1.1 遇到的问题
+    - 1.2 多业务难复用
+- 02.播放器UI封装目标
+    - 2.1 方便自定义
+    - 2.2 和业务解藕
+    - 2.3 使用简单
+    - 2.4 适合多业务场景
+- 03.播放器UI架构
+    - 3.1 UI整体架构
+    - 3.2 UI层UML类图架构
+    - 3.3 关于依赖关系
+- 04.播放器UI接口设计
+    - 4.1 播放和UI分离思想
+    - 4.2 视频器Player接口
+    - 4.3 控制器Controller接口
+    - 4.4 视图ControlView接口
+    - 4.5 player和view交互
+- 05.播放器播放业务逻辑
+    - 5.1 播放器设备方向监听
+    - 5.2 音频焦点改变监听
+    - 5.3 手势改变音量&亮度
+- 06.播放器如何自定义操作
+    - 6.1 添加自定义视图
+    - 6.2 添加统一埋点
+- 07.播放器一些其他设计
+    - 6.1 稳定性设计说明
+    - 6.2 测试case设计
+    - 6.3 拓展性相关设计
 
 
 
@@ -16,53 +41,104 @@
 - 关于视频播放器整体功能介绍文档:https://juejin.im/post/6883457444752654343
 
 
-
-
-### 01.视频播放器UI封装需求
-- 发展中遇到的问题
-    - 播放器可支持多种场景下的播放,多个产品会用到同一个播放器,这样就会带来一个问题,一个播放业务播放器状态发生变化,其他播放业务必须同步更新播放状态,各个播放业务之间互相交叉,随着播放业务的增多,开发和维护成本会急剧增加, 导致后续开发不可持续。 
+### 01.播放器UI封装背景
+#### 1.1 遇到的问题
 - 播放器内核和UI层耦合
     - 也就是说视频player和ui操作柔和到了一起,尤其是两者之间的交互。比如播放中需要更新UI进度条,播放异常需要显示异常UI,都比较难处理播放器状态变化更新UI操作
 - UI难以自定义或者修改麻烦
     - 比如常见的视频播放器,会把视频各种视图写到xml中,这种方式在后期代码会很大,而且改动一个小的布局,则会影响大。这样到后期往往只敢加代码,而不敢删除代码……
     - 有时候难以适应新的场景,比如添加一个播放广告,老师开课,或者视频引导业务需求,则需要到播放器中写一堆业务代码。迭代到后期,违背了开闭原则,视频播放器需要做到和业务分离
-- 视频播放器结构需要清晰
-    - 这个是指该视频播放器能否看了文档后快速上手,知道封装的大概流程。方便后期他人修改和维护,因此需要将视频播放器功能分离。比如切换内核+视频播放器(player+controller+view)
-- 一定要解耦合
-    - 播放器player与视频UI解耦:支持添加自定义视频视图,比如支持添加自定义广告,新手引导,或者视频播放异常等视图,这个需要较强的拓展性
-- 适合多种业务场景
-    - 比如适合播放单个视频,多个视频,以及列表视频,或者类似抖音那种一个页面一个视频,还有小窗口播放视频。也就是适合大多数业务场景
 
 
+#### 1.2 多业务难复用
+- 发展中遇到的问题。播放器可支持多种场景下的播放,多个产品会用到同一个播放器,这样就会带来一个问题,一个播放业务播放器状态发生变化,其他播放业务必须同步更新播放状态,各个播放业务之间互相交叉,随着播放业务的增多,开发和维护成本会急剧增加, 导致后续开发不可持续。 
+
+
+
+### 02.播放器UI封装目标
+#### 2.1 方便自定义
+
+
+#### 2.2 和业务解藕
+- 一定要解耦合。播放器player与视频UI解耦:支持添加自定义视频视图,比如支持添加自定义广告,新手引导,或者视频播放异常等视图,这个需要较强的拓展性
+
+
+#### 2.3 使用简单
+- 视频播放器结构需要清晰。这个是指该视频播放器能否看了文档后快速上手,知道封装的大概流程。方便后期他人修改和维护,因此需要将视频播放器功能分离。
+- 比如切换内核+视频播放器(player+controller+view)
+
+
+#### 2.4 适合多业务场景
+- 适合多种业务场景。比如适合播放单个视频,多个视频,以及列表视频,或者类似抖音那种一个页面一个视频,还有小窗口播放视频。也就是适合大多数业务场景
+
+
+### 03.播放器UI架构
+#### 3.1 UI整体架构
+- UI整体架构图如下所示
+    - ![image](https://img-blog.csdnimg.cn/20201012215233584.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NzAwMjc1,size_16,color_FFFFFF,t_70#pic_center)
 
-### 02.播放器UI架构图
-![image](https://img-blog.csdnimg.cn/20201012215233584.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NzAwMjc1,size_16,color_FFFFFF,t_70#pic_center)
-![image](https://img-blog.csdnimg.cn/20201013094115174.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NzAwMjc1,size_16,color_FFFFFF,t_70#pic_center)
 
+#### 3.2 UI层UML类图架构
+- UI层UML类图如下所示
+    - 待完善
+- 工程项目中代码结构说明
+    - ![image](https://img-blog.csdnimg.cn/20201013094115174.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NzAwMjc1,size_16,color_FFFFFF,t_70#pic_center)
 
 
-### 03.如何分离播放和UI分离
+#### 3.3 关于依赖关系
+
+
+### 04.播放器UI接口设计
+#### 4.1 播放和UI分离思想
 - 方便播放业务发生变化
-    - 播放状态变化是导致不同播放业务场景之间交叉同步,解除播放业务对播放器的直接操控,采用接口监听进行解耦。比如:player+controller+interface
+    - 播放状态变化是导致不同播放业务场景之间交叉同步,解除播放业务对播放器的直接操控,采用接口监听进行解耦。
+    - 比如:player+controller+view+interface
+- 具体来说如何理解呢
+    - player,一套player视频播放接口,负责VideoPlayer播放逻辑。
+    - controller,一套视图UI接口,负责UI相关添加,移除视图View的操作逻辑。
+    - view,一套视图View接口,负责具体设置进度改变view状态,监听播放状态改变View
+    - 两者之间的桥梁使用 wrapper ,同时继承player和controller接口,拿到两边api。
+
+
+#### 4.2 定义视频器Player接口
 - 关于视频播放器
     - 定义一个视频播放器InterVideoPlayer接口,操作视频播放,暂停,缓冲,进度设置,设置播放模式等多种操作。
     - 然后写一个播放器接口的具体实现类,在这个里面拿到内核播放器player,然后做相关的实现操作。
+
+
+
+#### 4.3 控制器Controller接口
 - 关于视频视图View
     - 定义一个视图InterVideoController接口,主要负责视图显示/隐藏,播放进度,锁屏,状态栏等操作。
     - 然后写一个播放器视图接口的具体实现类,在这里里面inflate视图操作,然后接口方法实现,为了方便后期开发者自定义view,因此需要addView操作,将添加进来的视图用map集合装起来。
+
+
+
+#### 4.4 视图ControlView接口
 - 播放器player和controller交互
     - 在player中创建BaseVideoController对象,这个时候需要把controller添加到播放器中,这个时候有两个要点特别重要,需要把播放器状态监听,和播放模式监听传递给控制器
     - setPlayState设置视频播放器播放逻辑状态,主要是播放缓冲,加载,播放中,暂停,错误,完成,异常,播放进度等多个状态,方便控制器做UI更新操作
     - setPlayerState设置视频播放切换模式状态,主要是普通模式,小窗口模式,正常模式三种其中一种,方便控制器做UI更新
+
+
+
+#### 4.5 player和view交互
 - 播放器player和view交互
     - 这块非常关键,举个例子,视频播放失败需要显示控制层的异常视图View;播放视频初始化需要显示loading,然后更新UI播放进度条等。都是播放器和视图层交互
     - 可以定义一个类,同时实现InterVideoPlayer接口和InterVideoController接口,这个时候会重新这两个接口所有的方法。此类的目的是为了在InterControlView接口实现类中既能调用VideoPlayer的api又能调用BaseVideoController的api
+
+
+### 06.播放器如何自定义操作
+#### 6.1 添加自定义视图
 - 如何添加自定义播放器视图
     - 添加了自定义播放器视图,比如添加视频广告,可以选择跳过,选择播放暂停。那这个视图view,肯定是需要操作player或者获取player的状态的。这个时候就需要暴露监听视频播放的状态接口监听
     - 首先定义一个InterControlView接口,也就是说所有自定义视频视图view需要实现这个接口,该接口中的核心方法有:绑定视图到播放器,视图显示隐藏变化监听,播放状态监听,播放模式监听,进度监听,锁屏监听等
     - 在BaseVideoController中的状态监听中,通过InterControlView接口对象就可以把播放器的状态传递到子类中
 
 
+#### 6.2 添加统一埋点
+
+
 
 ### 04.VideoPlayer如何实现
 - 代码如下所示,省略了部分代码,具体看demo

+ 7 - 7
VideoPlayer/src/main/java/com/yc/video/bridge/ControlWrapper.java

@@ -19,8 +19,8 @@ import android.app.Activity;
 import android.content.pm.ActivityInfo;
 import android.graphics.Bitmap;
 import androidx.annotation.NonNull;
-import com.yc.video.controller.InterVideoController;
-import com.yc.video.player.InterVideoPlayer;
+import com.yc.video.controller.IVideoController;
+import com.yc.video.player.IVideoPlayer;
 
 
 /**
@@ -33,13 +33,13 @@ import com.yc.video.player.InterVideoPlayer;
  *     revise:
  * </pre>
  */
-public class ControlWrapper implements InterVideoPlayer, InterVideoController {
+public class ControlWrapper implements IVideoPlayer, IVideoController {
     
-    private final InterVideoPlayer mVideoPlayer;
-    private final InterVideoController mController;
+    private final IVideoPlayer mVideoPlayer;
+    private final IVideoController mController;
     
-    public ControlWrapper(@NonNull InterVideoPlayer videoPlayer,
-                          @NonNull InterVideoController controller) {
+    public ControlWrapper(@NonNull IVideoPlayer videoPlayer,
+                          @NonNull IVideoController controller) {
         mVideoPlayer = videoPlayer;
         mController = controller;
     }

+ 1 - 1
VideoPlayer/src/main/java/com/yc/video/config/VideoPlayerConfig.java

@@ -39,7 +39,7 @@ import com.yc.videotool.VideoLogUtils;
  *     revise:
  * </pre>
  */
-public class VideoPlayerConfig {
+public final class VideoPlayerConfig {
 
     public static Builder newBuilder() {
         return new Builder();

+ 25 - 25
VideoPlayer/src/main/java/com/yc/video/controller/BaseVideoController.java

@@ -33,13 +33,13 @@ import androidx.annotation.Nullable;
 
 import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.config.ConstantKeys;
-import com.yc.video.player.InterVideoPlayer;
+import com.yc.video.player.IVideoPlayer;
 import com.yc.video.player.VideoViewManager;
 import com.yc.video.player.VideoPlayer;
 import com.yc.video.tool.StatesCutoutUtils;
 import com.yc.video.tool.NetworkUtils;
 import com.yc.video.tool.PlayerUtils;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 import com.yc.videotool.VideoLogUtils;
 
@@ -64,8 +64,8 @@ import java.util.Map;
  *
  * </pre>
  */
-public abstract class BaseVideoController extends FrameLayout implements InterVideoController,
-        InterViewController,OrientationHelper.OnOrientationChangeListener {
+public abstract class BaseVideoController extends FrameLayout implements IVideoController,
+        IViewController,OrientationHelper.OnOrientationChangeListener {
 
     //播放器包装类,集合了MediaPlayerControl的api和IVideoController的api
     protected ControlWrapper mControlWrapper;
@@ -92,7 +92,7 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
 
     //保存了所有的控制组件
     //使用LinkedHashMap有序
-    protected LinkedHashMap<InterControlView, Boolean> mControlComponents = new LinkedHashMap<>();
+    protected LinkedHashMap<IControlView, Boolean> mControlComponents = new LinkedHashMap<>();
 
     private Animation mShowAnim;
     private Animation mHideAnim;
@@ -167,11 +167,11 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      * 重要:此方法用于将{@link VideoPlayer} 和控制器绑定
      */
     @CallSuper
-    public void setMediaPlayer(InterVideoPlayer mediaPlayer) {
+    public void setMediaPlayer(IVideoPlayer mediaPlayer) {
         mControlWrapper = new ControlWrapper(mediaPlayer, this);
         //绑定ControlComponent和Controller
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             component.attach(mControlWrapper);
         }
         //开始监听设备方向
@@ -183,8 +183,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      * @param controlViews                         view
      */
     @Override
-    public void addControlComponent(InterControlView... controlViews) {
-        for (InterControlView item : controlViews) {
+    public void addControlComponent(IControlView... controlViews) {
+        for (IControlView item : controlViews) {
             addControlComponent(item, false);
         }
     }
@@ -195,7 +195,7 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      * @param isPrivate                             是否为独有的组件,如果是就不添加到控制器中
      */
     @Override
-    public void addControlComponent(InterControlView controlView, boolean isPrivate) {
+    public void addControlComponent(IControlView controlView, boolean isPrivate) {
         mControlComponents.put(controlView, isPrivate);
         if (mControlWrapper != null) {
             controlView.attach(mControlWrapper);
@@ -211,7 +211,7 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      * @param controlView                           view
      */
     @Override
-    public void removeControlComponent(InterControlView controlView) {
+    public void removeControlComponent(IControlView controlView) {
         removeView(controlView.getView());
         mControlComponents.remove(controlView);
     }
@@ -221,7 +221,7 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      */
     @Override
     public void removeAllControlComponent() {
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
             removeView(next.getKey().getView());
         }
         mControlComponents.clear();
@@ -232,9 +232,9 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      */
     @Override
     public void removeAllPrivateComponents() {
-        Iterator<Map.Entry<InterControlView, Boolean>> it = mControlComponents.entrySet().iterator();
+        Iterator<Map.Entry<IControlView, Boolean>> it = mControlComponents.entrySet().iterator();
         while (it.hasNext()) {
-            Map.Entry<InterControlView, Boolean> next = it.next();
+            Map.Entry<IControlView, Boolean> next = it.next();
             if (next.getValue()) {
                 it.remove();
             }
@@ -613,8 +613,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     private void handleVisibilityChanged(boolean isVisible, Animation anim) {
         if (!mIsLocked) {
             //没锁住时才向ControlComponent下发此事件
-            for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-                InterControlView component = next.getKey();
+            for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+                IControlView component = next.getKey();
                 component.onVisibilityChanged(isVisible, anim);
             }
         }
@@ -632,8 +632,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     }
 
     private void handlePlayStateChanged(int playState) {
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             component.onPlayStateChanged(playState);
         }
         onPlayStateChanged(playState);
@@ -667,8 +667,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
      * @param playerState                       播放器状态
      */
     private void handlePlayerStateChanged(int playerState) {
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             component.onPlayerStateChanged(playerState);
         }
         onPlayerStateChanged(playerState);
@@ -712,8 +712,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     }
 
     private void handleSetProgress(int duration, int position) {
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             component.setProgress(duration, position);
         }
         setProgress(duration, position);
@@ -730,8 +730,8 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     }
 
     private void handleLockStateChanged(boolean isLocked) {
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             component.onLockStateChanged(isLocked);
         }
         onLockStateChanged(isLocked);

+ 11 - 11
VideoPlayer/src/main/java/com/yc/video/controller/GestureVideoController.java

@@ -31,7 +31,7 @@ import androidx.annotation.Nullable;
 import com.yc.videotool.VideoLogUtils;
 import com.yc.video.config.ConstantKeys;
 import com.yc.video.tool.PlayerUtils;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 import java.util.Map;
 
@@ -263,8 +263,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
             }
 
             if (mChangePosition || mChangeBrightness || mChangeVolume) {
-                for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-                    InterControlView component = next.getKey();
+                for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+                    IControlView component = next.getKey();
                     if (component instanceof IGestureComponent) {
                         ((IGestureComponent) component).onStartSlide();
                     }
@@ -290,8 +290,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
         int position = (int) (deltaX / width * 120000 + currentPosition);
         if (position > duration) position = duration;
         if (position < 0) position = 0;
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
                 ((IGestureComponent) component).onPositionChange(position, currentPosition, duration);
             }
@@ -316,8 +316,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
         int percent = (int) (brightness * 100);
         attributes.screenBrightness = brightness;
         window.setAttributes(attributes);
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
                 ((IGestureComponent) component).onBrightnessChange(percent);
             }
@@ -333,8 +333,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
         if (index < 0) index = 0;
         int percent = (int) (index / streamMaxVolume * 100);
         mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, (int) index, 0);
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
                 ((IGestureComponent) component).onVolumeChange(percent);
             }
@@ -425,8 +425,8 @@ public abstract class GestureVideoController extends BaseVideoController impleme
     }
 
     private void stopSlide() {
-        for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
-            InterControlView component = next.getKey();
+        for (Map.Entry<IControlView, Boolean> next : mControlComponents.entrySet()) {
+            IControlView component = next.getKey();
             if (component instanceof IGestureComponent) {
                 //结束滑动
                 ((IGestureComponent) component).onStopSlide();

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/controller/IGestureComponent.java

@@ -15,7 +15,7 @@ limitations under the License.
 */
 package com.yc.video.controller;
 
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 /**
  * <pre>
@@ -26,7 +26,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public interface IGestureComponent extends InterControlView {
+public interface IGestureComponent extends IControlView {
 
     /**
      * 开始滑动

+ 1 - 1
VideoPlayer/src/main/java/com/yc/video/controller/InterVideoController.java → VideoPlayer/src/main/java/com/yc/video/controller/IVideoController.java

@@ -24,7 +24,7 @@ package com.yc.video.controller;
  *     revise: 定义一些设置视图属性接口
  * </pre>
  */
-public interface InterVideoController {
+public interface IVideoController {
 
     /**
      * 开始控制视图自动隐藏倒计时

+ 5 - 5
VideoPlayer/src/main/java/com/yc/video/controller/InterViewController.java → VideoPlayer/src/main/java/com/yc/video/controller/IViewController.java

@@ -15,7 +15,7 @@ limitations under the License.
 */
 package com.yc.video.controller;
 
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 /**
  * <pre>
@@ -26,26 +26,26 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public interface InterViewController {
+public interface IViewController {
 
     /**
      * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让ControlComponent位于不同的层级
      * @param controlViews                         view
      */
-    void addControlComponent(InterControlView... controlViews);
+    void addControlComponent(IControlView... controlViews);
 
     /**
      * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让InterControlView位于不同的层级
      * @param controlView                           view
      * @param isPrivate                             是否为独有的组件,如果是就不添加到控制器中
      */
-    void addControlComponent(InterControlView controlView, boolean isPrivate);
+    void addControlComponent(IControlView controlView, boolean isPrivate);
 
     /**
      * 移除控制组件
      * @param controlView                           view
      */
-    void removeControlComponent(InterControlView controlView);
+    void removeControlComponent(IControlView controlView);
 
     /**
      * 移除所有的组件

+ 1 - 1
VideoPlayer/src/main/java/com/yc/video/player/InterVideoPlayer.java → VideoPlayer/src/main/java/com/yc/video/player/IVideoPlayer.java

@@ -43,7 +43,7 @@ import com.yc.video.config.ConstantKeys;
  *     revise: 播放器基础属性获取和设置属性接口
  * </pre>
  */
-public interface InterVideoPlayer {
+public interface IVideoPlayer {
 
     /**
      * 设置链接

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/player/VideoPlayer.java

@@ -58,9 +58,9 @@ import java.util.Map;
  * </pre>
  */
 public class VideoPlayer<P extends AbstractVideoPlayer> extends FrameLayout
-        implements InterVideoPlayer, VideoPlayerListener {
+        implements IVideoPlayer, VideoPlayerListener {
 
-    private Context mContext;
+    private final Context mContext;
     /**
      * 播放器
      */

+ 1 - 1
VideoPlayer/src/main/java/com/yc/video/ui/inter/InterControlView.java → VideoPlayer/src/main/java/com/yc/video/ui/inter/IControlView.java

@@ -34,7 +34,7 @@ import com.yc.video.bridge.ControlWrapper;
  *             举一个例子:比如广告视图,
  * </pre>
  */
-public interface InterControlView {
+public interface IControlView {
 
     /**
      * 这个是绑定视图操作

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/more/CustomNetworkView.java

@@ -25,7 +25,7 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.yc.video.bridge.ControlWrapper;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 /**
  * <pre>
@@ -36,7 +36,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomNetworkView extends FrameLayout implements InterControlView, View.OnClickListener {
+public class CustomNetworkView extends FrameLayout implements IControlView, View.OnClickListener {
 
     public CustomNetworkView(@NonNull Context context) {
         super(context);

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/more/CustomTrailersView.java

@@ -25,7 +25,7 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.yc.video.bridge.ControlWrapper;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 /**
  * <pre>
@@ -36,7 +36,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomTrailersView extends FrameLayout implements InterControlView, View.OnClickListener {
+public class CustomTrailersView extends FrameLayout implements IControlView, View.OnClickListener {
 
     public CustomTrailersView(@NonNull Context context) {
         super(context);

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/pip/CustomFloatView.java

@@ -34,7 +34,7 @@ import com.yc.video.bridge.ControlWrapper;
 
 import com.yc.video.R;
 
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 /**
  * <pre>
@@ -45,7 +45,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomFloatView extends FrameLayout implements InterControlView, View.OnClickListener {
+public class CustomFloatView extends FrameLayout implements IControlView, View.OnClickListener {
 
     private ControlWrapper mControlWrapper;
     private Context mContext;

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/view/CustomBottomView.java

@@ -43,7 +43,7 @@ import com.yc.video.config.VideoPlayerConfig;
 import com.yc.video.tool.PlayerUtils;
 
 import com.yc.video.R;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 /**
  * <pre>
@@ -54,7 +54,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise: 用于普通播放器
  * </pre>
  */
-public class CustomBottomView extends FrameLayout implements InterControlView,
+public class CustomBottomView extends FrameLayout implements IControlView,
         View.OnClickListener, SeekBar.OnSeekBarChangeListener {
 
     private Context mContext;

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/view/CustomCompleteView.java

@@ -35,7 +35,7 @@ import com.yc.video.tool.BaseToast;
 import com.yc.video.tool.PlayerUtils;
 
 import com.yc.video.R;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 
 /**
@@ -47,7 +47,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomCompleteView extends FrameLayout implements InterControlView, View.OnClickListener {
+public class CustomCompleteView extends FrameLayout implements IControlView, View.OnClickListener {
 
     private Context mContext;
     private ControlWrapper mControlWrapper;

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/view/CustomErrorView.java

@@ -36,7 +36,7 @@ import com.yc.video.bridge.ControlWrapper;
 
 import com.yc.video.R;
 import com.yc.video.tool.PlayerUtils;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 
 /**
@@ -48,7 +48,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomErrorView extends LinearLayout implements InterControlView, View.OnClickListener {
+public class CustomErrorView extends LinearLayout implements IControlView, View.OnClickListener {
 
     private Context mContext;
     private float mDownX;

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/view/CustomLiveControlView.java

@@ -33,7 +33,7 @@ import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.tool.PlayerUtils;
 
 import com.yc.video.R;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 
 /**
@@ -45,7 +45,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise: 用于直播
  * </pre>
  */
-public class CustomLiveControlView extends FrameLayout implements InterControlView, View.OnClickListener {
+public class CustomLiveControlView extends FrameLayout implements IControlView, View.OnClickListener {
 
     private Context mContext;
     private ControlWrapper mControlWrapper;

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/view/CustomOncePlayView.java

@@ -33,7 +33,7 @@ import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.config.ConstantKeys;
 import com.yc.video.tool.BaseToast;
 import com.yc.video.tool.PlayerUtils;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 
 /**
@@ -45,7 +45,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomOncePlayView extends LinearLayout implements InterControlView {
+public class CustomOncePlayView extends LinearLayout implements IControlView {
 
     private Context mContext;
     private float mDownX;

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/view/CustomPrepareView.java

@@ -33,7 +33,7 @@ import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.player.VideoViewManager;
 
 import com.yc.video.R;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 
 /**
@@ -45,7 +45,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomPrepareView extends FrameLayout implements InterControlView {
+public class CustomPrepareView extends FrameLayout implements IControlView {
 
     private Context mContext;
     private ControlWrapper mControlWrapper;

+ 2 - 2
VideoPlayer/src/main/java/com/yc/video/ui/view/CustomTitleView.java

@@ -38,7 +38,7 @@ import com.yc.video.bridge.ControlWrapper;
 import com.yc.video.tool.PlayerUtils;
 
 import com.yc.video.R;
-import com.yc.video.ui.inter.InterControlView;
+import com.yc.video.ui.inter.IControlView;
 
 
 /**
@@ -50,7 +50,7 @@ import com.yc.video.ui.inter.InterControlView;
  *     revise:
  * </pre>
  */
-public class CustomTitleView extends FrameLayout implements InterControlView, View.OnClickListener {
+public class CustomTitleView extends FrameLayout implements IControlView, View.OnClickListener {
 
     private Context mContext;
     private ControlWrapper mControlWrapper;