2014-11-24 32 views
1

我正在创建从URL加载连续mp3文件的应用程序。正如我尝试初始化下一个MP3文件完成第一个MP3文件,但问题是,当第一个文件完成时,播放器需要时间来准备或初始化下一个MP3文件,是的,我知道这是媒体播放器的一部分,准备工作需要一定的时间(对于prepare()可能很长,而对于prepareAsync()则排序时间较短)。Android:有没有方法可以从URL中播放连续的mp3文件而不会中断?

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

正如我还试图与下载下一个MP3文件在缓存中,同时播放第一个。但问题是,完成第一个时,第二个mp3文件可能没有完全下载(这对于2G连接来说太差了)。播放器将初始化下载的mp3文件的一部分。并且播放器将只播放初始化的下载文件的一部分(如果我错了,请更正)。它会导致文件损坏。并且它根本不是很好的表现。

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

所以,请给我建议,我怎样才能播放顺序MP3文件没有突然?而击球手正在做这件事。在此先感谢

回答

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

+0

感谢您的回答,但是,它也将需要两个MP3之间的时间。只是我需要下一个MP3缓冲区应该附加到当前播放。当前的mp3播放缓冲区完成后,应该开始下一个mp3缓冲,这样我就可以播放下一个没有中断的mp3(两个mp3之间的时间)。 – 2014-11-25 06:33:12

0

使用setNextMediaPlayer(mp) API这是专门为您的情况而设计的。您必须在播放过程中准备另一个MediaPlayer实例,并将其设置为下一个实例。那么你将不会在时间浪费之间浪费时间。基本上你必须使用2个实例并来回交换。

+0

好吧,我会试试看 – 2014-12-15 06:23:07

相关问题