音视频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)
}
}
})
}...
发表评论