我正在创建从URL加载顺序mp3文件的应用程序。当我尝试在第一个mp3文件完成时初始化下一个mp3文件,但问题是,当第一个文件完成时,播放器需要时间来准备或初始化下一个mp3文件,是的我知道这是媒体播放器的一部分,准备工作需要一些时间(对于prepare()
它可能会很长而且prepareAsync()
相对较短的时间。)
但是,我需要的是,当第一个mp3文件完成播放时,下一个mp3文件(来自url)不应该花时间准备,因为它应该没有中断播放。我想知道,有没有办法在播放当前的mp3时附加下一个mp3文件进行缓冲?,所以我们可以不间断地播放它。
我也试着在播放第一个时在缓存中下载下一个mp3文件。但问题是,当第一个完成时,第二个mp3文件可能没有完全下载(这对于2g连接来说太差了)。并且播放器将初始化下载的mp3文件的一部分。并且播放器将仅播放已初始化的下载文件的那部分(如果我错误,请更正).it导致文件损坏。而且表现不佳。
我尝试缓存下一个mp3文件,而当前的mp3播放率约为75%,但在这种情况下,mp3文件没有完全缓存,也导致文件损坏。
所以请给我一些建议,如何在没有突发的情况下播放连续的mp3文件?并且要做到这一点。提前致谢
答案 0 :(得分:0)
Just save all Urls in an ArrayList
并注意current index of songUrl
。并将SekkCompleteListener添加到它。当歌曲完成后更改索引并播放它。完整的详细教程是AndroidHive
if(currentSongIndex < (songsList.size() - 1)){
playSong(currentSongIndex + 1);
currentSongIndex = currentSongIndex + 1;
}else{
// play first song
playSong(0);
currentSongIndex = 0;
}
playSong
public void playSong(int songIndex){
// Play song
try {
mp.reset();
mp.setDataSource(songsList.get(songIndex).get("songPath"));
mp.prepare();
mp.start();
// Displaying Song title
String songTitle = songsList.get(songIndex).get("songTitle");
songTitleLabel.setText(songTitle);
// Changing Button Image to pause image
btnPlay.setImageResource(R.drawable.btn_pause);
// set Progress bar values
songProgressBar.setProgress(0);
songProgressBar.setMax(100);
// Updating progress bar
updateProgressBar();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
使用专为您的案例设计的setNextMediaPlayer(mp) API。您必须在播放期间准备另一个MediaPlayer实例并将其设置为下一个。然后你就没有时间在曲目之间浪费了。基本上你必须使用2个实例并来回交换它们。