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

时间:2016-08-22 07:49:59

标签: ios objective-c swift video avplayer

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

enter image description here

2 个答案:

答案 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播放第一个视频然后等待你的控制器直到完成然后再启动另一个。