2017-08-08 128 views
1

開始與iOS 11,我已經看到了這個崩潰:iOS的11:媒體播放器崩潰

 
1 libdispatch.dylib _dispatch_sync_wait + 63192 
2 MediaToolbox videoQueueRemote_Invalidate + 5984376 
3 MediaToolbox videoQueueRemote_Invalidate + 5984376 
4 MediaToolbox videoQueueRemote_Finalize + 5984828 
5 CoreMedia FigBaseObjectFinalize + 47300 
6 CoreFoundation _CFRelease + 963176 
7 AVFoundation -[AVSampleBufferDisplayLayer dealloc] + 1467352 
8 QuartzCore CA::Transaction::commit() + 745496 
9 MediaToolbox FigLayerSynchronizerSynchronizeToMoment + 857340 
10 MediaToolbox videoQueueRemote_SynchronizeLayerToMoment + 5994476 
11 MediaToolbox figSyncMomentSource_sendMomentInternal + 852744 
12 libdispatch.dylib _dispatch_client_callout + 6404 
13 libdispatch.dylib _dispatch_queue_serial_drain$VARIANT$mp + 46184 
14 libdispatch.dylib _dispatch_queue_invoke$VARIANT$mp + 48632 
15 libdispatch.dylib _dispatch_root_queue_drain_deferred_wlh$VARIANT$mp + 51244 
16 libdispatch.dylib _dispatch_workloop_worker_thread$VARIANT$mp + 84560 
17 libsystem_pthread.dylib _pthread_wqthread + 4680 

只是想知道這是否是我的應用程序的問題,或者如果這是蘋果BETA問題。

注意:問題是間歇性的。

+0

在整個iOS 11版本中看到類似的崩潰。你有沒有找到一個原因呢? – bjtitus

回答

0

我不知道媒體播放器框架,但我的猜測是您使用AVPlayer視頻播放,因爲documentation美國

爲了使用戶能夠播放包含MPMediaItem對象的視頻,請使用 AVPlayer。您無法使用媒體播放器 框架播放視頻媒體項目。

如果是這樣,您可能使用AVPlayerLayer進行顯示,這很可能在內部使用AVSampleBufferDisplayLayer。這將是從您的堆棧跟蹤的一個:

7 AVFoundation - [AVSampleBufferDisplayLayer的dealloc] + 1467352

我得到了相同的崩潰,並看到了同樣的堆棧跟蹤在後臺線程,而直接與工作AVSampleBufferDisplayLayer。經過大量的調試和測試後,我發現將觸摸此層的所有代碼移動到主線程中,從而消除了崩潰。該viewWill...viewDid...回調是爲建立良好的地方:

var player : AVPlayer! 
var layer : AVPlayerLayer! 
// var layer : AVSampleBufferDisplayLayer! // in my case 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.layer = AVPlayerLayer(player: player) 
    // self.layer = AVSampleBufferDisplayLayer() // in my case 
    self.layer.frame = self.view.bounds 
    self.view.layer.addSublayer(self.layer) 
} 

AVSampleBufferDisplayLayer工作時,這同樣適用於enqueue(_ sampleBuffer: CMSampleBuffer)flush()flushAndRemoveImage()真。