使用音频队列服务录制aac时,保存到缓冲区而不是文件

时间:2012-07-06 00:06:05

标签: objective-c audio audio-streaming audio-recording audioqueueservices

我的目标是以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:如果你指出我现有的项目,请确保它们是我需要的。我真的觉得我一直在寻找所有可能的项目>。<

1 个答案:

答案 0 :(得分:0)

相关问题