AVPlayerItemDidPlayToEndTime cla sh с applicationDidBecomeActive - PullRequest
0 голосов
/ 07 мая 2020

У меня AVPlayer встроено в UIViewController. Я добавил уведомление AVPlayerItemDidPlayToEndTime в UIViewController, чтобы я мог перезапустить свой AVPlayer после завершения воспроизведения currentItem


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

    @objc private func playerDidFinishPlaying(_ notification: Notification) {
        guard let url = URL(string: self.video.alt_content) else { return }

        let item = self.getAssetToPlay(url: url)
        item.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero)
        self.player.replaceCurrentItem(with: item)
        player.play()
    }

    private func getAssetToPlay(url: URL) -> AVPlayerItem {
        let asset = AVURLAsset(url: url)
        let item = AVPlayerItem(asset: asset)
        return item
    }

Но это уведомление также вызывается из AppDelegate's applicationDidBecomeActive, например, когда мое приложение исходит из фона. И поэтому вместо того, чтобы воспроизводить AVPlayer с текущего времени, код перезапускает проигрыватель в playerDidFinishPlaying.

Мне нужен способ, чтобы, когда приложение выходит из фона, оно начинает играть с того места, где оно было оставлено. И после полного завершения currentItem он перезапускает AVPlayerItem

1 Ответ

0 голосов
/ 08 мая 2020

Так что проблема была очень глупой, если честно. Это было связано с тем, что я добавил Observer перед инициализацией AVPlayer. Как только я исправил код, он больше не конфликтует с applicationDidBecomeActive

...