从ExoPlayer缓存中获取所有内容 [英] Get everything in from ExoPlayer Cache
问题描述
使用 https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/upstream/cache/CacheDataSourceFactory.html 是否可以获取所有已缓存的MediaSource?
Using https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/upstream/cache/CacheDataSourceFactory.html is there a way to grab all the MediaSources that have been cached?
推荐答案
缓存不提供便捷的API来获取所有完全缓存的URI或类似内容.
The Cache offers no convenient API to get all completely cached URIs or similar.
如果您创建自己的 LeastRecentlyUsedCacheEvictor ),您可以在添加或删除跨度时自己做记账,然后委托给LRUCacheEvictor.这样,您可以维护缓存的URL列表.
If you create your own CacheEvictor (for instance by wrapping a LeastRecentlyUsedCacheEvictor) you can do your own book keeping when spans are added or removed and then delegate to the LRUCacheEvictor. This way you can maintain a list of cached URLs.
您可以检查给定uri的哪些部分被缓存:
You can check what portions for a given uri is cached:
// create the data spec of a given media file
Uri uri = Uri.parse("http://cool.stuff.com/song-123.mp3")
DataSpec dataSpec = new DataSpec(uri);
// get information about what is cached for the given data spec
CacheUtil.CachingCounters counters = new CacheUtil.CachingCounters();
CacheUtil.getCached(dataSpec, cache, counters);
if (counters.contentLength == counters.totalCachedBytes()) {
// all bytes cached
} else if (counters.totalCachedBytes() == 0){
// not cached at all
} else {
// partially cached
}
如果给定uri的数据仅部分缓存,则可以检查可用的跨度,如下所示:
If the data for a given uri is only partially cached you can check what spans are available like this:
NavigableSet<CacheSpan> cachedSpans =
cache.getCachedSpans(CacheUtil.generateKey(uri));
这篇关于从ExoPlayer缓存中获取所有内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!