ios - 创建 AVPlayerLayer 会导致模拟器崩溃

标签 ios objective-c avplayer simulator

我有一个类在回调中返回 AVPlayer 和 AVSynchronisedLayer。当我使用 AVPlayer 初始化 AVPlayerLayer 时,我崩溃了(只发生在模拟器中)。代码如下所示:

  self.projectPlayer = [[MYMobilePlayer alloc] init];
  [self.projectPlayer setDelegate:self]; 
  [self.projectPlayer returnPlayerForProjectScene:self.projectScene andCallback:^(NSError *error, AVPlayer *player, AVSynchronizedLayer *syncLayer) {


      self.syncLayer = syncLayer;
      AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
      NSLog(@"%@",playerLayer); // Also crashes if I assign to private member variable
      // More code that uses the playerLayer - not needed to illustrate the problem

  }];

回调中返回的对象是正确的,所以我认为我不需要显示创建和返回它们的代码。

堆栈跟踪如下所示(不是很有帮助)。

enter image description here

知道这里会发生什么吗?

最佳答案

UIKit 代码应始终在主线程上调用。您的 returnPlayerForProjectScene 回调发生在其他视频处理线程上。将有问题的代码分派(dispatch)到主队列应该可以解决您的崩溃问题:

[self.projectPlayer returnPlayerForProjectScene:self.projectScene andCallback:^(NSError *error, AVPlayer *player, AVSynchronizedLayer *syncLayer) {

    dispatch_async(dispatch_get_main_queue(), ^{

        self.syncLayer = syncLayer;
        AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
        NSLog(@"%@",playerLayer); // Also crashes if I assign to private member variable
        // More code that uses the playerLayer - not needed to illustrate the problem

    });
}];

关于ios - 创建 AVPlayerLayer 会导致模拟器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40417413/

相关文章:

iPhone:我如何理解文本是否适合标签

ios - 核心情节线程错误 - EXC_BAD_ACCESS(代码=1,地址=0x400002122)

SwiftUI 结合 .onReceive 通知与 AVPlayer

ios - 如何用AVPlayer解析m3u文件

iphone - 如何知道 AVPlayer 何时使用纯音频比特率?

ios - 如何在 swift 中使用 Textfield 制作 UITableview?

ios - 我无法加载存储在我的文档目录中的数据

ios - 检测点击 ImageView

java - 向 Java 程序员解释 Objective-C 委托(delegate)

iphone - 需要将数据从 Bundle 加载到我的 iPhone 应用程序中