AAC(Advanced Audio Coding,标准由 ISO/IEC 13818-7 及 ISO/IEC 14496-3 定义)作为 MP3 的后续演进标准,采用纯粹的 1024 点 MDCT 变换、模块化的工具箱(TNS、PNS、SBR、PS),广泛应用于流媒体(HLS/DASH/RTMP)、广播与移动设备。
AAC 的编码效果与 Profile、编码器实现、码率和音源有关。下面整理常见编码工具与流格式,方便理解编码器配置和播放器的兼容要求。
1. AAC 编码工具箱 (Toolbox)
AAC 是一套模块化的感知音频编码工具集合,编码器根据目标码率与计算复杂度进行工具选择:
graph TD
PCM[PCM 音频输入] --> FB[时频滤波器组 / 加窗 MDCT 变换]
PCM --> Psycho[心理声学模型 SMR 分析]
FB --> TNS[TNS 时域噪声整形]
TNS --> Stereo[联合立体声: M/S 与 强度立体声 IS]
Stereo --> PNS[PNS 感知噪声替换]
Psycho --> Quant[非线性量化与比例因子调整]
PNS --> Quant
Quant --> Huffman[无损熵编码 / 哈夫曼编码]
Huffman --> Bitstream[ADTS / LATM / MP4 封装流]
1.1 TNS (Temporal Noise Shaping, 时域噪声整形)
- 解决问题:瞬态信号(如打击乐、辅音齿音)在频域粗量化后,时域量化噪声会扩散到整个变换块,引发预回声(Pre-echo)失真;
- 机制:TNS 在频域谱线上应用线性预测(LPC),将量化噪声在时域上塑形,压制在强信号出现的时间区间内,利用人耳的时域掩蔽效应降低可闻失真。
1.2 PNS (Perceptual Noise Substitution, 感知噪声替换)
- 机制:对于高频类噪声成分(如风声、摩擦声),人耳对具体波形细节不敏感,主要感知其总能量。PNS 不传输具体的频谱谱线,仅传输该频段的总能量系数,解码端通过噪声发生器重构,降低高频编码比特消耗。
1.3 SBR (Spectral Band Replication, 频带复制) —— HE-AAC v1 核心
- 基本思想:高频泛音与低频基音存在较强的谐波相关性;
- 编码处理:核心编码器对低频部分(如 0 ~ 12 kHz)执行常规 AAC-LC 编码,高频部分(12 ~ 24 kHz)主要传输能量包络等边信息(Side Information);
- 解码还原:解码端通过 QMF 滤波器组将低频频谱搬移至高频区,并根据包络参数调整能量,重构完整的高频信号。
1.4 PS (Parametric Stereo, 参数立体声) —— HE-AAC v2 核心
- 低码率优化(<32 kbps):将立体声左右声道混合为单声道进行 AAC 编码,同时提取声道间时间差(IPD/OPD)、声级差(IID)和相干度(ICC)等空间参数;
- 解码还原:解码端在单声道基础上,依据空间参数矩阵重构双声道立体声。
2. 常见 Profile 对比
| Profile 规格 | 核心组合技术 | 推荐码率区间 | 典型应用场景 |
|---|---|---|---|
| AAC-LC (Low Complexity) | 纯 MDCT + TNS + PNS | 64 ~ 192 kbps | 音乐流媒体、视频伴音、广播 |
| HE-AAC v1 (AAC+) | AAC-LC + SBR | 32 ~ 64 kbps | 移动网络广播、弱网低码率音频 |
| HE-AAC v2 (eAAC+) | AAC-LC + SBR + PS | 16 ~ 32 kbps | 极低带宽语音广播、窄带通信 |
3. ADTS 与 ADIF 流格式对比
AAC 比特流在传输或存储时,主要有两种组织格式:
3.1 ADIF (Audio Data Interchange Format)
- 仅在整个文件开头包含一个全局头,后续全部为音频帧载荷;
- 特点:头部丢失即无法解码,且不支持从流中间任意位置开始播放,仅适用于本地确定性存储。
3.2 ADTS (Audio Data Transport Stream) —— 流媒体标准
- 每个音频帧前都携带独立的 7 字节(无 CRC)或 9 字节(有 CRC)ADTS 头部:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Syncword (12b: 0xFFF) |ID |L|P| Profile | Freq |P|Ch |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ch |O|H|C|C| Frame Length (13-bit) |Buffer Fullness|R|C|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- 同步字(Syncword):12-bit 全 1 (
0xFFF),用于在网络流中定位帧起始; - Frame Length(13-bit):包含 ADTS 头加数据载荷的总字节长度,便于流式切帧。
4. 向下兼容机制:Fill Element 容器
在 HE-AAC 中,SBR 和 PS 的扩展数据可以放在 AAC 的 Fill Element(填充单元) 中。
[ ADTS Frame ] ──> [ AAC-LC 核心低频数据 ] + [ Fill Element (内含 SBR / PS 扩展数据) ]
│ │
├── 传统老旧解码器 ──────────────┴──> 忽略 Fill Element,仅解码播放低频 (不报错)
└── HE-AAC 解码器 ─────────────────> 提取 SBR/PS 重建高频与立体声
支持忽略这类扩展的 AAC-LC 解码器可以只解码核心数据,得到基础采样率的输出。具体文件能否播放,还取决于播放器对容器、Profile 信令和采样率的支持。
5. 总结
配置 AAC 时需要同时确认 Profile 和封装方式。AAC-LC、HE-AAC v1 和 v2 使用的工具不同,MP4 中的 AAC 与 ADTS 流也有不同的帧组织方式。兼容性应在目标播放器上验证,不能只看文件扩展名。