Я создаю приложение для iPhone, которое записывает звук.Я использую Audio Queue Services, и все отлично работает для записи.
Дело в том, что я использую AudioFileWritePackets для записи файлов и пытаюсь поместить те же пакеты "AAC + ADTS" в сетевой сокет.
Полученный файл отличается, так как некоторые «заголовки» или «заголовок объявления» могут отсутствовать.Я ищу идеи о том, как написать заголовок ADTS и / или заголовок AAC?Может ли сообщество помочь мне с этим или направить меня к руководству, которое продемонстрировало, как это сделать?
В настоящее время у меня есть метод обработчика буфера:
void Recorder::MyInputBufferHandler(void inUserData,
AudioQueueRefinAQ, AudioQueueBufferRefinBuffer,
const AudioTimeStamp*inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription*inPacketDesc) {
AQRecorder *aqr = (AQRecorder *)inUserData;
try {
if (inNumPackets > 0) {
// write packets to file
XThrowIfError(AudioFileWritePackets(aqr->mRecordFile,
FALSE,
inBuffer->mAudioDataByteSize,
inPacketDesc,
aqr->mRecordPacket,
&inNumPackets,
inBuffer->mAudioData),
"AudioFileWritePackets failed");
fprintf(stderr, "Writing.");
// We write the Net Buffer.
[aqr->socket_if writeData :(void *)(inBuffer->mAudioData)
:inBuffer->mAudioDataByteSize];
aqr->mRecordPacket += inNumPackets;
}
// if we're not stopping, re-enqueue the buffe so that it gets filled again
if (aqr->IsRunning()) {
XThrowIfError(AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL),
"AudioQueueEnqueueBuffer failed");
}
}
catch (CAXException e) {
char buf[256];
fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}
}