我正在使用Swift制作一个iOS应用程序,在屏幕右上角的小层中循环播放特定颜色物品的视频。然后用户点击屏幕上对应的彩色物品。当他们这样做时,videoName变量会随机更改为下一个颜色,并触发相应的视频。我没有问题使用AVPlayer、AVPlayerItem在附加的代码中提到的方式来升起、播放和循环视频。
我遇到的问题是,每当下一个视频出现时,之前的视频仍然停留在它的后面。此外,在我的iPad上播放16个视频后,播放器就完全消失了。我尝试了许多在本网站和其他网站上提出的建议,但是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()
}
}
`