AAC(Advanced Audio Coding)由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发, 目的是取代MP3格式.
最开始是基于MPEG-2的音频编码技术, MPEG-4标准出现后, AAC重新集成了其特性, 加入了SBR技术和PS技术.
目前常用的规格有AAC LC、AAC HE V1、AAC HE V2, V1用的相对较少, 因为已经被V2取代.
AAC 规格描述
-
AAC LC : ( Low Complexity ) 低复杂度规格, 码流是128k, 音质好.
-
AAC HE V1 : 等于 AAC LC + SBR ( Spectral Band Replication ) , 其核心思想是按频谱保存. 低频编码保存主要成分, 高频单独放大编码保存音质. 码流在64k左右.
-
AAC HE V2 : 等于 AAC LC + SBR + PS ( Parametric Stereo ) , 其核心思想是双声道中的声音存在某种相似性, 只需存储一个声道的全部信息, 然后, 花很少的字节用参数描述另一个声道和它不同的地方.
AAC格式
-
ADIF( Audio Data Interchange Format ) : 这种格式的特征是可以确定的找到这个音频数据的开始, 只能从头开始解码, 不能在音频的数据流中间开始(但是解码完成后 播放的时候可以从任何地方开始). 这种格式常用在磁盘文件中.
-
ADTS( Audio Data Transport Stream ) : 这种格式的特征是每一帧都有一个同步字, 所以可以在音频流的任何位置开始解码, 它类似于数据流格式, 适用于直播系统.
ADTS结构
Audio Object Types
1 : AAC Main
2 : AAC LC
...
5: SBR
...
29: PS
...
以上列表中 序号 -1 才是真实的header中每一位的值, 同理获取到object types + 1 才能对应到该类型的含义.
Sampling Frequency Index
协议中以编号代替采样率的值.
可以通过以下网址查看AAC Frame Header 的具体含义:
-
ffmpeg提供相应的接口, 不用开发人员手动使用C/C++编写ADTS头.
-
作为开发者应该知道, 我们拿到一个aac 文件, 里面是有ADTS头的, 如果该文件无法正常播放, 可能是因为ADTS头的问题.