|
@@ -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中特别常见,因此该库一定程度是借鉴腾讯播放器……
|
|
|
|
|
|
|
|
|
|