我正在用 Swift 制作一个 iOS 应用程序,它在屏幕右上角的一个小层中循环播放视频,显示特定颜色项目的视频。然后用户点击屏幕上相应的彩色项目。当他们这样做时,videoName 变量会随机更改为下一种颜色,并触发相应的视频。如附件代码所示,我可以使用 AVPlayer、AVPlayerItem 提升、播放和循环视频。我被卡住的地方是,每当显示下一个视频时,以前的视频都会在它后面保持打开状态。此外,播放 16 个视频后,播放器在我的 iPad 上完全消失。我已经尝试了这个站点和其他站点中提出的许多建议,但要么迅速发现它们有问题,要么就是不起作用。 所以问题:在我的代码中,我如何告诉它“嘿,下一个视频已经开始播放,删除上一个视频和它的图层并释放内存,以便我可以根据需要播放尽可能多的视频”?
//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()
}
}
`