android - 我们如何在流式传输后缓存 HLS 视频 url

标签 android caching http-live-streaming android-video-player exoplayer

我正在使用 exomedia 库通过 hls 播放视频。我想在视频流式传输时缓存视频。 AndroidVideoCache 库可以很好地完成这项工作,但它不支持 HLS。

最佳答案

这可以通过配置 Exomedia 使用的 okhttp 客户端来完成。图书馆。

首先,我们需要使用 setVideoUri(uri,renderbuilder) 方法为 emvideoview 提供自定义渲染器。

为了提供自定义 hls 渲染构建器,我们需要重写 HlsRenderBuilder 类并重写 createDataSource 方法。这里我们需要返回OkHttpDatasource (link)对象。

现在我们需要在 OktthpDatasource 类的构造函数中提供配置好的 Okhttp 客户端。

为了配置okhttp客户端。 我们需要向这个客户端添加响应拦截器,并添加修改原始响应头以启用缓存。示例配置即可。

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

关于android - 我们如何在流式传输后缓存 HLS 视频 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39929242/

相关文章:

android - 没有Phonegap构建的iOS Phonegap应用

c# - .NET 4 缓存支持

ios - iOS 上的直播应用程序出现错误 849

video-streaming - 使 gstreamer 循环文件名

java - Firebase数据库分页滚动操作

java - 空白类型的 Android ClassCastException

android - 显示空白屏幕的 OnBackPressed fragment

java - 禁用 JPA EclipseLink 2.4 缓存

java - Play框架和图像缓存

java - HTTP Live Streaming (HLS) 无法运行 Java FX 2.2.21