检查 AVPlayer 缓冲和播放状态

Check AVPlayer buffering and playing state

我想知道当我点击播放按钮 (player.play()) 时如何检查 AVPlayer 是否正在播放音乐,并且由于互联网连接速度慢而当前正在(缓冲或加载)或其他原因,也检查缓冲后播放音乐的时间。 因为我需要在播放按钮上添加 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)

反复检查

或任何其他简单的解决方案? 谢谢。

这似乎与我在这里回答的问题相似:

我们用来在 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/