检查AVPlayer缓冲和播放状态

时间:2016-06-18 15:56:06

标签: ios objective-c swift avplayer

我想知道当我点击播放按钮(AVPlayer)并且当前(缓冲或加载)由于互联网连接速度缓慢或应付时,我可以检查player.play()是否没有播放音乐到其他原因,并检查缓冲后播放音乐的时间。 因为我需要在“播放”按钮上添加UIActivityIndicatorView。当点击播放按钮时,它会动画直到缓冲,当AVPlayer在缓冲后播放歌曲时停止动画,当AVPlayer再次开始再次缓冲它时,动画。 任何人都可以告诉我如何用这样简单的方式做到这一点

if (player is buffering){
    activityIndicator.tartAnimating()
}else if player is playing music{
    activityIndicator.stopAnimating()
}

并使用NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "check", userInfo: nil, repeats: true)

一次又一次地检查

还是其他任何简单的解决方案? 感谢。

1 个答案:

答案 0 :(得分:0)

这似乎与我在这里回答的问题类似:https://stackoverflow.com/a/42148482/5100819

当AVPlayer完成缓冲并开始实际可听回放时,我们用于更新UI的方法可能会完成这项工作。我们使用边界时间在播放开始时执行一个块 - 特别是在播放的1/3秒后 - 在听到音频的大致相同的时间更新UI:

let times = [NSValue(time:CMTimeMake(1,3))]
_ = self.player.addBoundaryTimeObserver(forTimes: times, queue: DispatchQueue.main, using: {
    [weak self] time in
    // Code to update the UI goes here, e.g.
    activityIndicator.stopAnimating()
})

我在公司博客上详细介绍了该方法(以及示例Xcode项目):http://www.artermobilize.com/blog/2017/02/09/detect-when-ios-avplayer-finishes-buffering-using-swift/

相关问题