我的iOS应用程序使用AVPlayer从Web流式传输媒体.我正在使用KVO来检测缓冲(playbackBufferEmpty)和被捕获等事件(playbackLikelyToKeepUp).但是,我注意到一个奇怪的特定错误.虽然在大多数网络减速期间,kickBufferEmpty KVO被击中,当它恢复时,playbackLikelyToKeepUp KVO按预期命中,我注意到(有一些频率)AVPlayer将缓冲一段时间,恢复,回放LikeLikelyToKeepUp被击中,音频可能播放1-3秒,然后音频再次停止播放,就好像它正在缓冲一样,而不会再次点击playbackBufferEmpty KVO.它并没有从中恢复过来.
TL; DR:playbackBufferEmpty(10-20秒) – > playbackLikelyToKeepUp – >播放1-3s – >停止比赛,但没有击中KVO.
最糟糕的是,当发生这种情况时,AVPlayer不会像从缓冲中恢复时那样再次自动开始播放,并且应用程序保持静音,直到AVPlayer再次手动停止/启动.每次我流式传输时,它或多或少都会发生.这是AVPlayer的已知问题吗?这是我能看到的第三次KVO活动吗?或者有关如何调试此问题的任何提示?谢谢!
编辑:其他信息:
当发生这种情况时,AVPlayer的错误属性为nil,状态属性为Ready to Play,并且rate属性为1. AKA就我所知,没有其他奇怪的事情发生.
解决方法
我也遇到过从缓冲/网络问题中恢复AVPlayer的问题,而且我也有完全相同的场景,其中avPlayer.status是.readyToPlay,avPlayer.error是nil,而avPlayer.rate是1.谈论不可靠!我还检查了errorLog(),并没有提供除通用互联网连接错误以外的任何相关内容.
我尝试通过一个计时器检测这种状态,当它超时时,我检查当前的视频时间和计时器开始的时间,如果它是相同的(视频没有进展),我们可以假设视频真的不是当它声称它正在播放时.
然后我将其视为不可恢复的状态,并通过创建新的AVPlayerItem重新加载整个流.