AVAssetReader не читает весь файл? - PullRequest
3 голосов
/ 01 ноября 2010

Я читаю аудиоустройства из библиотеки iPod на iOS с помощью AVAssetReader и AVAssetReaderTrackOutput.Тем не менее, когда я читаю данные и собираю куски вместе, файл не совсем то же самое.Не хватает нескольких килобайт, и поэтому аудиофайл не будет воспроизводиться.

Вот код, который я использую для извлечения аудиоданных

// Copy next audio samples
CMSampleBufferRef buffer = [[reader_.outputs objectAtIndex:0] copyNextSampleBuffer];

// Extract bytes from buffer
CMBlockBufferRef dataBuffer = CMSampleBufferGetDataBuffer(buffer);

size_t bufLen = CMBlockBufferGetDataLength(dataBuffer);
UInt8 buf[bufLen];

CMBlockBufferCopyDataBytes(dataBuffer, 0, bufLen, buf);

// Pass data to delegate
if ([delegate respondsToSelector:@selector(assetStream:hasDataAvailable:)]) {
    [delegate assetStream:self hasDataAvailable:[NSData dataWithBytes:buf length:bufLen]];
}

// Invalidate buffer
CMSampleBufferInvalidate(buffer);

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 06 ноября 2010

Да, я угадал. copyNextSampleBuffer не содержит заголовок AAC, и поэтому API проигрывателя не может обработать файл.

Вы можете скопировать описание потока другими способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...