Как закрыть предыдущий AVPlayer и AVPlayerItem
Я делаю приложение для iOS в Swift, которое воспроизводит видео в виде цикла в небольшом слое в верхнем правом углу экрана, которое показывает видео определенного цветного элемента. пользователь затем нажимает соответствующий цветной элемент на экране. когда они это делают, переменная videoName случайным образом изменяется на следующий цвет, и запускается соответствующее видео. У меня нет проблем с поднятием, воспроизведением и зацикливанием видео с AVPlayer, AVPlayerItem, как видно из прилагаемого кода. Я застрял в том, что всякий раз, когда показывается следующее видео, предыдущие остаются открытыми. Кроме того, после воспроизведения 16 видео плеер полностью исчезает на моем iPad. Я перепробовал много предложений, представленных на этом и других сайтах, но Swift либо находит с ними проблему, либо просто не работает.Итак, вопрос: в моем коде здесь, как мне сказать: «эй, следующее видео начало воспроизводиться, удалить предыдущее видео и его слой и освободить память, чтобы я мог воспроизвести столько видео, сколько необходимо»?
//set variables for video play
var playerItem:AVPlayerItem?
var player:AVPlayer?
//variables that contain video file path, name and extension
var videoPath = NSBundle.mainBundle().resourcePath!
var videoName = "blue"
let videoExtension = ".mp4"
//DISPLAY VIDEO
func showVideo(){
//Assign url path
let url = NSURL(fileURLWithPath: videoPath+"/Base.lproj/"+videoName+videoExtension)
playerItem = AVPlayerItem(URL: url)
player=AVPlayer(playerItem: playerItem!)
let playerLayer=AVPlayerLayer(player: player!)
//setplayser location in uiview and show video
playerLayer.frame=CGRectMake(700, 5, 350, 350)
self.view.layer.addSublayer(playerLayer)
player!.play()
// Add notification to know when the video ends, then replay it again. THIS IS A CONTINUAL LOOP
NSNotificationCenter.defaultCenter().addObserverForName(AVPlayerItemDidPlayToEndTimeNotification, object: player!.currentItem, queue: nil)
{ notification in
let t1 = CMTimeMake(5, 100);
self.player!.seekToTime(t1)
self.player!.play()
}
}
`