如何向 AVAssetReader copyNextSampleBuffer 添加回调?
How to add a callback to AVAssetReader copyNextSampleBuffer?
我正在尝试读取音频帧并使用 AVAssetReader 对其进行解码。我希望能够读取帧 异步 并在读取样本缓冲区时添加某种回调。所以调用后:
...
[reader startReading];
CMSampleBufferRef sample = [readerOutput copyNextSampleBuffer];
我希望能够从我的回调中引用和处理这个示例。那可能吗?如果没有,你能建议我如何使用 AVFoundation/Core 音频中的其他 类 来做到这一点吗?
-(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
}
我正在尝试读取音频帧并使用 AVAssetReader 对其进行解码。我希望能够读取帧 异步 并在读取样本缓冲区时添加某种回调。所以调用后:
...
[reader startReading];
CMSampleBufferRef sample = [readerOutput copyNextSampleBuffer];
我希望能够从我的回调中引用和处理这个示例。那可能吗?如果没有,你能建议我如何使用 AVFoundation/Core 音频中的其他 类 来做到这一点吗?
-(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
}