当网络变为活动状态(并准备好播放)时,如何从AVQueuePlayer / AVPlayerItem获取回调?

时间:2012-11-21 19:30:25

标签: iphone ios audio avplayer avqueueplayer

我有一个基于AVQueuePlayer的音频流播放器需要在后台运行。玩家需要继续运行,直到完成所有列表的播放。当然,如果网络连接变坏,它将不得不暂停,但是当网络连接恢复时它应该自动恢复。

为此,我正在监控

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

使用KVO。例如,如果网络连接从临时错误中恢复,我希望currentAVPlayerItem.status变为AVPlayerStatusItemReadyToPlay,这将报告给我的播放器,我可以在此时发出[AVQueuePlayer play]

这种机制(逻辑)似乎适用于某些情况,但在离线环境中经常AVPlayerItem.status成为AVPlayerItemStatusFailed,项AVQueuePlayer似乎会自动跳过。结果,队列将变为空,并且不能从AVPlayerItem接收回调。

我希望AVPlayer中的某些属性在网络连接变坏/恢复时会发生变化,但似乎没有任何变化(statuserror等)。

显然我可以监控Reachability,但是当应用在后台运行时,这不起作用。

如何知道网络何时恢复,AVQueuePlayer可以在这种情况下再次播放?

我可能只是这个地区的新手。如果有人能够让我大致了解他/她如何在不被临时网络连接问题完全阻止的情况下实现持续的AVQueuePlayer游戏体验,那么这也将是一个非常棒的帮助!

1 个答案:

答案 0 :(得分:0)

您可以监控AVPlayerItemPlaybackStalledNotification以了解项目何时播放缓冲区而不是整个文件:

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

一旦有足够的缓冲区继续,您应该收到发送到playbackLikelyToKeepUp的通知,这听起来像您已经在监控。