android 如何在后台缓存视频?

How to cache a video in background in android?

我正在构建一个 android 应用程序,用户可以在其中查看一些列出的视频。这些视频是某个频道的类别。用户选择频道后,我想在缓存内存中缓存与该频道相关的所有视频,以便在没有互联网时也可以播放视频。

任何人都可以在不播放的情况下对视频缓存有更多了解,请帮助我了解如何完成此任务。

现在我可以缓存视频,如果它是使用一些库播放的。

我找到了以下用于在后台缓存视频的工作解决方案 (single/multiple) 使用下面的库,不需要 player/video_view。使用 AsyncTaskRunner

Videocaching Lib

在您的 gradle 文件中添加以下内容

compile 'com.danikula:videocache:2.7.0'

Since we just need to kick start the prefetching, no need to do anything in while loop.

Or we can use ByteArrayOutputStream to write down the data to disk.

 URL url = null;
 try {
       url = new URL(cachingUrl(cachingUrl));

       InputStream inputStream = url.openStream();
       int bufferSize = 1024;
       byte[] buffer = new byte[bufferSize];
       int length = 0;
       while ((length = inputStream.read(buffer)) != -1) {
             //nothing to do
       }
    } catch (IOException e) {
      e.printStackTrace();
    }

Important code from lib. to do

使用以下代码在应用程序 class 中创建静态实例

private HttpProxyCacheServer proxy;

public static HttpProxyCacheServer getProxy(Context context) {
    Applications app = (Applications) context.getApplicationContext();
    return app.proxy == null ? (app.proxy = app.newProxy()) : app.proxy;
}

private HttpProxyCacheServer newProxy() {
    //return new HttpProxyCacheServer(this);
    return new HttpProxyCacheServer.Builder(this)
            .cacheDirectory(CacheUtils.getVideoCacheDir(this))
            .maxCacheFilesCount(40)
            .maxCacheSize(1024 * 1024 * 1024)
            .build();
}

在你的 activity 中写入以下代码以传递 url

public String cachingUrl(String urlPath) {

 return Applications.getProxy(this).getProxyUrl(urlPath, true);

}