我必須在這裏丟失一些明顯的東西,但似乎找不到任何可以讓我確定何時MediaPlayer正在緩衝音頻的東西。我正在流式傳輸互聯網音頻,我想顯示一個緩衝指示符,但我試過的任何東西都不允許我知道MediaPlayer何時中斷要緩衝的音頻,所以我無法正確顯示緩衝指示符。任何線索?Android - 如何判斷MediaPlayer何時緩衝
回答
@丹尼爾,根據你對@ JRL的回答的評論,你可能會通過旋轉線程並等待超時來獲得這個工作。
像DetectBufferTimeout.java(未經測試)會很好。
但是,我確實認爲旋轉這個單獨的線程是有點破解的。也許OnBufferingUpdateListener
可以保證它調用onBufferingUpdate()
的頻率,不管緩衝進度是否發生了變化,所以我們可以檢測到我們是否一遍又一遍地獲得相同的值。
謝謝,馬特。我遇到的問題是沒有通知MediaPlayer何時實際暫停要緩衝的軌道。但是你的建議還是不錯的。我認爲應用同樣的技術......而不是檢查緩衝進度,我應該檢查播放進度。如果它沒有更新並且沒有從我的末端暫停或停止,則MediaPlayer實例必須暫停它以便緩衝更多音頻數據。謝謝! – Daniel 2011-04-13 04:46:59
啊,是的,我沒有意識到你想知道賽道何時暫停_specifically_,因爲它已經通過它的緩衝區。 – 2011-04-15 03:03:33
註冊一個OnBufferingUpdate監聽器。
謝謝。我已經這樣做了,但這似乎只是告訴我緩衝的音軌的百分比。我試圖與賽道的當前比賽時間進行比較。我想也許我可以看到當前緩衝區百分比是否等於當前播放時間百分比。但是這不起作用,因爲MediaPlayer似乎有一些緩衝代碼被烘焙,以便在緩衝區完全運行之前進行緩衝。所以我仍然無法告訴(或控制)曲目何時緩衝。希望我錯過了什麼? – Daniel 2010-12-16 21:53:11
好吧,我現在覺得有點平反。我檢查了潘多拉的應用程序,它不顯示緩衝指標。當音樂中斷緩衝時,它就像沒有任何事情發生一樣,UI看起來還在播放。所以我得出的結論是,如果您使用的是MediaPlayer,則無法確定曲目是否暫時暫停以進行緩衝。
但是,我確實注意到有幾個MediaPlayer常量可以使用: MEDIA_INFO_BUFFERING_START和MEDIA_INFO_BUFFERING_END。但是他們只能在9級以上的API中使用,而且文檔對此沒有提及。我假設他們可以與OnInfoListener一起使用。
我很失望,但至少我現在可以停止旋轉我的輪子並轉向其他東西。
像下面(API級≥9):
mp.setOnInfoListener(new OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
loadingDialog.setVisibility(View.VISIBLE);
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
loadingDialog.setVisibility(View.GONE);
break;
}
return false;
}
});
注意:有一個已知的錯誤在機器人。在播放HLS流時,它從不調用OnInfoListener或OnBuffering。檢查此鏈接OnInfoListener bug
您可以使用一個線程來檢查MediaPlayer的當前位置。如果位置不變,您可以得出結論媒體處於緩衝狀態。這裏是我寫的完整教程:http://www.ottodroid.net/?p=260
- 1. Android MediaPlayer流緩衝
- 2. Android - MediaPlayer中的緩衝區
- 3. 使用MediaPlayer Android Gingerbread緩衝
- 4. Android MediaPlayer - 位置在緩衝時跳過
- 5. 如何判斷dom重複何時完成衝壓元素
- 6. 如何判斷Facebook刪除Javascript緩存
- 7. Android Webview - 如何判斷頁面是否從緩存中加載?
- 8. 如何判斷何時顯示活動
- 9. 如何判斷animateLayoutChanges何時完成?
- 10. 如何判斷Windows何時無效
- 11. 如何判斷視圖何時激活
- 12. 如何判斷DevExpress FindPanel何時關閉?
- 13. 如何判斷進程掛起是否由於填充緩衝區(TCP,stdin,stdout)?
- 14. Android:如何判斷服務何時完成
- 15. 如何判斷Android設備何時具有Geocoder後端服務?
- 16. Android API 23 vs Android API 25 MediaPlayer緩衝速度
- 17. 檢測緩衝錯誤(或超時)Android MediaPlayer - 使用計時器超時?
- 18. 如何判斷套接字何時斷開
- 19. Leetcode OJ如何判斷?
- 20. 如何判斷jQuery的TMPL
- 21. 如何判斷AsyncTaskLoader運行
- 22. 如何判斷方法「performSegueWithIdentifier:sender:」?
- 23. 如何判斷空對象?
- 24. Json或Html?如何判斷?
- 25. 如何判斷http代理
- 26. 如何判斷使用wx.aui
- 27. 如何判斷Image.FromStream完成
- 28. 定時器中斷MediaPlayer
- 29. 在MediaPlayer上更改緩衝區大小
- 30. 如何判斷相冊何時添加到MediaStore
對此有何更新?我正在嘗試製作流媒體視頻播放器。所有評論歡迎。 – Sen 2011-05-12 09:17:07