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 事件吗?或者关于如何调试的任何提示?谢谢!
编辑:附加信息:
发生这种情况时,AVPlayer
的 error
属性为 nil
,status
属性为 Ready to Play,rate
属性为 1。AKA 据我所知,没有其他奇怪的事情发生.
【问题讨论】:
【参考方案1】:我也遇到了AVPlayer
从缓冲/网络问题中恢复的问题,我也遇到了完全相同的情况,avPlayer.status
是 .readyToPlay
,avPlayer.error
是 nil
,avPlayer.rate
是 @ 987654327@。谈不靠谱!我还检查了errorLog()
,除了一般的互联网连接错误之外,它没有提供任何相关信息。
我尝试通过设置一个计时器来检测此状态,当它超时时,我会检查当前视频时间和计时器启动的时间,如果相同(视频没有播放),我们可以假设当它声称它是时,视频真的没有播放。
然后我将此视为不可恢复的状态并通过创建新的AVPlayerItem
重新加载整个流。
【讨论】:
以上是关于AVPlayer 缓冲后未恢复的主要内容,如果未能解决你的问题,请参考以下文章
在 AVPlayer 缓冲时设置 UIActivityIndicatorView?在目标 c