2016-02-13 120 views
7

我的iOS应用使用AVPlayer从网络流媒体。我正在使用KVO来检测缓冲(playbackBufferEmpty)和被抓(playbackLikelyToKeepUp)等事件。但是,我注意到一个怪异的特定错误。虽然在大多数网络速度减慢时,KVO被击中,当它恢复时,按照预期击中playbackLikelyToKeepUp KVO,我注意到(有一些频率)AVPlayer将缓冲一段时间,恢复,playbackLikelyToKeepUp被击中,音频可能会播放1-3秒,然后音频停止播放,就好像它正在缓冲 - 没有再次点击playbackBufferEmpty KVO。而且它不能从中恢复。AVPlayer在缓冲后未恢复

TL; DR:playbackBufferEmpty(10-20秒) - >playbackLikelyToKeepUp - >播放1-3s - >停止播放,但不会播放KVO。

最糟糕的部分是发生这种情况时,AVPlayer不像从缓冲恢复时那样自动重新开始播放,并且应用程序保持沉默,直到AVPlayer被手动停止/再次启动。它最终会在我每次流时发生。这是AVPlayer的已知问题吗?这是我可以观看的第三次KVO赛事吗?或者有关如何调试的任何提示?谢谢!

编辑:附加信息: 的AVPlayererror属性为nil当这种情况发生时,status属性是准备上场,而rate属性是1 AKA闲来无事怪异事情,据我可以告诉。

回答

0

我也遇到问题与AVPlayer从缓存/网络问题中恢复,我也有相同的情形,其中avPlayer.status.readyToPlayavPlayer.errornil,并avPlayer.rate1。谈论不可靠!我也检查了errorLog(),除了通用的互联网连接错误之外,它没有提供任何相关的信息。

我试图通过一个定时器来检测这个状态,当它超时时,我检查当前视频时间和定时器启动的时间,如果相同(视频没有进展),我们可以假设视频确实没有在播放时宣称它是。

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