iOS录制时如何将PCM缓冲区实时转换为AAC数据?

Posted

技术标签:

【中文标题】iOS录制时如何将PCM缓冲区实时转换为AAC数据?【英文标题】:How to real-time convert the PCM buffer to AAC data when recording for iOS? 【发布时间】:2012-12-04 15:03:17 【问题描述】:

我正在使用 Remote.IO 从 PCM 获取音频缓冲区,但原始数据太大而无法通过蜂窝网络(3G 网络)发送到远程端。我确实参考了一些文章,但大多数都建议将 file 转换为其他格式的文件。

有什么方法可以实时将音频缓冲区转换为 AAC 编码数据?

【问题讨论】:

【参考方案1】:

您确实可以将音频缓冲区直接保存为 AAC 格式。

在设置ASBD的时候,这样设置

AudiostreamBasicDescription audioFormat;
audioFormat.mFormatID = kAudioFormatMPEG4AAC;

在调用 ExtAudioFileCreateWithURL 时指定 kAudioFileM4AType,如下所示:

err = ExtAudioFileCreateWithURL((CFURLRef)audioFileURL,
                             kAudioFileM4AType,
                             &audioFormat, 
                             NULL,
                             kAudioFileFlags_EraseFile,
                             &outFile);

您还需要像这样设置编解码器。

UInt32 codecManf = kAppleSoftwareAudioCodecManufacturer;
ExtAudioFileSetProperty(outFile, kExtAudioFileProperty_CodecManufacturer, sizeof(UInt32), &codecManf);

这应该有助于您的 AAC 编码正常工作。

【讨论】:

我认为这不是我所期望的解决方案。无论我刚刚解决了这个问题,我都使用 iLBC 编码和音频转换服务。 @PatrickSCLin,您是否使用带有AudioConverterFillComplexBuffer 的 AudioConvert 音频单元进行转换? 您好,您有任何示例说明如何使用 iLBC 编码和音频转换服务吗?

以上是关于iOS录制时如何将PCM缓冲区实时转换为AAC数据?的主要内容,如果未能解决你的问题,请参考以下文章

iOS语音对讲(三)FFmpeg实时解码AAC并播放PCM

如何将 PCM 音频流转换为在线播放

IOS Swift 读取 PCM 缓冲区

使用 AudioConverter 将 PCM 转换为 AAC 并使用 AVAssetWriter 写入 .mp4 文件时音频失真

Swift iOS实现把PCM语音转成MP3格式

每 10 毫秒记录 pc 音频数据而不播放