How can we cache HLS video url once streamed

帅比萌擦擦* 提交于 2019-12-10 21:35:39

问题


I am using exomedia library to play video through hls. I want to cache video as the video gets streamed. AndroidVideoCache library do this job well but it doesn't support HLS .


回答1:


It can be done by configuring the okhttp client used by the Exomedia library.

First we need provide custom renderbuilder to emvideoview by using setVideoUri(uri,renderbuilder) method.

In order to provide custom hls render builder we need to override HlsRenderBuilder class and override createDataSource method. Here we need to return OkHttpDatasource(link) object.

Now we need to provide configured Okhttp client in OktthpDatasource class's consturctor.

In order to configure okhttp client . We need to add response interceptor to this client and add modify the original response header for enabling caching. Sample configuration can be.

 CacheControl cacheControl = new CacheControl.Builder()
                .maxStale(22, TimeUnit.DAYS)
                .maxAge(22, TimeUnit.DAYS)
                .build();

        Response originalResponse = chain.proceed(chain.request());

        if (originalResponse.code() == 206 || originalResponse.code() == 200) {
            if (originalResponse.code() == 200) {
                Headers newHeader = originalResponse.headers().newBuilder().removeAll("Expires").removeAll("Pragma").build();
                originalResponse = originalResponse.newBuilder().code(200).body(originalResponse.body()).headers(newHeader).build();
            } else {
                originalResponse = originalResponse.newBuilder().code(200).body(originalResponse.body()).build();
            }
        }

        if (isNetworkAvailable(mContext)) {
            int maxAge = 60; // read from cache for 1 minute
            return originalResponse.newBuilder()
                    .header("Cache-Control", cacheControl.toString())
                    .build();
        } else {
            int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
            return originalResponse.newBuilder()
                    .header("Cache-Control", cacheControl.toString())
                    .build();
        }


来源:https://stackoverflow.com/questions/39929242/how-can-we-cache-hls-video-url-once-streamed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!