Exoplayer2学习-- 通过CacheUtil实现预加载(

2017-12-22  本文已影响833人  vb12

这篇文章记录exoplayer2中如何预加载数据流(或者叫缓存数据), 以及怎么删除已预加载的数据

下载功能:

通过 CacheUtil.cache() 方法可以很方便的实现预加载或者下载数据的功能. 支持各种流格式.

public static void cache(
    DataSpec dataSpec,
    Cache cache,
    DataSource upstream,
    CachingCounters counters)

注意: 这是一个阻塞调用, 所以需要在后台线程中调用.

预加载

既然支持了下载功能, 预加载也就很简单了, 只需要把指定下载的数据大小设置为要预加载的大小.
方法就是通过DataSpec 参数.

dataSpec = new DataSpec(uri, 0, 100 * 1024, null);

这样设置就会预加载100k数据.

查询预加载状态

上面的cache()方法接受一个CachingCounters型参数, 可以通过这个参数来实时获取预加载的进度状态.

// In thread A
CacheUtil.cache(dataSpec, cache, upstreamDataSource, counters);
// In thread B
double downloadPercentage = (counters.totalCachedBytes() * 100d) / counters.contentLength;

高级设置

基本功能都可以通过上面的方式实现, 另外还有一个配置更灵活, 功能更强大的重载方法cache() 其支持各种参数的配置

public static void cache(
DataSpec dataSpec,
Cache cache,
CacheDataSource dataSource,
byte[] buffer,
PriorityTaskManager priorityTaskManager,
int priority,
CachingCounters counters,
boolean enableEOFException)

通过PriorityTaskManager参数 可以设置下载的不同优先级, 从而对不同的数据流进行区分对待

删除已缓存数据

public static void remove(Cache cache, String key)

至于key 是从哪来的, 可以看这个更直观的方式:

CacheUtil.remove(cache, CacheUtil.getKey(dataSpec));

代码

上一篇下一篇

猜你喜欢

热点阅读