Get everything in from ExoPlayer Cache

前端 未结 1 731
没有蜡笔的小新
没有蜡笔的小新 2021-02-06 18:50

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

1条回答
  •  梦如初夏
    2021-02-06 19:00

    The Cache offers no convenient API to get all completely cached URIs or similar.

    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.

    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
    }
    

    If the data for a given uri is only partially cached you can check what spans are available like this:

    NavigableSet cachedSpans =
       cache.getCachedSpans(CacheUtil.generateKey(uri));
    

    0 讨论(0)
提交回复
热议问题