我的目标是以AAC格式录制音频,并通过网络连接作为流发送。
我使用的是音频队列服务,并将我的代码基于SpeakHere示例。我知道,为了写入文件,它使用AudioFileWritePackets()函数。
这里是回调函数:
void MyInputBufferHandler(void* inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp * inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription* inPacketDesc) {
Recorder *aqr = (Recorder *)inUserData;
if (inNumPackets > 0) {
// write packets to file
AudioFileWritePackets(aqr->mRecordFile, FALSE,
inBuffer->mAudioDataByteSize,
inPacketDesc, aqr->mRecordPacket,
&inNumPackets, inBuffer->mAudioData);
aqr->mRecordPacket += inNumPackets;
}
// if we're not stopping, re-enqueue the buffe so that it gets filled again
if ([aqr IsRunning])
AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL);
}
起初我认为 AudioFileWritePackets 通过直接编写inBuffer->mAudioData
的内容来工作。但是,当我手动将mAudioData的内容写入文件时,解码似乎无法正常工作。
在检查和比较 AudioFileWritePackets 写入文件的原始数据和我只是将mAudioData写入文件时,他们似乎已经附加了一个标题。
由于我无法了解 AudioFileWritePackets()如何在其中工作,我的问题是,如何将录制的音频写入缓冲区(或流,如果您更喜欢称之为这样)而不是文件,以便我以后可以通过网络连接发送它?
再次,简而言之,我需要的是:以aac格式录制音频并通过网络连接流式传输音频。
谢谢!我一直在寻找我的头脑......
P.S:如果你指出我现有的项目,请确保它们是我需要的。我真的觉得我一直在寻找所有可能的项目>。<