iOS 11 : Media Player crash

标签 ios ios11

从 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

只是想了解这是否是我的应用程序的问题,或者这是否是苹果测试版的问题。

注意:该问题是间歇性的。

最佳答案

我不知道媒体播放器框架,但我的猜测是您使用 AVPlayer 进行视频播放,因为 documentation

To enable users to play videos containing MPMediaItem objects, use AVPlayer. You cannot play video media items using the Media Player framework.

如果是这样,您可能会使用 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)
}

使用 时,enqueue(_sampleBuffer: CMSampleBuffer)flush()flushAndRemoveImage() 也是如此AVSampleBufferDisplayLayer

关于iOS 11 : Media Player crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45573203/

相关文章:

ios - 证书和私钥对 IOS

ios - swift-如何在特定日期和时间打开日历应用程序?

ios - MobileVLCKit 播放器在 iOS 11 上显示黑屏

ios - iPhone X 的 UIView 高度没有扩展

iphone - 如何使用 UITouches 移动 CGRect?

iphone - 如何使用 iOS 的 api 1.1 获取 Twitter 个人资料图片?

ios - 所有 View Controller 和导航 View Controller 都位于状态栏下方

ios - '传递给不带参数的调用的参数'实例化 HKWorkoutRouteQuery

iOS 11 : Add other nav items next to a search bar embedded in navigation item title view

ios - 查看谁重置iOS Distribution Provisioning Profile