2014-11-24 29 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

相關問題