Search code examples
androidcachingvideoandroid-video-player

How to cache a video in background in android?


I am building an android application where a user can view some listed video. Those videos are categories into some channel. Once a channel is selected by user I want to cache all the video related to that channel in my cache memory so can play the video when there is no internet also.

Can anyone have more understanding about video cache without playing please help me in understanding how I can achieve this task.

Right now I am able to cache video If it's played using some library.


Solution

  • I have find the following working solution for caching video in background (single/multiple) using below lib, no need of player/video_view.use AsyncTaskRunner

    Videocaching Lib

    Add following in line in your gradle file

    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

    Create static instance in application class using following code

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

    Write following code in your activity to pass url

    public String cachingUrl(String urlPath) {
    
     return Applications.getProxy(this).getProxyUrl(urlPath, true);
    
    }