gpt4 book ai didi

android - MediaPlayer.seekTo() 不适用于无缓冲位置

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:01 26 4
gpt4 key购买 nike

我使用 MediaPlayer 从网络播放一首 mp3 歌曲。数据源是 HTTP URL。

假设我们有以下播放状态。

歌曲时长:1:00

当前进度:0:10

当前缓冲进度 0:30

假设我想跳过歌曲的某些部分并向前搜索。我用 MediaPlayer.seekTo() 方法来做。如果我寻求缓冲位置 (0:20),它会正确执行。但是,如果我寻找一个尚未缓冲的位置 (0:40),则 MediaPlayer 会表现得很奇怪。它立即表明它已正确查找,而无需等待缓冲区填满。事实上,它继续在寻找之前的相同位置播放。从现在开始,MediaPlayer.getCurrentPosition() 方法会返回错误的位置。当播放结束并调用 OnCompletionListener.onCompletion 回调时,当前媒体播放器位置远高于整个歌曲持续时间。

有解决这个问题的想法吗?

最佳答案

我找到了解决此问题的方法:

首先创建一个OnBufferingUpdateListener:

MediaPlayer.OnBufferingUpdateListener bufferingListener = new MediaPlayer.OnBufferingUpdateListener() {
public void onBufferingUpdate(MediaPlayer mp, int percent) {
//code to increase your secondary seekbar
}
};

然后在您的搜索栏事件 onProgressChanged 中执行以下操作:

public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int secondaryPosition = seekBar.getSecondaryProgress();
if (progress > secondaryPosition)
seekBar.setProgress(secondaryPosition);
}

这样您就可以保证用户无法将进度条拖动到未缓冲的位置(并且您还可以看到缓冲的内容)。

关于android - MediaPlayer.seekTo() 不适用于无缓冲位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com