2012-03-26 39 views
8

我現場直播音頻,希望具有暫停媒體播放器功能,然後從當前活動位置開始。默認的Pause()和Start()從它停止的地方開始。關於如何保持當前位置更新以便Start()是即時的任何想法?更新MediaPlayer暫停時的開始位置

+0

剛剛編輯我的答案,希望它有幫助 – bughi 2012-03-26 18:58:38

回答

6

你試過調用seekTo()嗎?

你可以通過每半秒調用一次seekTo()來保持它的永久更新,但是我不知道我對此有何感受。

編輯:如果調用seekTo()每500毫秒,以保持它的前進,你將與currentPosition +自上次調用(500毫秒在這種情況下)ellapsed調用它。但是我不知道這是否是最好的方法。另一種方法是創建一個OnSeekCompleteListener,它執行一個新的seekTo(currentPosition + timeEllapsed)。在這種情況下,你需要計算timeEllapsed像這樣:currentSystemTime - systemTimeOnLastCall

http://developer.android.com/reference/android/media/MediaPlayer.html

的播放位置可以以seekTo(INT)的調用進行調整。

雖然異步seekTo(int)調用返回正確的方式,但實際的搜索操作可能需要一段時間才能完成,特別是對於正在流式傳輸的音頻/視頻。當實際的查找操作完成時,如果已通過setOnSeekCompleteListener(OnSeekCompleteListener)事先註冊了OnSeekCompleteListener,則內部播放器引擎會調用用戶提供的 OnSeekComplete.onSeekComplete()。

請注意seekTo(int)也可以在其他狀態下調用,例如Prepared,Paused和PlaybackCompleted狀態。

此外,可以通過調用getCurrentPosition()來檢索實際當前播放位置,這對於需要跟蹤播放進度的音樂播放器等應用程序非常有用。

+0

看起來getCurrentPosition()返回暫停的位置,我將如何獲得流結束位置(實時內容)seekTo()該位置。 – Brianjs 2012-03-26 01:38:56

+1

+1「雖然異步seekTo(int)調用返回正確方式,但實際的搜索操作可能需要一段時間才能完成」。這解決了我的問題。 – Tiago 2014-08-28 23:56:13

+0

調用seekTo(0);在stream.start()之後;爲我工作 – aytek 2016-05-12 13:55:14

1

在您暫停的MediaPlayer,並呼籲MediaPlayer.seekTo當你重新啓動它的位置設置回的MediaPlayer你叫MediaPlayer.getCurrentPosition

+0

當按下暫停按鈕時,是否只是將我返回到流中的位置?至少當我測試它時,它就是這樣。當我再次按下「開始」按鈕時,我想直接轉到實時內容的結尾處。 – Brianjs 2012-03-26 01:33:07

+2

哦,對不起,我沒有注意到'live'。由於您正在流式傳輸現場音頻,因此您可以在用戶暫停時停止MediaPlayer,當用戶重新啓動時重置MediaPlayer並「啓動」MediaPlayer。您將始終處於直播的結尾。 – neevek 2012-03-26 03:48:18

相關問題