我的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
属性为“就绪”,rate
属性为1。据我所知,这没什么奇怪的。
最佳答案
我还遇到了从缓冲/网络问题恢复AVPlayer
的问题,我也遇到了完全相同的场景,其中avPlayer.status
是.readyToPlay
,avPlayer.error
是nil
,而avPlayer.rate
是1
。谈论不可靠!我还检查了errorLog()
,除了通用的互联网连接错误之外,该代码未提供其他任何相关信息。
我尝试通过设置一个计时器来检测该状态,该计时器在超时时会检查当前视频时间以及计时器启动的时间,如果时间相同(视频未进行播放),我们可以认为该视频确实是声称是的时候不玩。
然后,我将其视为不可恢复的状态,并通过创建新的AVPlayerItem
重新加载整个流。
关于ios - 缓冲后AVPlayer无法恢复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35385728/