解除视图时AVPlayer在设备上崩溃

时间:2015-05-31 14:59:44

标签: ios avplayer iphone-6 swrevealviewcontroller

我遇到了AVPlayer的问题。我已经尝试了很多解决方案但是在我转向不同的视图后它仍然崩溃。

class GuideVideo : BaseViewController{

var avPlayer: AVPlayer?
var avPlayerLayer: AVPlayerLayer?

override func viewDidLoad() {
    super.viewDidLoad()
    generateVideo()
}

func generateVideo () {
    let videoURLWithPath = data["VideoUrl"]
    let videoFilePath = NSURL(string: videoURLWithPath!)

    let avAsset: AVAsset = AVAsset.assetWithURL(videoFilePath) as! AVAsset
    let avPlayerItem = AVPlayerItem(asset: avAsset)
    avPlayer = AVPlayer(playerItem: avPlayerItem)
    avPlayerLayer = AVPlayerLayer(player: avPlayer)

    avPlayerLayer!.frame = self.videoView.bounds
    self.videoView.layer.addSublayer(avPlayerLayer)
    avPlayer!.play()
}

我还尝试从中移除观察者,因为我认为崩溃与一个零观察者有关。

override func viewWillDisappear(animated: Bool) {
    dispatch_async(dispatch_get_main_queue(),{
        if self.avPlayerLayer != nil {
            self.avPlayerLayer!.player.pause()
            NSNotificationCenter.defaultCenter().removeObserver(self.avPlayerLayer!)
            self.avPlayerLayer!.removeFromSuperlayer()
            self.avPlayerLayer = nil
        }
        self.avPlayer!.pause()
        self.avPlayer = AVPlayer()
    })
    super.viewWillDisappear(animated)
}

没有任何作用,崩溃也没有提供数据。要么崩溃而没有指明一行或一般

  

线程1:EXC_BAD_ACCESS   *需要注意的是,这次崩溃只发生在iPhone 6/6 +上。我们的iPhone 5C很好地处理了这个课程。   *我只是在移动到另一个视图控制器或不同的导航堆栈后才崩溃,但在视图被解除后几秒钟。

谢谢你,在2天的大部分时间里一直坐在这上面。

编辑:这个问题显然与SWReveal有关。它在生命周期结束之前释放实例。 接受最佳解决方案,但问题与SWReveal有关。

1 个答案:

答案 0 :(得分:0)

  1. 尝试使用MPMoviePlayerController而不是AVPlayer,对于简单的解决方案,MPMoviePlayerController有一个更简单的API。
  2. 使MPMoviePlayerController成为一个全局实例,使其可以通过整个应用程序访问,然后在需要时进行初始化。
  3. 首先尝试在本地播放视频并检查它是否解决了问题