наблюдайте, когда AVplayer готов к воспроизведению - быстро - программно

пытаюсь воспроизвести видео с 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 никогда не вызывается. Я не знаю почему.


person StackGU    schedule 30.12.2020    source источник


Ответы (1)


Если ваша идея состоит в том, чтобы проверить, готов ли предмет к игре или нет. Тогда лучше поставь наблюдателя за статусом. И проверьте ошибку в функции наблюдателя. Как указано в следующем документе: https://developer.apple.com/documentation/avfoundation/avplayeritem

person Manish Punia    schedule 30.12.2020