在AVPlayer中检测视频停顿

时间:2018-11-23 14:40:08

标签: ios swift avfoundation avplayer avplayeritem

我正在使用我的应用中的AVPlayer API来播放HLS流。我希望能够检测到由于网络带宽不足或连接质量低而导致视频播放停止的情况。

是否有可靠的方法来检测视频播放是否在屏幕上正常播放?

在测试过程中,我看到了以下情况,尽管视频播放实际上已冻结在屏幕上,但以下检查均报告了OK状态:

AVPlayer.status = .readyToPlay
AVPlayer.timeControlStatus = .playing
AVPlayerItem.status = .readyToPlay
AVPlayerItem.isPlaybackBufferEmpty = false
AVPlayerItem.isPlaybackLikelyToKeepUp  = true

+和addBoundaryTimeObserver回调都被触发。

其中一些最终变成负面的,但只是在延迟之后。

是否有100%可靠的方法来检测视频是否确实在设备上正常播放?

1 个答案:

答案 0 :(得分:1)

为确保媒体正常播放,请检查AVPlayerItem的{​​{1}}

您还可以使用AVPlayerItem的通知来检测出错误:

  • rate
  • AVPlayerItemPlaybackStalled
  • AVPlayerItemFailedToPlayToEndTime

供您参考,AVPlayerItemDidPlayToEndTime可以在缓冲区为空并且网络不可用时触发。

您在这里有一个示例:PlaybackObservingService