基于ExoPlayer的缓存方案实现
2024-01-02 20:53:49
音视频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)
}
}
})
}...
文章来源:https://blog.csdn.net/xiangzhihong8/article/details/135348061
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!