8

我有一个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在不被临时网络连接问题完全阻止的情况下获得持续的游戏体验,那也将是一个很棒的帮助!

4

1 回答 1

0

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

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

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

于 2015-02-02T17:47:20.300 回答