JeffVideoCache
Better than AndroidVideoCache
Refer to the English Development Document
开发文档
- 1.实现脱离播放器的预加载功能
- 2.实现视频的边下边播功能
- 3.实现M3U8视频边下边播功能
- 4.实现MP4视频的边下边播功能
- 5.支持的播放器是exoplayer和ijkplayer
- 6.支持接入okhttp
- 7.支持拖动进度条之后继续缓存到本地的功能
- 8.支持LRU清理规则, 可以设置缓存的过期时间
JeffVideoCache架构
JeffVideoCache 核心放在客户端, local server端和client做好数据同步的工作
1.如何接入
在build.gradle中引入
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
在demo中直接引用
dependencies {
implementation 'com.github.JeffMony:JeffVideoCache:1.0.0'
}
1.1 初始化
程序启动的时候设置JeffVideoCache ----> SDK初始化配置
File saveFile = StorageUtils.getVideoFileDir(this);
if (!saveFile.exists()) {
saveFile.mkdir();
}
VideoProxyCacheManager.Builder builder = new VideoProxyCacheManager.Builder().
setFilePath(saveFile.getAbsolutePath()). //缓存存储位置
setConnTimeOut(60 * 1000). //网络连接超时
setReadTimeOut(60 * 1000). //网络读超时
setExpireTime(2 * 24 * 60 * 60 * 1000). //2天的过期时间
setMaxCacheSize(2 * 1024 * 1024 * 1024); //2G的存储上限
VideoProxyCacheManager.getInstance().initProxyConfig(builder.build());
初始化配置:
- 1.设置缓存存储的路径
- 2.设置链接超时时间
- 3.设置网络读超时的时间
- 4.设置缓存的过期时间
- 5.设置最大缓存的限制
- 6.设置自定义的本地代理端口
- 7.设置是否使用okhttp;网络请求框架
- 8.设置网络请求是否忽略证书
1.2 构建本地代理url
playUrl = ProxyCacheUtils.getProxyUrl(uri.toString(), null, null);
public static String getProxyUrl(String videoUrl, Map<String, String> headers, Map<String, Object> cacheParams)
可以传入headers, 也可以传入其他额外参数,根据你们自己的需求来
构建的url主要是base64编码的
1.3 发起请求
VideoProxyCacheManager.getInstance().startRequestVideoInfo(videoUrl, headers, extraParams);
public void startRequestVideoInfo(String videoUrl, Map<String, String> headers, Map<String, Object> extraParams)
1.4 设置缓存监听
VideoProxyCacheManager.getInstance().addCacheListener(videoUrl, mListener);
其中mListener如下:
public interface IVideoCacheListener {
void onCacheStart(VideoCacheInfo cacheInfo);
void onCacheProgress(VideoCacheInfo cacheInfo);
void onCacheError(VideoCacheInfo cacheInfo, int errorCode);
void onCacheForbidden(VideoCacheInfo cacheInfo);
void onCacheFinished(VideoCacheInfo cacheInfo);
}
1.5 设置正在播放链接
VideoProxyCacheManager.getInstance().setPlayingUrlMd5(ProxyCacheUtils.computeMD5(videoUrl));
1.6 暂停缓存任务
VideoProxyCacheManager.getInstance().pauseCacheTask(mVideoUrl);
1.7 恢复缓存任务
VideoProxyCacheManager.getInstance().resumeCacheTask(mVideoUrl);
1.8 拖动进度条
long totalDuration = mPlayer.getDuration();
if (totalDuration > 0) {
float percent = position * 1.0f / totalDuration;
VideoProxyCacheManager.getInstance().seekToCacheTaskFromClient(mVideoUrl, percent);
}
1.9 释放缓存任务
VideoProxyCacheManager.getInstance().stopCacheTask(mVideoUrl); //停止视频缓存任务
VideoProxyCacheManager.getInstance().releaseProxyReleases(mVideoUrl);
Development Document
- 1.It can play the video while caching it
- 2.It supports M3U8 , MP4 and so on