В iOS 18 при использовании AudioUnit для записи звука преобразование формата PCM в AAC приводит к сбою приложения.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 В iOS 18 при использовании AudioUnit для записи звука преобразование формата PCM в AAC приводит к сбою приложения.

Сообщение Anonymous »

Код: Выделить всё

 AudioBufferList* convertPCMToAAC (XDXRecorder *recoder) {
UInt32   maxPacketSize    = 0;
UInt32   size             = sizeof(maxPacketSize);
OSStatus status;

status = AudioConverterGetProperty(_encodeConvertRef,
kAudioConverterPropertyMaximumOutputPacketSize,
&size,
&maxPacketSize);
//    log4cplus_info("AudioConverter","kAudioConverterPropertyMaximumOutputPacketSize status:%d \n",(int)status);

AudioBufferList *bufferList             = (AudioBufferList *)malloc(sizeof(AudioBufferList));
bufferList->mNumberBuffers              = 1;
bufferList->mBuffers[0].mNumberChannels = _targetDes.mChannelsPerFrame;
bufferList->mBuffers[0].mData           = malloc(maxPacketSize);
bufferList->mBuffers[0].mDataByteSize   = kTVURecoderPCMMaxBuffSize;

AudioStreamPacketDescription outputPacketDescriptions;

UInt32 inNumPackets = 1;

pthread_mutex_lock(&pcmBufferMutex);

status = AudioConverterFillComplexBuffer(_encodeConvertRef,
encodeConverterComplexInputDataProc,
pcm_buffer,
&inNumPackets,
bufferList,
&outputPacketDescriptions);
pthread_mutex_unlock(&pcmBufferMutex);
if(status != noErr){
//        log4cplus_debug("Audio Recoder","set AudioConverterFillComplexBuffer status:%d inNumPackets:%d \n",(int)status, inNumPackets);
free(bufferList->mBuffers[0].mData);
free(bufferList);
return NULL;
}

if (recoder.needsVoiceDemo) {
OSStatus status = AudioFileWritePackets(recoder.mRecordFile,
FALSE,
bufferList->mBuffers[0].mDataByteSize,
&outputPacketDescriptions,
recoder.mRecordPacket,
&inNumPackets,
bufferList->mBuffers[0].mData);
//        log4cplus_info("write file","write file status = %d",(int)status);
if (status == noErr) {
recoder.mRecordPacket += inNumPackets;
}
}

return bufferList;
}
Приведенный выше код для преобразования PCM в AAC нормально работает в версиях iOS ниже 18, но в iOS 18 в процессе преобразования происходят сбои. Консоль не предоставляет много полезной информации, и приложение аварийно завершает работу при вызове malloc(maxPacketSize) или AudioConverterFillComplexBuffer(), отображая сообщение AURemoteIO::IOThread (14): EXC_BAD_ACCESS (код=1, адрес=0x0). Пожалуйста, помогите определить причину сбоя.
Я надеюсь полностью решить эту проблему со сбоем.

Подробнее здесь: https://stackoverflow.com/questions/790 ... to-aac-cra
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»