首先介绍AAC ADTS格式分析
AAC⾳频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4标准定义的有损⾳频压缩格式。
ADIF:Audio Data Interchange Format ⾳频数据交换格式。这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中。
ADTS的全称是Audio Data Transport Stream。是AAC⾳频的传输流格式。AAC⾳频格式在MPEG-2(ISO-13318-7 2003)中有定义。AAC后来⼜被采⽤到MPEG-4标准中。这种格式的特征是它是⼀个有同步字的⽐特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
简单说,ADTS可以在任意帧解码,每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。有的时候当你编码AAC裸流的时候,会遇到写出来的AAC⽂件并不能在PC和⼿
机上播放,很⼤的可能就是AAC⽂件的每⼀帧⾥缺少了ADTS头信息⽂件的包装拼接。
⼀个AAC原始数据块⻓度是可变的,对原始帧加上ADTS头进⾏ADTS的封装,就形成了ADTS帧。
AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成。
每一帧的ADTS头文件都包含了音频的采样率、声道、帧长度等信息,这样解码器才能够解析读取。一般ADTS头信息是7个字节,分为:
- adts_fixed_header()
- adts_variable_header()
其⼀为固定头信息,紧接着是可变头信息。固定头信息中的数据每⼀帧都相同,⽽可变头信息则在帧与帧之间可变。
- syncword:同步头,总是0xFFF,代表一个ADTS帧的开始
- ID:mpeg标识符,0标识MPEG-4,1标识MPEG-2
- layer:总是'00'
- protection_avsent:表示是否有误码校验。set to 1 if there is no CRC and 0 if there is CRC
- profile:表示AAC级别。如01 Low Complexity(LC)--- AACLC。有些芯⽚只⽀持AAC LC 。profile的值等于 Audio Object Type的值减1
profile = MPEG-4 Audio Object Type - 1
- sampling_frequency_index:表示使用的采样率下标,通过下标在Sampling Frequencies[]数组中查找采样率。