我正在使用AVAssetReader
在辅助线程上从文件中读取音频数据。我见过的每个代码示例的核心都是这样的循环:
while (assetReader.status == AVAssetReaderStatusReading)
{
// ...
buffer = [theAssetReaderTrackOutput copyNextSampleBuffer];
// ...
}
(或 Swift 等价物)。我的问题是,copyNextSampleBuffer
在等待来自 的数据时会阻塞AVAsset
,还是NULL
在数据尚不可用时返回?如果是后者,那么我们有一个轮询循环,这是不好的做法,在反复检查时会消耗 CPU 周期status
。的文档copyNextSampleBuffer
没有说明它是否在等待时阻塞线程。我也无法判断它是否尝试立即返回可用的任何数据,或者失败/阻塞,除非它有足够的数据用于某个最小大小的缓冲区。