Browse Source

更新文档

杨充 4 năm trước cách đây
mục cha
commit
dfc3bc718b

+ 6 - 6
Demo/build.gradle

@@ -60,13 +60,13 @@ dependencies {
 
     //自己封装的库,都有对应的案例项目【欢迎star】:https://github.com/yangchong211
     implementation 'cn.yc:YCStateLib:1.1'                                  //状态管理
-    implementation project(':VideoCache')
-    implementation project(':VideoPlayer')
-    implementation project(':VideoKernel')
+//    implementation project(':VideoCache')
+//    implementation project(':VideoPlayer')
+//    implementation project(':VideoKernel')
 
-//    implementation 'cn.yc:VideoPlayer:3.0.1'
-//    implementation 'cn.yc:VideoCache:3.0.0'
-//    implementation 'cn.yc:VideoKernel:3.0.1'
+    implementation 'cn.yc:VideoPlayer:3.0.1'
+    implementation 'cn.yc:VideoCache:3.0.1'
+    implementation 'cn.yc:VideoKernel:3.0.1'
     implementation 'cn.yc:YCStatusBarLib:1.4.0'
  //状态栏
 }

+ 3 - 1
VideoCache/src/main/java/com/yc/videocache/cache/PreloadManager.java

@@ -62,7 +62,9 @@ public class PreloadManager {
      * @param rawUrl 原始视频地址
      */
     public void addPreloadTask(String rawUrl, int position) {
-        if (isPreloaded(rawUrl)) return;
+        if (isPreloaded(rawUrl)) {
+            return;
+        }
         PreloadTask task = new PreloadTask();
         task.mRawUrl = rawUrl;
         task.mPosition = position;

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

@@ -18,6 +18,12 @@
 - 16.版本更新文档记录
 
 
+### 00.视频播放器通用框架
+- 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换
+- 对于视图状态切换和后期维护拓展,避免功能和业务出现耦合。比如需要支持播放器UI高度定制,而不是该lib库中UI代码
+- 针对视频播放,音频播放,播放回放,以及视频直播的功能。使用简单,代码拓展性强,封装性好,主要是和业务彻底解耦,暴露接口监听给开发者处理业务具体逻辑
+- 该播放器整体架构:播放器内核(自由切换) +  视频播放器 + 边播边缓存 + 高度定制播放器UI视图层
+
 
 ### 01.该视频播放器介绍
 #### 1.1 该库说明
@@ -445,6 +451,40 @@
 
 
 ### 12.视频缓存原理介绍
+- 网络上比较好的项目:https://github.com/danikula/AndroidVideoCache
+    - 网络用的HttpURLConnection,文件缓存处理,文件最大限度策略,回调监听处理,断点续传,代理服务等。
+- 但是存在一些问题,比如如下所示
+    - 文件的缓存超过限制后没有按照lru算法删除,
+    - 处理返回给播放器的http响应头消息,响应头消息的获取处理改为head请求(需服务器支持)
+    - 替换网络库为okHttp(因为大部分的项目都是以okHttp为网络请求库的),但是这个改动性比较大
+- 然后看一下怎么使用,超级简单。传入视频url链接,返回一个代理链接,然后就可以呢
+    ```
+    HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(this);
+    String proxyUrl = cacheServer.getProxyUrl(URL_AD);
+    mVideoPlayer.setUrl(proxyUrl);
+  
+  
+    public static HttpProxyCacheServer getProxy(Context context) {
+        return sharedProxy == null ? (sharedProxy = newProxy(context)) : sharedProxy;
+    }
+
+    private static HttpProxyCacheServer newProxy(Context context) {
+        return new HttpProxyCacheServer.Builder(context)
+                .maxCacheSize(512 * 1024 * 1024)       // 512MB for cache
+                //缓存路径,不设置默认在sd_card/Android/data/[app_package_name]/cache中
+                //.cacheDirectory()
+                .build();
+    }
+    ```
+- 大概的原理
+    - 原始的方式是直接塞播放地址给播放器,它就可以直接播放。现在我们要在中间加一层本地代理,播放器播放的时候(获取数据)是通过我们的本地代理的地址来播放的,这样我们就可以很好的在中间层(本地代理层)做一些处理,比如:文件缓存,预缓存(秒开处理),监控等。
+- 如何实现预加载
+    - 其实预加载的思路很简单,在进行一个播放视频后,再返回接下来需要预加载的视频url,启用线程去请求下载数据
+    - 开启一个线程去请求并预加载一部分的数据,可能需要预加载的数据大于>1,利用队列先进入的先进行加载,因此可以采用LinkedHashMap保存正在预加载的task。
+    - 在开始预加载的时候,判断该播放地址是否已经预加载,如果不是那么创建一个线程task,并且把它放到map集合中。然后执行预加载逻辑,也就是执行HttpURLConnection请求
+    - 提供取消对应url加载的任务,因为有可能该url不需要再进行预加载了,比如参考抖音,当用户瞬间下滑几个视频,那么很多视频就需要跳过了不需要再进行预加载
+- 具体直接看项目代码:VideoCache缓冲模块
+
 
 
 ### 13.查看视频播放器日志
@@ -455,7 +495,8 @@
 
 
 ### 14.该库异常code说明
-- 针对视频封装库,统一处理抛出的异常,为了方便开发者快速知道异常的来由,则可以查询约定的code码。这个在sdk中特别常见,因此该库一定程度是借鉴腾讯播放器……
+- 针对视频封装库,统一处理抛出的异常,为了方便开发者快速知道异常的来由,则可以查询约定的code码。
+    - 这个在sdk中特别常见,因此该库一定程度是借鉴腾讯播放器……
 
 
 

+ 4 - 2
read/12.视频边播边缓存分析.md

@@ -52,8 +52,10 @@
 
 
 ### 04.如何实现预加载
-
-
+- 其实预加载的思路很简单,在进行一个播放视频后,再返回接下来需要预加载的视频url,启用线程去请求下载数据
+    - 开启一个线程去请求并预加载一部分的数据,可能需要预加载的数据大于>1,利用队列先进入的先进行加载,因此可以采用LinkedHashMap保存正在预加载的task。
+    - 在开始预加载的时候,判断该播放地址是否已经预加载,如果不是那么创建一个线程task,并且把它放到map集合中。然后执行预加载逻辑,也就是执行HttpURLConnection请求
+    - 提供取消对应url加载的任务,因为有可能该url不需要再进行预加载了,比如参考抖音,当用户瞬间下滑几个视频,那么很多视频就需要跳过了不需要再进行预加载
 
 
 ### 14.视频缓冲后拖动问题