【问题标题】:How to add a callback to AVAssetReader copyNextSampleBuffer?如何向 AVAssetReader copyNextSampleBuffer 添加回调?
【发布时间】:2021-05-30 16:24:05
【问题描述】:

我正在尝试读取音频帧并使用 AVAssetReader 对其进行解码。我希望能够异步读取帧,并在读取样本缓冲区时添加某种回调。所以调用后:

...
[reader startReading];
CMSampleBufferRef sample = [readerOutput copyNextSampleBuffer];

我希望能够从我的回调中引用和处理此示例。那可能吗?如果没有,您能否建议我如何使用 AVFoundation/Core Audio 中的其他类来做到这一点?

【问题讨论】:

    标签: avfoundation core-audio cmsamplebuffer avassetreader


    【解决方案1】:

    -(CMSampleBufferRef)[AVAssetReaderOutput copyNextSampleBuffer] 是同步的,我没有看到任何替代方案。

    您可以通过执行以下操作为其提供异步接口:

    dispatch_async(myDecodingDispatchQueue, ^{
      CMSampleBufferRef sampleBuffer;
      while ((sampleBuffer = [readerOutput copyNextSampleBuffer])) {
        dispatch_async(myDispatchQueue, ^{
           [myCallbackObject myCallbackWithSampleBuffer:sampleBuffer];
        });
      }
      // examine AVAssetReader.status here to see reason for stopping
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多