我有一个基于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
游戏体验,那么这也将是一个非常棒的帮助!
答案 0 :(得分:0)
您可以监控AVPlayerItemPlaybackStalledNotification
以了解项目何时播放缓冲区而不是整个文件:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(AVPlayerItemPlaybackStalledNotification:)
name:AVPlayerItemPlaybackStalledNotification object:playerItem];
一旦有足够的缓冲区继续,您应该收到发送到playbackLikelyToKeepUp
的通知,这听起来像您已经在监控。