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

bar*_*ley 8 iphone audio ios 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,当网络连接变坏/恢复,但似乎没有任何改变(会改变status,error等等).

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

我怎么知道网络何时重新启动并且AVQueuePlayer在这种情况下可以再次播放?

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

Ore*_*ren 0

您可以监视AVPlayerItemPlaybackStalledNotification以了解该项目何时完成播放其缓冲区,但不是整个文件:

[[NSNotificationCenter defaultCenter] 
       addObserver:self
       selector:@selector(AVPlayerItemPlaybackStalledNotification:)                                                 
       name:AVPlayerItemPlaybackStalledNotification object:playerItem];
Run Code Online (Sandbox Code Playgroud)

一旦有足够的缓冲区可以继续,您应该会收到一条通知,听起来playbackLikelyToKeepUp您已经在监视该通知。