Browse Source

更新demo案例

杨充 4 years ago
parent
commit
0166a11021

+ 5 - 0
VideoKernel/src/main/java/com/yc/kernel/factory/PlayerFactory.java

@@ -17,6 +17,11 @@ import com.yc.kernel.inter.AbstractVideoPlayer;
  */
 public abstract class PlayerFactory<T extends AbstractVideoPlayer> {
 
+    /**
+     * 创建具体的内核播放器Player
+     * @param context                       上下文
+     * @return                              具体的player
+     */
     public abstract T createPlayer(Context context);
 
 }

+ 20 - 13
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/BaseVideoController.java

@@ -64,7 +64,7 @@ import java.util.Map;
  * </pre>
  */
 public abstract class BaseVideoController extends FrameLayout implements InterVideoController,
-        OrientationHelper.OnOrientationChangeListener {
+        InterViewController,OrientationHelper.OnOrientationChangeListener {
 
     //播放器包装类,集合了MediaPlayerControl的api和IVideoController的api
     protected ControlWrapper mControlWrapper;
@@ -183,24 +183,27 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
 
     /**
      * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让ControlComponent位于不同的层级
+     * @param controlViews                         view
      */
-    public void addControlComponent(InterControlView... component) {
-        for (InterControlView item : component) {
+    @Override
+    public void addControlComponent(InterControlView... controlViews) {
+        for (InterControlView item : controlViews) {
             addControlComponent(item, false);
         }
     }
 
     /**
-     * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让ControlComponent位于不同的层级
-     *
-     * @param isPrivate 是否为独有的组件,如果是就不添加到控制器中
+     * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让InterControlView位于不同的层级
+     * @param controlView                           view
+     * @param isPrivate                             是否为独有的组件,如果是就不添加到控制器中
      */
-    public void addControlComponent(InterControlView component, boolean isPrivate) {
-        mControlComponents.put(component, isPrivate);
+    @Override
+    public void addControlComponent(InterControlView controlView, boolean isPrivate) {
+        mControlComponents.put(controlView, isPrivate);
         if (mControlWrapper != null) {
-            component.attach(mControlWrapper);
+            controlView.attach(mControlWrapper);
         }
-        View view = component.getView();
+        View view = controlView.getView();
         if (view != null && !isPrivate) {
             addView(view, 0);
         }
@@ -208,15 +211,18 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
 
     /**
      * 移除控制组件
+     * @param controlView                           view
      */
-    public void removeControlComponent(InterControlView component) {
-        removeView(component.getView());
-        mControlComponents.remove(component);
+    @Override
+    public void removeControlComponent(InterControlView controlView) {
+        removeView(controlView.getView());
+        mControlComponents.remove(controlView);
     }
 
     /**
      * 移除所有的组件
      */
+    @Override
     public void removeAllControlComponent() {
         for (Map.Entry<InterControlView, Boolean> next : mControlComponents.entrySet()) {
             removeView(next.getKey().getView());
@@ -227,6 +233,7 @@ public abstract class BaseVideoController extends FrameLayout implements InterVi
     /**
      * 移除所有独有的组件
      */
+    @Override
     public void removeAllPrivateComponents() {
         Iterator<Map.Entry<InterControlView, Boolean>> it = mControlComponents.entrySet().iterator();
         while (it.hasNext()) {

+ 44 - 0
VideoPlayer/src/main/java/org/yczbj/ycvideoplayerlib/controller/InterViewController.java

@@ -0,0 +1,44 @@
+package org.yczbj.ycvideoplayerlib.controller;
+
+import org.yczbj.ycvideoplayerlib.ui.view.InterControlView;
+
+/**
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/11/21
+ *     desc  : 视频控制器负责自定义视图add/remove操作
+ *     revise:
+ * </pre>
+ */
+public interface InterViewController {
+
+    /**
+     * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让ControlComponent位于不同的层级
+     * @param controlViews                         view
+     */
+    void addControlComponent(InterControlView... controlViews);
+
+    /**
+     * 添加控制组件,最后面添加的在最下面,合理组织添加顺序,可让InterControlView位于不同的层级
+     * @param controlView                           view
+     * @param isPrivate                             是否为独有的组件,如果是就不添加到控制器中
+     */
+    void addControlComponent(InterControlView controlView, boolean isPrivate);
+
+    /**
+     * 移除控制组件
+     * @param controlView                           view
+     */
+    void removeControlComponent(InterControlView controlView);
+
+    /**
+     * 移除所有的组件
+     */
+    void removeAllControlComponent();
+
+    /**
+     * 移除所有独有的组件
+     */
+    void removeAllPrivateComponents();
+}

+ 7 - 1
read/04.视频播放器封装思路.md

@@ -16,7 +16,7 @@
 
 
 ### 00.视频播放器通用框架
-- 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换
+- 基础封装视频播放器player,可以在ExoPlayer、IjkPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换
 - 对于视图状态切换和后期维护拓展,避免功能和业务出现耦合。比如需要支持播放器UI高度定制,而不是该lib库中UI代码
 - 针对视频播放,音频播放,播放回放,以及视频直播的功能。使用简单,代码拓展性强,封装性好,主要是和业务彻底解耦,暴露接口监听给开发者处理业务具体逻辑
 - 该播放器整体架构:播放器内核(自由切换) +  视频播放器 + 边播边缓存 + 高度定制播放器UI视图层
@@ -302,6 +302,12 @@
     - api文档充分完善到每一个细节,以及配套demo,方便快速上手。完善的代码注释,以及项目的类结构图,方便快速了解视频播放器的整体轮廓
 - 丰富的demo案例
     - 提供绝大多数场景的视频播放器功能,完全可以套用demo中的案例,甚至你还可以在案例基础上大幅度优化
+- 日志做到过滤
+    - 比如,视频内核,日志过滤则是:VideoKernel;比如,视频player,日志过滤则是:VideoPlayer;比如,缓存模块,日志过滤则是:VideoCache
+- 该库异常code说明
+    - 针对视频封装库,统一处理抛出的异常,为了方便开发者快速知道异常的来由,则可以查询约定的code码。这个在sdk中特别常见,因此该库一定程度是借鉴腾讯播放器……
+
+
 
 
 ### 13.参考案例和博客记录