2015-12-21 97 views
-1

我正在使用Android Media Player播放和播放我的在線播放列表。Android MediaPlayer暫停流媒體

mMediaPlayer1.setDataSource(streamUrl); 
mMediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mMediaPlayer1.prepareAsync(); 
mMediaPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){ 
@Override 
    public void onPrepared(MediaPlayer mp) { 
      // Play this song and prepare next song 
      mp.start(); 
      mMediaPlayer2.setDataSource(streamUrl2); 
      mMediaPlayer2.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mMediaPlayer2.prepareAsync(); 
    } 
}; 

對於流暢的體驗,我在完成當前播放的歌曲之前緩衝下一首歌曲。爲此,我會在準備好當前歌曲並開始播放後開始播放下一首歌曲。

所以結果是,它同時播放兩首歌曲。如果互聯網速度很快,那麼它運行良好,但如果速度很慢,那麼當前播放的歌曲也會停滯(因爲它會同時播放兩首歌曲)。 我正在尋找一種方法來暫停背景歌曲的流式處理,在準備好之後,或者是他們準備下一首歌曲的任何方法。請幫忙。

+0

使用TimerTask來管理你當前的播放歌曲並在後臺下載另一個歌曲,並根據歌曲播放的持續時間管理Timer線程 –

+0

嘗試使用Producer-Consumer樣式,mediaPlayer應該緩衝音頻流,所以你可以嘗試和定義2個偵聽器,當緩衝區被填充時,以及當更新緩衝區時,實時流1應該自由緩衝,並且當緩衝區被填充時,通知流2開始工作,當流1回來消耗緩衝器,暫停流2緩衝,並恢復流1緩衝,等等。 – shaydel

+0

@shaydel是他們在媒體播放器中暫停/啓動緩衝的任何方式。 – Neo

回答

0

在您的mMediaPlayer1上執行MediaPlayer.OnBufferingUpdateListenerdoc)。在緩衝90%-100%(或更少,取決於你想要開始緩衝你的下一首歌曲的速度)之後,你可以開始在你的mMediaPlayer2中準備第二首歌曲。這樣,您可以避免不良表現,並在第一首歌曲播放時開始播放下一首歌曲,但歌曲1已被緩衝。我認爲暫停這個流是沒有辦法的,你可以停止我所知道的。

+0

據我所知,mp.pause()僅用於暫停當前播放的歌曲,它不會暫停流式傳輸。 – Neo

+0

這是個好主意,但根據我的要求,我只想在第一個準備好之後準備另一首歌。因爲在大多數情況下,如果你不喜歡這首歌曲,那麼你將在10秒內切換到下一首歌曲(可能性超過80%)。我想處理這種情況。因此,如果有任何方法,我可以暫停緩衝,這對用戶體驗來說是最好的,而且我正在嘗試做什麼。 – Neo