Android视频缓存之AndroidVideoCache(一)
AndroidVideoCache主要是做视频缓存管理功能,支持边下边播,离线播放和缓存管理等。用MediaPlayer可以支持在线播放和播放本地资源。但是不支持缓存,因此很消耗用户流量和服务器流量。这时候AndroidVideoCache就可以派上用场了。
1. 基本原理
AndroidVideoCache通过代理的策略将我们的网络请求代理到本地服务,本地服务决定数据是从缓存获取还是发起网络请求,如果需要发起网络请求就先向本地写入数据,再从本地服务获取数据给VideoView,从而做到数据的复用。
2. 主要内容介绍
HttpProxyCacheServer是AndroidVideoCache对外的接口,通过这个类和Videoview联系起来,判断本地是否有缓存,有的话直接返回本地文件;没有就建立一个和url对应的HttpProxyCacheServerClients处理本次请求,请求工作交给Source接口,缓存工作交给Cache接口,文件缓存是用LRU算法实现,可以根据文件大小或者文件个数管理缓存。
CacheListener是缓存本地成功后回调的接口,用于更新进度相关的UI。
-
cacheRoot是缓存默认的文件夹,如果有SD卡并申请了权限,会把文件放到下面的目录下:
-
("/Android/data/[app_package_name]/cache")
否则就放到手机的内部存储中
cacheDirPath = "/data/data/" + context.getPackageName() + "/cache/";
-
-
FileNameGenerator 用于生成文件名,默认是使用Md5FileNameGenerator,生成MD5串作为文件名
-
DiskUsage是用于管理本地缓存,默认是通过文件大小进行管理,默认大小是512M
-
SourceInfoStorage是用于存储SourInfo,默认是数据库存储
-
SourInfo主要用于存储http请求源的一些信息,比如url,数据长度length,请求资源的类型mime
-
HeaderInjector 用于添加自定义的头部字段,默认是null
3.使用方法
- 首先导包:
compile 'com.danikula:videocache:2.7.1'
- 创建代理
HttpProxyCacheServer proxy = getProxy();
String proxyUrl = proxy.getProxyUrl(VIDEO_URL);
videoView.setVideoPath(proxyUrl);