2015-05-31 3 views
1

У меня проблема с AVPlayer. Я пробовал много решений, но он по-прежнему падает после того, как я перехожу к другому виду.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 дней.

EDIT: Проблема, по-видимому, связана с SWReveal. Он освобождает экземпляры до завершения жизненного цикла. Принято наилучшее решение, но проблема связана с SWReveal.

+0

'viewWillDisappear' уже названный в главном потоке. Итак, в чем цель 'dispatch_async (dispatch_get_main_queue()'? – matt

+0

Если вы не можете определить линию сбоя любым другим способом, возможно, вы можете пересечь свой код с большим количеством протоколирования ('println'), чтобы вы могли определить, что является последней строкой который выполняется до сбоя. – matt

+0

Когда я использовал точки останова, чтобы увидеть, где приложение разбилось, оно перестало сбой, поэтому я хотел проверить, связано ли это с потоком. – user3307029

ответ

0
  1. Попробуйте использовать MPMoviePlayerController вместо AVPlayer, для простых решений MPMoviePlayerController имеет более простой API.
  2. сделать MPMoviePlayerController глобальным экземпляром, сделав его доступным через все приложение, а затем инициализировать его, когда вам это нужно.
  3. Попробуйте воспроизвести видео локально первый и проверить, если он решает проблему
Смежные вопросы