2013-10-11 70 views
0

我使用AVPlayer實時音頻流。如果我暫停播放器並繼續播放,它會從剩下的地方播放(這很棒)。除非播放器暫停了很長時間,否則它會停止從網絡獲取新數據。在這種情況下,播放恢復時,首先播放任何緩衝數據,然後切換到實時數據。AVPlayer,長暫停,然後是恢復=故障

這真的很煩人。這聽起來像你剛剛從你離開的地方拿起,但是,然後,突然,你跳到前面。從舊的預暫停緩衝區數據到聽到新的現場音頻的切換很糟糕。

我想要做的是,當暫停是「長」時,釋放AVPlayer。這樣,如果用戶再次按下「播放」,他們只獲得新的實時音頻,而不是舊的緩衝數據。我知道這將意味着播放開始前的延遲,但我認爲這比我現在得到的音頻不連續性更好。

我沒有看到任何方式來檢測這種情況。我認爲我可以在目前的AVPlayerItem上觀察playbackBufferFull,但這似乎永遠不會改變。即使Instruments沒有顯示傳入網絡流量,playbackBufferFull仍然爲0.

目前我只使用了兩分鐘的超時時間,即如果在兩分鐘內不能恢復播放,請釋放AVPlayer。如果用戶稍後按下「玩」,則用新玩家重新開始。在實驗上,兩分鐘似乎並不可怕,但實際上並不好。有一個更好的方法嗎?

回答

0

根據我的經驗,播放緩衝區總是緩衝50秒的音頻。您可以測量緩衝區中的秒數,當它達到50(或更好的時候,當它停止增加時)時,您知道是時候向該玩家保釋了。

+0

我也見過50秒,但我討厭依靠一個無證的價值(我在兩分鐘內結束了,因爲我想讓這個價值有些鬆懈)。相反,也許,觀察當前項目的'loadedTimeRanges'值,如果它在1-2秒內沒有改變,假設緩衝已經停止? –