当网络恢复活动状态(准备播放)时,如何从AVQueuePlayer/AVPlayerItem获得回调?

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播放体验,而不被暂时的网络连接问题完全停止,那将是一份很棒的帮助!

你遇到了同样的问题吗?你找到解决方案了吗? - adamsfamily
1个回答

0
你可以监控AVPlayerItemPlaybackStalledNotification来知道项目何时完成缓冲播放,但并非整个文件。
[[NSNotificationCenter defaultCenter] 
       addObserver:self
       selector:@selector(AVPlayerItemPlaybackStalledNotification:)                                                 
       name:AVPlayerItemPlaybackStalledNotification object:playerItem];

一旦有足够的缓冲区可以继续播放,您应该会收到一个通知发送到playbackLikelyToKeepUp,听起来您已经在监控了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接