Я работаю над внедрением видеоплеера в Swift, который обнаружит, что видео перестало воспроизводиться, а затем воспроизведет второе. Когда второе перестанет воспроизводиться, первое видео должно воспроизвести снова.
Здесь я настроил игрока, активы и предметы игрока:
//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()
}
}
Это отлично работает с первого раза - когда первый фильм закончил воспроизведение, следующий начнет воспроизводиться.
Проблема, с которой я сталкиваюсь, заключается в том, что мой наблюдатель уведомлений, кажется, регистрируется только один раз; в конце первого видео ... уведомление не срабатывает, когда второе видео вообще перестает воспроизводиться.
У кого-нибудь есть идея, почему это так