Проверьте состояние воспроизведения AVPlayer и добавьте представление оверлея в AVPlayerViewController.

я хочу проверить, воспроизводит ли AVPlayerViewController видео или его все еще буферизует. Я также хочу добавить наложение в этот AVPlayerViewController с помощью кнопки «Далее» и «Предыдущий». со следующим кодом мое видео буферизуется, но показывает нормальное воспроизведение. Я хочу отслеживать, воспроизводится ли оно, находится ли оно в паузе или на стадии буферизации.

    let playerAV = AVPlayerViewController()
    var player = AVPlayer()
    let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.d e/big_buck_bunny.mp4")
     player = AVPlayer(URL:videoURL!)
    playerAV.player = player
    playerAV.view.frame = self.movieView.frame
    self.addChildViewController(playerAV)

    self.movieView.addSubview(playerAV.view)
    playerAV.didMoveToParentViewController(self)

    playerAV.contentOverlayView?.addSubview(viewNext)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.notificationObserver(_:)), name:AVPlayerItemDidPlayToEndTimeNotification , object: player.currentItem)

    player.addObserver(self, forKeyPath: "rate", options: NSKeyValueObservingOptions.New, context: nil)
    _ = UIDevice.beginGeneratingDeviceOrientationNotifications
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.deviceOrientationDidChange(_:)) , name:
        UIDeviceOrientationDidChangeNotification, object: nil)


override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    if keyPath == "rate" {
        if let rate = change?[NSKeyValueChangeNewKey] as? Float {
            if rate == 0.0 {
                print("playback stopped")
            }
            if rate == 1.0 {
                print("normal playback")
            }
            if rate == -1.0 {
                print("reverse playback")
            }
        }
    }
    print("you are here")
}

person Prashant Ghimire    schedule 27.07.2016    source источник


Ответы (1)


Для проверки состояния плеера можно добавить периодический наблюдатель времени:

player.addPeriodicTimeObserverForInterval(CMTime(value: 1, timescale: 3), queue: dispatch_get_main_queue()) { [weak self] time in
     self?.handlePlayerStatus(time)
}

Внутри handlePlayerStatus вы проверяете состояние:

func handlePlayerStatus(time: CMTime) {
    if player.status == .ReadyToPlay {
         // buffering is finished, the player is ready to play
    }
}
person fiks    schedule 27.07.2016
comment
он все еще не работает ... он все еще буферизуется, но в соответствии с вашим статусом дескриптора он говорит, что буферизация закончилась - person Prashant Ghimire; 27.07.2016
comment
он все еще находится в режиме буферизации, но // буферизация завершена, вызывается плеер готов к игре. - person Prashant Ghimire; 27.07.2016
comment
Как узнать, что он все еще находится в режиме буферизации? - person fiks; 27.07.2016
comment
я вижу видео ... оно зависло ... это означает, что оно все еще буферизуется. - person Prashant Ghimire; 27.07.2016