小编nat*_*irl的帖子

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

我的目标是以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);
}
Run Code Online (Sandbox Code Playgroud)

起初我认为AudioFileWritePackets的工作原理是直接写入内容inBuffer->mAudioData.但是,当我手动将mAudioData的内容写入文件时,解码似乎不起作用.

在检查和比较AudioFileWritePackets写入文件的原始数据和我将mAudioData写入文件时,他们似乎已经附加了一个标题.

由于我无法找到AudioFileWritePackets()如何在其中工作,我的问题是,如何将录制的音频写入缓冲区(或流,如果您更喜欢这样称呼它)而不是文件,这样我就可以以后通过网络连接发送?

同样,简而言之,这就是我需要的:以aac格式录制音频并通过网络连接流式传输音频. …

audio objective-c audio-recording audio-streaming audioqueueservices

5
推荐指数
1
解决办法
1588
查看次数