Android:有没有办法从网址播放顺序mp3文件而不中断?

时间:2014-11-24 11:38:47

标签: android mp3 android-mediaplayer

我正在创建从URL加载顺序mp3文件的应用程序。当我尝试在第一个mp3文件完成时初始化下一个mp3文件,但问题是,当第一个文件完成时,播放器需要时间来准备或初始化下一个mp3文件,是的我知道这是媒体播放器的一部分,准备工作需要一些时间(对于prepare()它可能会很长而且prepareAsync()相对较短的时间。)

但是,我需要的是,当第一个mp3文件完成播放时,下一个mp3文件(来自url)不应该花时间准备,因为它应该没有中断播放。我想知道,有没有办法在播放当前的mp3时附加下一个mp3文件进行缓冲?,所以我们可以不间断地播放它。

我也试着在播放第一个时在缓存中下载下一个mp3文件。但问题是,当第一个完成时,第二个mp3文件可能没有完全下载(这对于2g连接来说太差了)。并且播放器将初始化下载的mp3文件的一部分。并且播放器将仅播放已初始化的下载文件的那部分(如果我错误,请更正).it导致文件损坏。而且表现不佳。

我尝试缓存下一个mp3文件,而当前的mp3播放率约为75%,但在这种情况下,mp3文件没有完全缓存,也导致文件损坏。

所以请给我一些建议,如何在没有突发的情况下播放连续的mp3文件?并且要做到这一点。提前致谢

2 个答案:

答案 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();
        }
    }

MediaPlayer.OnSeekCompleteListener

答案 1 :(得分:0)

使用专为您的案例设计的setNextMediaPlayer(mp) API。您必须在播放期间准备另一个MediaPlayer实例并将其设置为下一个。然后你就没有时间在曲目之间浪费了。基本上你必须使用2个实例并来回交换它们。