У меня 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