使用FAAC转换PCM为AAC
注意事项、1 、输出格式中 0 = Raw ; 1= ADTS ,用户应根据自己需求来确定参数
2、每次给到Faac进行编码的数据 必须根据通道数、分辨率等算出来,可不是想给多少就给多少?同样上层的APP产生的数据也应该是这个值、Android中测试若不是规定值编解码有问题。
关于FAAC
FAAC是一个MPEG-4和MPEG-2的AAC编码器,其特性是:可移植性好,快速,支持LC/Main/LTP,通过Dream支持DRM,代码小相对于FFMPEG的AAC转码,FAAC实在是微乎其微,而且可以直接把代码加到工程里面编译,也可使用静态库,而没有巨大的动态库的烦恼。
下载安装
- 直接按照官方文档所示,编译静态库以供我们程序使用。(我没这么做,个中曲折错误不细数)
- 把FAAC的代码抠出来,直接加到我们的工程中去,或者抠出来编译一个静态库,简单暴力有效,需要的代码是libfaac和include两个目录下的所有文件(不包括子目录文件)。 目录文件列表如下所示:
强烈推荐使用第二种方法aacquant.c aacquant.h backpred.c backpred.h bitstream.c bitstream.h channels.c channels.h coder.h faac.h faaccfg.h fft.c fft.h filtbank.c filtbank.h frame.c frame.h huffman.c huffman.h hufftab.h ltp.c ltp.h midside.c midside.h psych.h psychkni.c tns.c tns.h util.c util.h version.h
主要的函数介绍
faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate,
unsigned int numChannels,
unsigned long *inputSamples,
unsigned long *maxOutputBytes);
// 描述 : 打开并初始化编码器
// sampleRate : 编码输入信息的采样率
// numChannels : 编码输入信息的通道数量,1-单声道 2-立体声
// inputSamples : 编码后的数据长度
// maxOutputBytes : 编码后的信息最大长度
int FAACAPI faacEncClose(faacEncHandle hEncoder);
// 描述:关闭编码器
// hEncoder : faacEncOpen返回的编码器句柄
faacEncConfigurationPtr FAACAPI faacEncGetCurrentConfiguration(faacEncHandle hEncoder);
// 描述 :获取当前编码器的配置信息
// hEncoder : faacEncOpen返回的编码器句柄
int FAACAPI faacEncSetConfiguration(faacEncHandle hEncoder, faacEncConfigurationPtr config);
// 描述 : 配置解码器的参数
// hEncoder : faacEncOpen返回的编码器句柄
// config : 编码器的配置信息
int FAACAPI faacEncEncode(faacEncHandle hEncoder,
int32_t * inputBuff