首页 文章

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

提问于
浏览
1

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

但是,我需要的是,当第一个mp3文件完成播放时,下一个mp3文件(来自url)不应该花时间准备,因为它应该没有中断播放 . 我想知道, Is there way to attach next mp3 files for buffering while playing current mp3? ,所以我们可以不间断地播放它 .

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

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

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

2 回答

  • 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;
                    }
    

    Where playSong is

    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

  • 0

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

相关问题