Оказывается, виновником был следующий код:
UInt32 cookieSize = 0;
char cookie[cookieSize];
AudioConverterGetPropertyInfo(_converter, kAudioConverterCompressionMagicCookie, &cookieSize, NULL);
AudioConverterGetProperty(_converter, kAudioConverterCompressionMagicCookie, &cookieSize, cookie);
CMAudioFormatDescriptionRef audioFormat;
const OSStatus formatCreationError = CMAudioFormatDescriptionCreate(
kCFAllocatorDefault,
&_toFormat,
0, NULL, // layout
cookieSize, cookie, // cookie
NULL, // extensions
&audioFormat);
if(formatCreationError != noErr) {
NSLog(@"Failed to convert a buffer because format creation failed: %d", (int)formatCreationError);
continue;
}
Я заметил, что когда я создаю описание формата для CMSampleBuffer, я должен добавить magicCook ie только к первый буфер выборок , или, возможно, его следует отправлять даже в буфер выборок без данных вообще.
Если я делаю это таким образом, в аудио нет искажений, и в контейнере файла mp4 есть только один атом esds.