黃驊做網(wǎng)站_黃驊昊信科技|黃驊網(wǎng)站|黃驊網(wǎng)站開發(fā)|黃驊微信|黃驊惡意點擊競價時用的什么軟件
音視頻APP 的一個必備功能就是在播放的時候會持續(xù)緩存完整個音頻,同時進度條會更新緩存進度。但是目前Google推出的播放器ExoPlayer本身并沒有提供什么方便的接口去實現(xiàn)這個功能,因此大多數(shù)的開發(fā)者可能會使用AndroidVideoCache 開源庫來實現(xiàn)緩存。
AndroidVideoCache 的原理是通過代理的策略實現(xiàn)一個中間層,將網(wǎng)絡(luò)視頻請求轉(zhuǎn)移到本地實現(xiàn)的代理服務(wù)器上,這樣真正請求的數(shù)據(jù)就會被代理拿到,然后代理一邊向本地寫入數(shù)據(jù),一邊根據(jù)需要的數(shù)據(jù)看是讀網(wǎng)絡(luò)數(shù)據(jù)還是讀本地緩存數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)的復用。其實 ExoPlayer 本身就有完善的緩存邏輯,為了實現(xiàn)上述功能就引入 AndroidVideoCache 雖然可以更輕松地實現(xiàn),但是不夠優(yōu)雅。
那我們怎么改造 ExoPlayer 的代碼來實現(xiàn)緩存進度監(jiān)聽的功能呢?首先,設(shè)置下 ExoPlayer,讓它能在播放音頻的時候持續(xù)緩存完整個音頻文件。
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)}}})
}...