Как заставить видео исчезнуть после окончания воспроизведения, чтобы пользователь мог продолжать использовать приложение? - PullRequest
0 голосов
/ 04 мая 2019

Я написал некоторый код для воспроизведения видео после запуска, но после воспроизведения видео оно не возвращается к раскадровке, оно просто застревает в этом цикле, где на секунду возвращается к основной плате, а затем становится черным (вероятно, конец видео)

В консоли отладки написано "Приложение 2019-05-05 01: 32: 33.766132 + 0800 [35989: 1028569] [AVKit] Целевое представление должно быть нашим собственным представлением при переходе контроллера полноэкранного просмотра!"

Я пробовал что-то вроде того, что ощущает конец видео, но это не помогает.

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        playVideo()
    }

    let playerController = AVPlayerViewController()

    private func playVideo() {
        guard let path = Bundle.main.path(forResource: "video", ofType:"m4v") else {
            debugPrint("video.m4v not found")
            return
        }
        let player = AVPlayer(url: URL(fileURLWithPath: path))
        playerController.player = player
        NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerController.player?.currentItem)
        playerController.showsPlaybackControls = false

        present(playerController, animated: true) {
            player.play()
        }
    }

    @objc func playerDidFinishPlaying(note: NSNotification) {
        playerController.dismiss(animated: true, completion: nil)
    }
}

Я ожидал, что видео закончится после завершения воспроизведения, чтобы пользователь мог видеть домашний экран приложения.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019
NotificationCenter.default.addObserver(self, selector: #selector(reachTheEndOfTheVideo), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem)

@objc func reachTheEndOfTheVideo(_ notification: Notification) {

}

Вы можете установить уведомление для avplayer, как только он завершит воспроизведение, и он перезвонит вышеописанным способом, вы можете прекратить проигрывание, удалить его и обновить пользовательский интерфейс, затем после или отклонить playercontroller

0 голосов
/ 04 мая 2019

Это проблема

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    playVideo()
}

playerVC закрывается, после этого появляется vc и вызывается viewDidAppear, так что он снова покажет игрока, рассмотрим один раз bool

var once = true
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if once {
      playVideo()
      once = false
    }
}

или показать его с DispatchAfter в viewDidLoad

...