如何在android中的后台缓存视频?

时间:2018-03-05 18:01:52

标签: android caching video android-video-player

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

任何人都可以在不玩游戏的情况下更多地了解视频缓存,请帮助我了解如何实现此任务。

现在我能够缓存视频如果它是使用某个库播放的。

1 个答案:

答案 0 :(得分:2)

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

Videocaching Lib

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

compile 'com.danikula:videocache:2.7.0'
  

由于我们只需要启动预取,无需在while循环中执行任何操作。

     

或者我们可以使用ByteArrayOutputStream将数据写入磁盘。

 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();
    }
  

lib的重要代码。做

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

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();
}

在您的活动中编写以下代码以传递url

public String cachingUrl(String urlPath) {

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

}