我使用MediaPlayer从网络播放单首MP3歌曲。数据源是从网络下载的文件。这个文件是chuncks。
我们假设我们有以下比赛状态。
歌曲持续时间:4:00
当前chunck加载到玩家: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();
}
}