我的目标是以 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 格式录制音频并通过网络连接流式传输音频。
谢谢!我一直在寻找我的头蓝色...
PS:如果你指出我现有的项目,请确保它们是我需要的。我真的觉得我一直在寻找所有可能的项目>.<