基于ExoPlayer的缓存方案实现

音视频APP 的一个必备功能就是在播放的时候会持续缓存完整个音频,同时进度条会更新缓存进度。但是目前Google推出的播放器ExoPlayer本身并没有提供什么方便的接口去实现这个功能,因此大多数的开发者可能会使用AndroidVideoCache 开源库来实现缓存。

AndroidVideoCache 的原理是通过代理的策略实现一个中间层,将网络视频请求转移到本地实现的代理服务器上,这样真正请求的数据就会被代理拿到,然后代理一边向本地写入数据,一边根据需要的数据看是读网络数据还是读本地缓存数据,从而实现数据的复用。其实 ExoPlayer 本身就有完善的缓存逻辑,为了实现上述功能就引入 AndroidVideoCache 虽然可以更轻松地实现,但是不够优雅。

那我们怎么改造 ExoPlayer 的代码来实现缓存进度监听的功能呢?首先,设置下 ExoPlayer,让它能在播放音频的时候持续缓存完整个音频文件。

ExoPlayer.Builder(context).setLoadControl(
    object : DefaultLoadControl() {
        override fun shouldContinueLoading(playbackPositionUs: Long, bufferedDurationUs: Long, playbackSpeed: Float): Boolean {
            return if (urlCacheable && isNetworkConnected) {
                true
            } else {
                super.shouldContinueLoading(playbackPositionUs, bufferedDurationUs, playbackSpeed)
            }
        }
    })
}...

相关推荐

  1. 基于ExoPlayer缓存方案实现

    2024-01-03 16:30:01       33 阅读
  2. 多级缓存实现方案

    2024-01-03 16:30:01       11 阅读
  3. Android Media3 ExoPlayer 如何正确设置缓存大小

    2024-01-03 16:30:01       35 阅读
  4. 基于redis分布式锁实现方案

    2024-01-03 16:30:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 16:30:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 16:30:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 16:30:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 16:30:01       18 阅读

热门阅读

  1. 基于STM32+QT设计的无人超市消费系统_139

    2024-01-03 16:30:01       37 阅读
  2. flutter 文件上传封装

    2024-01-03 16:30:01       33 阅读
  3. 多边形压缩 Douglas-Peucker算法

    2024-01-03 16:30:01       46 阅读
  4. 关于系统学习HarmonyOS的心得体会

    2024-01-03 16:30:01       35 阅读
  5. react+umi+antd项目搭建配置

    2024-01-03 16:30:01       40 阅读
  6. python 中断点调试 pdb 包的介绍及使用

    2024-01-03 16:30:01       39 阅读
  7. 宏预处理器的非直译解释备忘

    2024-01-03 16:30:01       28 阅读