微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

观察 AVplayer 何时准备好播放 - 迅速 - 以编程方式

如何解决观察 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 举报,一经查实,本站将立刻删除。