我正在构建一个简单的游戏,我需要向用户显示2个视频,频繁的视频在我的本地包中。我只是想在我的viewcontroller上播放那些视频。我的代码是:
let playerItem = AVPlayerItem(URL: NSURL.fileURLWithPath("\(vdoPath)")) //vdoPath will be random of that two local video files from bundle
let player = AVPlayer(playerItem: playerItem)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
playerViewController.view.backgroundColor = UIColor.clearColor()
playerViewController.showsPlaybackControls = false
playerViewController.view.frame = self.playerView.bounds
self.playerView.addSubview(playerViewController.view)
self.addChildViewController(playerViewController)
player.play()
AVPlayer有时会播放视频,因为我不会遇到问题直到12-15次,但是当我继续播放更多AVPlayer无法播放时,显示如下: 我的文件和路径没有问题,因为在我得到这个之前我能够按照我的说法玩12-15次。请给我正确的解决方案和原因。
答案 0 :(得分:3)
对于未来面临此问题并且@ JAck的解决方案无效的人,这里有一个适合我的解决方案。顺便说一句,我的屏幕只是黑色。它没有通过它的斜线播放按钮......但无论如何,我的根本问题是我有太多的AVPlayer和AVPlayerLayer实例(Apple显然限制了这个数字)。虽然我在解雇视图控制器时移除了图层并暂停了播放器,但播放器仍被保留(我猜测)。所以,我的解决方案是将播放器实例和播放器层实例都清零。这是我的代码:
var player: AVPlayer?
var layer: AVPlayerLayer?
在解雇我的视图控制器之前,我添加了这个片段:
DispatchQueue.main.async {
self.player?.pause()
self.player = nil
self.layer?.removeFromSuperlayer()
self.layer = nil
}
答案 1 :(得分:2)
您需要使用player.replacePlayerItem(item)
而不是两次通话
如果仍然不工作,请随时问我。首先让AVPlayer播放第一个视频然后等待你的控制器直到完成然后再启动另一个。