当前位置: 代码网 > it编程>App开发>Android > 基于ExoPlayer的缓存方案实现

基于ExoPlayer的缓存方案实现

2024年07月31日 Android 我要评论
AndroidVideoCache 的原理是通过代理的策略实现一个中间层,将网络视频请求转移到本地实现的代理服务器上,这样真正请求的数据就会被代理拿到,然后代理一边向本地写入数据,一边根据需要的数据看是读网络数据还是读本地缓存数据,从而实现数据的复用。音视频APP 的一个必备功能就是在播放的时候会持续缓存完整个音频,同时进度条会更新缓存进度。下面是 CacheDataSource 改之后的代码,这个是我们内部播放框架的一部分,框架暂时没有开源计划,所以我把CacheDataSource相关的代码上传了。

音视频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)
            }
        }
    })
}...
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com