Я работаю над реализацией видеопроигрывателя в Swift, который обнаружит, что видео перестало играть, а затем воспроизвести второй. Когда второй перестает играть, первое видео должно воспроизводиться снова.Использование NotificationCenter для чередования файлов видео в AVPlayer
Вот где я создал плеер, активы, и игрок пунктов:
//Create URLs
let movieOneURL: URL = URL(fileURLWithPath: movieOnePath)
let movieTwoURL: URL = URL(fileURLWithPath: movieTwoPath)
//Create Assets
let assetOne = AVAsset(url: movieOneURL)
let assetTwo = AVAsset(url: movieTwoURL)
//Create Player Items
avPlayerItemOne = AVPlayerItem(asset: assetOne)
avPlayerItemTwo = AVPlayerItem(asset: assetTwo)
avplayer = AVPlayer(playerItem: avPlayerItemOne)
let avPlayerLayer = AVPlayerLayer(player: avplayer)
avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
avPlayerLayer.frame = UIScreen.main.bounds
movieView.layer.addSublayer(avPlayerLayer)
//Config player
avplayer .seek(to: kCMTimeZero)
avplayer.volume = 0.0
А вот где я создал уведомление, чтобы обнаружить, если игрок достиг конца видеофайла:
NotificationCenter.default.addObserver(self, selector: #selector(self.playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: avplayer.currentItem)
... который называет этот селектор:
func playerItemDidReachEnd(_ notification: Notification) {
// avplayer.seek(to: kCMTimeZero)
changePlayerAsset()
// avplayer.play()
}
... который будет переключаться из актива:
func changePlayerAsset(){
if avplayer.currentItem == avPlayerItemOne {
avplayer.replaceCurrentItem(with: avPlayerItemTwo)
avplayer.play()
} else if avplayer.currentItem == avPlayerItemTwo {
avplayer.replaceCurrentItem(with: avPlayerItemOne)
avplayer.play()
}
}
Это работает в первый раз - когда первый фильм закончился, следующий начнет играть.
Проблема, с которой я сталкиваюсь, заключается в том, что мой наблюдатель уведомлений только однажды регистрируется; в конце первого видео ... уведомление не запускается, когда второе видео перестает играть вообще.
Кто-нибудь есть идея, почему это было бы в случае
Блестяще, спасибо! – narner