我正在开发一个应用程序,涉及到收听从网络异步加载的音轨的播放列表。这里的问题是使用mediaplayer,我加载(准备)每个音轨后,其他,这会导致播放曲目之间的轻微延迟,我不想要。我想知道是否有一种方法可以先加载/准备整个曲目列表,然后播放它们。.有没有办法做到这一点?
我现在的逻辑是这样的:
var currentPlayingIndex = mutableStateOf(0)
val _playList=["url","url","url","url","url","url"]
mediaPlayer.apply {
reset()
setDataSource("url to audio")
prepareAsync()
setOnPreparedListener {
if (_isPlaying.value) {
println("current ${currentPlayingIndex.value}")
it.start()
}
}
setOnCompletionListener {
currentPlayingIndex.value++
playAudio(
_playList[currentPlayingIndex.value],
context,
mediaPlayer
)
}
}
字符串
1条答案
按热度按时间mqxuamgl1#
您可以使用
setOnBufferingUpdateListener
和setOnInfoListener
实现类似的效果。在此代码中,当当前曲目达到最后30秒左右时,它开始缓冲下一个曲目,一旦当前曲目结束,下一个曲目开始播放,没有任何间隙。这被称为无间隙播放。字符串
在上面的代码中,你可以改变你想在哪里流你的下一首歌,我已经添加了30000,这是30秒前结束的轨道。调整代码根据您的要求。