使用FAAD库对AAC格式的音频进行解码

1、AAC音频文件格式

(1) AAC的音频文件格式有ADIF & ADTS:

       我主要做的是ADTS,我们就分析ADTS格式,下面的图可以反映问题。

        可以参考:https://www.jianshu.com/p/b5ca697535bd

 

         但是这里的ADTS Frame帧中AAC ES的大小不是固定的,这就造成每一帧ADTS数据大小都不同,可以是几百字节到一千多个字节。ADTS帧大小不同,FAAD库就为它设计了一个特别的解码函数,我们待会分析。

2、解码函数分析

unsigned long NEAACAPI NeAACDecGetCapabilities(void);

//这个函数是返回该函数库可以支持的文件格式
#define LC_DEC_CAP           (1<<0) /* Can decode LC */
#define MAIN_DEC_CAP         (1<<1) /* Can decode MAIN */
#define LTP_DEC_CAP          (1<<2) /* Can decode LTP */
#define LD_DEC_CAP           (1<<3) /* Can decode LD */
#define ERROR_RESILIENCE_CAP (1<<4) /* Can decode ER */
#define FIXED_POINT_CAP      (1<<5) /* Fixed point */


NeAACDecHandle NEAACAPI NeAACDecOpen(void);
//解码open函数,返回一个“解码器的头”,简单类比为open()函数返回的文件描述符fd


void NEAACAPI NeAACDecClose(NeAACDecHandle hDecoder);
//同样类比close()函数,输入的参数就是解码open函数,打开的“解码器头”


NeAACDecConfigurationPtr NEAACAPI NeAACDecGetCurrentConfiguration(NeAACDecHandle hDecoder);
//得到解码器的配置信息


unsigned char NEAACAPI NeAACDecSetConfiguration(NeAACDecHandle hDecoder, NeAACDecConfigurationPtr config);
//设置解码器信息,传入的就是配置信息


long NEAACAPI NeAACDecInit(NeAACDecHandle hDecoder, unsigned char *buffer, unsigned long buffer_size, unsigned long *samplerate, unsigned char *channels);
//值得一说的是初始化函数,第一个“解码器的头”,
//重点:第二个“要解码的buffer”,这个buffer只要传一部分进行,初始化函数就会识别文件格式是ADTS还是ADIF
//第三个参数:buffer的大小
//第四采样率,第五通道数



void* NEAACAPI NeAACDecDecode(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo, unsigned char *buffer, unsigned long buffer_size);
//重点:是解码函数传进行的hInfo,这个作为输出型参数;

typedef struct NeAACDecFrameInfo
{
    unsigned long bytesconsumed;
    unsigned long samples;
   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值