【问题标题】:How to get a callback from AVQueuePlayer/AVPlayerItem when network become active (and is ready to play)?当网络激活(并准备好播放)时,如何从 AVQueuePlayer/AVPlayerItem 获取回调?
【发布时间】:2012-11-10 03:25:42
【问题描述】:

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

为此,我正在监控

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

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

这种机制(逻辑)在某些情况下似乎有效,但在离线环境中相当频繁,AVPlayerItem.status 变为AVPlayerItemStatusFailedAVQueuePlayer 似乎会自动跳过该项目。结果,队列最终将是空的,并且无法接收到来自AVPlayerItem 的回调。

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

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

我怎么知道网络何时恢复正常,AVQueuePlayer 在这种情况下可以再次播放?

我可能只是这个领域的新手。如果有人能大致了解他/她如何在不被临时网络连接问题完全中断的情况下获得持续的AVQueuePlayer 游戏体验,那也将是一个很棒的帮助!

【问题讨论】:

  • 有同样的问题。你找到解决办法了吗?

标签: iphone ios audio avplayer avqueueplayer


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多