• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS 11 : Media Player crash

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:26:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

从 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 核心基金会_CFRelease + 963176
7 AVFoundation-[AVSampleBufferDisplayLayer 解除分配] + 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 问题。

注意:问题是间歇性的。



Best Answer-推荐答案


我不知道媒体播放器框架,但我猜你使用 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap