пытаюсь воспроизвести видео с AVPlayer
вот так:
if let video = card.pageImageVideoController.controllers[0] as? VideoController{
video.player.play()
}
Я заметил, что видео не воспроизводится. Итак, я проверил глубже и обнаружил, что когда я вызываю функцию .play()
, текущий элемент AVPlayer
равен nil
. Я подумал, что решением для этого должно быть добавление наблюдателя KVO, чтобы игрок мог видеть, когда предмет готов к игре. Я использовал этот вопрос о переполнении стека. И я изменил предыдущий код следующим образом:
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
никогда не вызывается. Я не знаю почему.