播放某些项目后 AVPlayer 无法播放

AVPlayer not able to play after playing some items

我正在构建一个简单的游戏,我需要经常向用户显示 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 次。请给我正确的解决方案和背后的原因。

您需要使用 player.replacePlayerItem(item) 而不是两次调用 如果仍然无法正常工作,请随时问我。首先让 AVPlayer 播放第一个视频然后等待你的控制器直到完成然后开始另一个。

对于将来遇到此问题且@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
}