2013-10-30 109 views
7

我正在開發Android上的在線流媒體播放器。我發現mediaplayer不會停止緩衝!它讀取緩衝區的100%,並保持做「東西」,因爲流只能只能讀取一次,有沒有什麼可以緩衝...... 我看到Android媒體播放器無盡緩衝

public void onBufferingUpdate(MediaPlayer player, int percent) 

與百分率爲100無休止地稱它爲一個晚上消耗電池。我做錯了什麼,或者有什麼合理的解釋嗎?看起來緩衝不能被取消,停止它的唯一方法是重置mediaplayer本身。我需要一些方法來阻止這種無休止的'緩衝'!

這我怎麼INIT MEDIAPLAYER

mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mMediaPlayer.setDataSource(streamUrl); 
mMediaPlayer.setOnBufferingUpdateListener(this); 
mMediaPlayer.setOnInfoListener(this); 
mMediaPlayer.setOnPreparedListener(this); 
mMediaPlayer.setOnErrorListener(this); 
mMediaPlayer.prepareAsync(); 

日誌消息我看到:

10-30 08:45:21.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=93, ext2=0x0 
10-30 08:45:22.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0 
10-30 08:45:23.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0 
10-30 08:45:24.172: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0 
10-30 08:45:25.172: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0 
... 
+0

你有沒有想過什麼?我正在開發一個應用程序,通過MediaPlayer在服務中播放視頻,並且我意識到,在離開它「暫停」之後,即使手機屏蔽並且應該睡着了,它也會耗盡電量!停止和重置MediaPlayer似乎已經修復了它,但如果我可以讓它暫停,它仍然會更好,因爲如果我必須重新初始化播放器,恢復需要更長的時間。 – Flyview

+0

我發現它的行爲只有在我的華爲手機上(至少我測試過的其他設備工作正常)。最後我做了這樣的事情:如果玩家暫停了一段時間並緩衝,然後我重置了玩家。 – Arvydas

回答

0

試試這個。這將在按下時終止媒體播放器。

@Override 
public void onBackPressed() { 

    mp.stop(); 
    mp.reset(); 
      this.finish(); 

} 
+0

重點是我不想重置mediaplayer。期望的行爲:用戶播放曲目 - >按暫停 - >離開應用程序 - >幾個小時後回來 - >繼續播放。 – Arvydas

+0

mp.pause();可能夠了。 – Carnage

+0

嗯暫停()確實工作,我得到這個所需的行爲,除了mediaplayer保持'緩衝',並消耗電池,如果我暫停()。如果我重置mp,無盡的緩衝停止,但我不能繼續播放。如果緩衝在達到100%時停止,那將是完美的,但它不會(因爲一些神奇的原因......)。我正在尋找很好的方法來停止緩衝而不重置mediaplayer。 – Arvydas

2

首先,這不是一個好主意離開MediaPlayer的暫停而無法使用。它有時可能有效,但Android最終會收回這些資源。當您的應用程序未處於活動狀態時,不清理它們是一種糟糕的做法。這就是說,我相信它正在維護一個開放的套接字與服務器,可能發送緩衝通知時,只要它確保套接字仍然打開。 HTTP流是一個簡單的協議來完成你所要求的。但是你至少有一個選項可以使它工作。您可以插入一個代理,使您可以同時緩存數據流和回放。你必須聰明地處理當用戶在流完全緩存之前退出時會發生什麼,但它可以工作。此時,MediaPlayer會縮減爲本地文件播放,您可以在應用程序再次打開時停止並找到正確的點。它提供了更好地管理資源和網絡通信的手段。