简介
AAC⾳频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4 标准定义的有损⾳频压缩格式,由Fraunhofer发展,Dolby, Sony和AT&T是主 要的贡献者。
通常会将AAC与ADTS等容器格式混淆,但它们其实是不同的概念。AAC是编码规范,ADTS/ADIF是它的容器格式。
-
ADIF (Audio Data Interchange Format):
- ADIF是一种AAC音频的文件封装格式,它将AAC编码后的数据直接存储在文件中。
- ADIF文件中不包含任何帧头信息,整个文件就是纯AAC编码数据。
- ADIF格式不适合流媒体传输,因为无法实现随机访问。
-
ADTS (Audio Data Transport Stream):
- ADTS是AAC音频的一种容器格式,常用于流媒体传输。
- ADTS在AAC编码数据前添加了帧头信息,包括一些同步字节、采样率、声道数等。
- ADTS格式允许随机访问,非常适合用于流式传输。
- ADTS通常用于MP4、TS等容器格式中的AAC音频部分。
简单说,ADTS可以在任意帧解码,也就是说它每⼀帧都有头信息。ADIF只有⼀ 个统⼀的头,所以必须得到所有的数据后解码。
且这两种的header的格式也是不同的,⽬前⼀般编码后的和抽取出的都是 ADTS格式的⾳频流。两者具体的组织结构如下所示:
有的时候当你编码AAC裸流的时候,会遇到写出来的AAC⽂件并不能在PC和⼿ 机上播放,很⼤的可能就是AAC⽂件的每⼀帧⾥缺少了ADTS头信息⽂件的包装 拼接。
ADIF 分析
这个格式比较少见,简单认识一下即可,ADIF 是一种用于存储 MP3 编码音频数据的容器格式。下图是ADIF格式的序列,由adif_header、byte_alignment、raw_data_stream三部分组成。byte_alignment是用来做字节对齐的,也就是说,ADIF格式由一个ADIF头信息(adif_header) 和 原始数据流(raw_data_stream) 构成。
ADTS分析
ADTS格式每⼀帧由ADTS Header和AAC Audio Data组成。结构体如 下:
每⼀帧的ADTS的头⽂件都包含了⾳频的采样率,声道,帧⻓度等信息,这样解码器才能解析读取。
⼀般情况下ADTS的头信息都是7个字节,分为2部分:
adts_fixed_header();
adts_variable_header();其⼀为固定头信息,紧接着是可变头信息。固定头信息中的数据每⼀帧都相同,⽽可变头信息则在帧与帧之间可变。