我的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属性为“就绪”,rate属性为1。据我所知,这没什么奇怪的。

最佳答案

我还遇到了从缓冲/网络问题恢复AVPlayer的问题,我也遇到了完全相同的场景,其中avPlayer.status.readyToPlayavPlayer.errornil,而avPlayer.rate1。谈论不可靠!我还检查了errorLog(),除了通用的互联网连接错误之外,该代码未提供其他任何相关信息。

我尝试通过设置一个计时器来检测该状态,该计时器在超时时会检查当前视频时间以及计时器启动的时间,如果时间相同(视频未进行播放),我们可以认为该视频确实是声称是的时候不玩。

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

关于ios - 缓冲后AVPlayer无法恢复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35385728/

10-16 22:04