Я использую AVAssetReader
для чтения аудиоданных из файла во вторичном потоке. В основе каждого примера кода, который я видел, есть такой цикл:
while (assetReader.status == AVAssetReaderStatusReading)
{
// ...
buffer = [theAssetReaderTrackOutput copyNextSampleBuffer];
// ...
}
(или эквивалент Swift). Мой вопрос: блокируется ли copyNextSampleBuffer
при ожидании данных от AVAsset
, или он возвращает NULL
, если данные еще не доступны? Если последнее, то у нас есть цикл опроса, что является плохой практикой, сжигание циклов ЦП при многократных проверках status
. В документации для copyNextSampleBuffer
не сказано, блокирует ли он поток во время ожидания. Я также не могу сказать, пытается ли он немедленно вернуться с любыми данными, которые у него есть, или терпит неудачу / блокирует, если у него недостаточно данных для буфера определенного минимального размера.
copyNextSampleBuffer
блокирует и возвращаетNULL
в EOF. - person Rhythmic Fistman   schedule 05.12.2020status
, которые нигде не задокументированы. - person Zzyzx   schedule 05.12.2020