我想知道当我点击播放按钮(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)
还是其他任何简单的解决方案? 感谢。
答案 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/