Продолжительность AVPlayer изменяется при передаче на другой контроллер - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть контроллер с AVPlayer в ячейке представления коллекции.Когда ориентация меняется на Пейзаж, игрок должен получить FullScreen.

Для этого я представляю AVPlayerController с тем же экземпляром проигрывателя в ячейке просмотра коллекции.Видео работает нормально, когда оно вращается в режиме воспроизведения.Однако, когда видео приостановлено, и я меняю ориентацию на Пейзаж, кадр в текущий момент изменяется, т.е. видео движется вперед.

Я проверил, даже когда ориентация сохраняется, когда проигрыватель пропущен,продолжительность пропускается несколько секунд.

Вот код:

В ViewController, где присутствует ячейка.

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    guard let videoCell = contentGalleryController.curatorVideoCell else {return}
    if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {
        let player = videoCell.getVideoPlayer
        playerViewController = (storyboard!.instantiateViewController(withIdentifier: "FullScreenPlayerController") as! FullScreenPlayerController)
        playerViewController?.player = player
        playerViewController?.didPlayedToEnd = videoCell.isVideoFinishedPlaying ?? false
        playerViewController?.isMuteTurnedOn = player.isMuted
        let wasVideoPlaying: Bool = player.isPlaying
        present(playerViewController!, animated: false){
            if wasVideoPlaying {
                player.play()
            }
        }
    }
    else {
        videoCell._setMuteIcon()
        videoCell._setPlayPauseIcon()
        playerViewController?.dismiss(animated: false, completion: nil)
    }
}

В FullscreenPlayer View Controller

override func viewDidLoad() {
        super.viewDidLoad()
        setPlayPauseIcon()
        setMuteIcon()

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(customControlViewTapped))
        customView.addGestureRecognizer(tapGesture)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        if !view.subviews.contains(customView) {
            customView.frame = view.bounds
            view.addSubview(customView)
        }
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        NotificationCenter.default.addObserver(self, selector: #selector(playerDidPlayToEnd), name: Notification.Name.AVPlayerItemDidPlayToEndTime, object: player?.currentItem)
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        NotificationCenter.default.removeObserver(self)
    }

Я ничего не делаю в контроллере.

Скриншоты: Портрет Video Paused In Portrait

ЛАНДШАФТ When rotated to landscape

При изменении ориентации видео перемещается вперед даже в состоянии паузы.

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 28 ноября 2018

Вы должны попытаться захватить currentTime, а затем использовать метод seek(to time: CMTime) на плеере, чтобы начать в это время.Я не совсем уверен, почему это происходит с вами, но я думаю, что это даст вам результат, который вы ищете.

...