AVPlayer 缓冲后未恢复

Posted

技术标签:

【中文标题】AVPlayer 缓冲后未恢复【英文标题】:AVPlayer Not Recovering After Buffering 【发布时间】:2016-02-13 21:50:38 【问题描述】:

我的 ios 应用程序使用 AVPlayer 从网络流式传输媒体。我正在使用 KVO 来检测像缓冲 (playbackBufferEmpty) 和被赶上 (playbackLikelyToKeepUp) 这样的事件。但是,我注意到一个怪异的错误。尽管在大多数网络减速期间,playbackBufferEmpty KVO 被击中,当它恢复时,playbackLikelyToKeepUp KVO 被击中,正如预期的那样,我注意到(以某种频率)AVPlayer 将缓冲一段时间,恢复,playbackLikelyToKeepUp 被击中,音频播放可能 1-3 秒,然后音频再次停止播放,好像它正在缓冲 - 没有再次击中 playbackBufferEmpty KVO。而且它不会从中恢复。

TL;DR: playbackBufferEmpty(10-20 秒)-> playbackLikelyToKeepUp -> 播放 1-3 秒 -> 停止播放但没有命中 KVO。

最糟糕的是,当这种情况发生时,AVPlayer 不会像从缓冲中恢复时那样再次自动开始播放,并且应用程序会保持沉默,直到再次手动停止/启动 AVPlayer。最终,每次我流式传输时,它或多或少都会发生。这是AVPlayer 的已知问题吗?这是我可以关注的第三个 KVO 事件吗?或者关于如何调试的任何提示?谢谢!

编辑:附加信息: 发生这种情况时,AVPlayererror 属性为 nilstatus 属性为 Ready to Play,rate 属性为 1。AKA 据我所知,没有其他奇怪的事情发生.

【问题讨论】:

【参考方案1】:

我也遇到了AVPlayer 从缓冲/网络问题中恢复的问题,我也遇到了完全相同的情况,avPlayer.status.readyToPlayavPlayer.errornilavPlayer.rate 是 @ 987654327@。谈不靠谱!我还检查了errorLog(),除了一般的互联网连接错误之外,它没有提供任何相关信息。

我尝试通过设置一个计时器来检测此状态,当它超时时,我会检查当前视频时间和计时器启动的时间,如果相同(视频没有播放),我们可以假设当它声称它是时,视频真的没有播放。

然后我将此视为不可恢复的状态并通过创建新的AVPlayerItem 重新加载整个流。

【讨论】:

以上是关于AVPlayer 缓冲后未恢复的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer,长时间停顿后恢复 = 故障

在 AVPlayer 缓冲时设置 UIActivityIndi​​catorView?在目标 c

AVPlayer 播放、暂停和缓冲问题

设置 AVPlayer AVPlayerItem 缓冲区大小?

AVPlayer 项目缓冲区为空

AVPlayer的使用,带缓冲