ios - 检查AVPlayer缓冲和播放状态

标签 ios objective-c swift avplayer

我想知道当我点击播放按钮(player.play())时如何检查 AVPlayer 没有播放音乐并且当前(正在缓冲)或加载)由于互联网连接速度慢或其他原因,并检查缓冲后何时播放音乐。 因为我需要在“播放”按钮上添加 UIActivityIndi​​catorView 。当点击“播放”按钮时,它会产生动画直到缓冲,当 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) 一次又一次地检查

或者还有其他简单的解决方案吗? 谢谢。

最佳答案

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

当 AVPlayer 完成缓冲并开始实际的声音播放时,我们用来更新 UI 的方法可能会完成这项工作。我们使用边界时间在播放开始时(特别是播放 1/3 秒后)执行一个 block ,以便在听到音频的同时更新 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/

关于ios - 检查AVPlayer缓冲和播放状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37898901/

相关文章:

ios - 将 SQLite 导入 CoreData

ios - Swift 泛型变量

ios - 使用对象属性填充 TableView ?

ios - 类型 'AuthDataResult' 的值没有成员 'providerID' Firebase 5.0

ios - 如何检查外观属性是否已设置?

c - mac屏保启动事件

json - 解码每个键具有多种可能类型的 Json

ios - 在核心数据中添加相关实体会删除所有其他关系吗?

ios - Cloud Code on Parse 中计算票数的函数

ios - 如何执行 UIAlertAction 的处理程序?