如何解决观察 AVplayer 何时准备好播放 - 迅速 - 以编程方式
尝试像这样用 AVPlayer
播放视频:
if let video = card.pageImageVideoController.controllers[0] as? VideoController{
video.player.play()
}
我注意到视频无法播放。所以我更深入地检查,发现当我调用函数 .play()
时,AVPlayer
当前项是 nil
。
我认为对此的解决方案应该是为玩家添加 KVO 观察器以查看项目何时准备好播放。我使用了这个堆栈溢出 question。
我把之前的代码修改成这样:
var playbackLikelyToKeepUpContext = 0
if let video = card.pageImageVideoController.controllers[0] as? VideoController{
video.player.addobserver(self,forKeyPath: "currentItem.playbackLikelyToKeepUp",options: .new,context: &playbackLikelyToKeepUpContext)
}
override func observeValue(forKeyPath keyPath: String?,of object: Any?,change: [NSkeyvalueChangeKey : Any]?,context: UnsafeMutableRawPointer?) {
guard let videoController = topCard!.pageImageVideoController.controllers[0] as? VideoController else { return }
if context == &playbackLikelyToKeepUpContext {
if videoController.player.currentItem!.isPlaybackLikelyToKeepUp {
// loadingIndicatorView.stopAnimating() or something else
print("ready")
} else {
// loadingIndicatorView.startAnimating() or something else
print("not ready")
}
}
}
但函数 observeValue
从未被调用。我不知道为什么。
解决方法
如果您的想法是检查项目是否准备好播放。然后最好将观察者置于状态。并检查观察者函数中的错误。如以下文档中所述: https://developer.apple.com/documentation/avfoundation/avplayeritem
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。