«Недостатком» этого метода является то, что видео перезапускается каждый раз, когда вы переходите с фона на передний план. Это то, что было приемлемо в моем случае, но не может быть в вашем. Это потому, что AVLayer удаляется, когда вы переходите на задний план, и я помещаю новый AVLayer в videoView каждый раз, когда вы выходите на передний план. Удаление старого AVLayer было основополагающим для предотвращения ошибки моментального снимка рендеринга, другими словами, преодоления «зависания».

я есть видео, воспроизводимое в цикле на странице входа в мое приложение. Я следовал этому уроку Youtube, чтобы заставить его работатьЦикл видео в контроллере представления

Проблема в том, что когда приложение переходит в фоновый режим, если я не вернусь сразу же, когда я вернусь, видео будет заморожено.

СогласноApple Docs это должно произойти.

Я пытался использовать центр уведомленийNotification.Name.UIApplicationWillResignActive но это не сработало.

Как заставить видео продолжать проигрываться, когда приложение возвращается из фона?

var player: AVPlayer!
var playerLayer: AVPlayerLayer!

override func viewDidLoad() {
        super.viewDidLoad()

        configurePlayer()
}


@objc fileprivate func configurePlayer(){

        let url = Bundle.main.url(forResource: "myVideo", withExtension: ".mov")

        player = AVPlayer.init(url: url!)
        playerLayer = AVPlayerLayer(player: player!)
        playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        playerLayer.frame = view.layer.frame


        player.actionAtItemEnd = AVPlayerActionAtItemEnd.none

        player.play()

        view.layer.insertSublayer(playerLayer, at: 0)

        NotificationCenter.default.addObserver(self, selector: #selector(playerItemReachedEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)

        NotificationCenter.default.addObserver(self, selector: #selector(playerItemReachedEnd), name: Notification.Name.UIApplicationWillResignActive, object: player.currentItem)

    }

@objc fileprivate func playerItemReachedEnd(){
        player.seek(to: kCMTimeZero)
    }

Ответы на вопрос(1)

Ваш ответ на вопрос