我使用 MediaPlayer 从网络播放一首 MP3 歌曲。数据源是从网络下载的文件。这些文件以大块的形式出现。
假设我们有以下播放状态。
歌曲时长:4:00
播放器中加载的当前块:1:00
假设我想跳过歌曲的某些部分并向前搜索。我用 MediaPlayer.seekTo() 方法来做。如果我寻求定位 (1:40) 它没有正确执行,则搜索栏会在开始位置 (00:00) 并且播放器停止。
public static void seekTo(int progress) {
try {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(sFilePath);
mp.prepare();
int offset = (progress * mp.getDuration()) / 100;
if (sCompleted)
return;
sLastSeek = offset;
if (offset > sMediaPlayer.getDuration()) {
sMediaPlayer.reset();
sMediaPlayer.setDataSource(sFilePath);
sMediaPlayer.prepareAsync();
} else {
sMediaPlayer.seekTo(offset);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}