2012-11-21 48 views
8

我有一個基於AVQueuePlayer的音頻流播放器,需要在後臺運行。播放器需要繼續運行,直到完成播放所有列表。當然,如果網絡連接變壞,它將不得不暫停,但當網絡連接恢復時它應該會自動恢復。如何在網絡激活(並準備播放)時從AVQueuePlayer/AVPlayerItem獲取回叫?

對於這一點,我使用KV監控

  • AVPlayerItem.status
  • AVPlayerItem.playbackLikelyToKeepUp
  • AVPlayer.currentItem
  • AVPlayer.status
  • AVPlayer.error

O.例如,如果網絡連接從臨時錯誤中恢復,我預計currentAVPlayerItem.status將變爲AVPlayerStatusItemReadyToPlay,這將報告給我的播放器,並且我可以在此時發出[AVQueuePlayer play]

此機制(邏輯)似乎在某些情況下工作,但在離線環境中相當頻繁,AVPlayerItem.status變爲AVPlayerItemStatusFailed,其中項AVQueuePlayer似乎自動跳過。結果,隊列將變爲空,並且不能從AVPlayerItem收到回叫。

我希望AVPlayer的一些屬性會改變,當網絡連接壞/恢復,但似乎沒有改變(status,error等)。

顯然我可以監視Reachability,但是當應用程序在後臺運行時,這不起作用。

如何知道網絡恢復時間,AVQueuePlayer可以在這種情況下再次播放?

我可能只是這方面的新手。如果有人能夠給我一個大概的想法,他/她如何在不被臨時網絡連接問題完全阻止的情況下實現連續的AVQueuePlayer演奏體驗,那也是一個很棒的幫助!

+0

具有相同的問題。你有沒有找到解決辦法? – adamsfamily

回答

0

可以監視AVPlayerItemPlaybackStalledNotification知道什麼時候該項目完成播放的緩衝區,但不是整個文件:

[[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(AVPlayerItemPlaybackStalledNotification:)             
     name:AVPlayerItemPlaybackStalledNotification object:playerItem]; 

一旦有足夠的緩衝,繼續,你應該得到送到playbackLikelyToKeepUp通知它聽起來像你已經在監控。