嵌入式音视频开发——AAC编码
1、AAC编码概述
在嵌入式音视频开发中,AAC(Advanced Audio Coding)是一种高效的数字音频编码格式,广泛应用于移动设备、智能硬件等资源受限环境中。它基于感知音频编码原理,能在保持较高音质的同时实现高压缩比(例如,压缩率高达 20:1)。AAC 是 MPEG-4 标准的一部分,旨在替代 MP3,提供更好的音质和效率。
2、为什么需要进行AAC音频压缩处理
音频压缩是数字音频处理中的关键技术,而AAC(Advanced Audio Coding)作为一种高效的高级音频编码格式,被广泛应用于音乐流媒体、视频文件(如MP4)、广播和移动通信等领域。以下是需要AAC音频压缩处理的主要原因。
1. 减少存储空间需求
- 原始未压缩的音频数据(如PCM格式)体积巨大。例如,CD音质的音频(采样率44.1kHz、位深度16位、立体声)每秒产生约1.4MB的数据。对于一个5分钟的歌曲,原始大小可能超过400MB。
- AAC压缩通过移除冗余信息(如人耳不敏感的频段),显著减小文件大小。压缩率通常可达10:1或更高,即: 压缩率 = 原始文件大小 : 压缩后文件大小。 例如,原始文件为400MB,压缩后可能仅40MB,节省大量存储空间,便于在移动设备或云端存储更多内容。
2. 节省传输带宽和提高效率
- 在网络传输中,带宽是有限资源。未压缩音频需要高带宽才能流畅传输,这在流媒体服务(如Spotify或YouTube)中会导致缓冲和延迟。
- AAC压缩后,音频数据量大幅降低。例如,在128kbps比特率下,AAC能提供接近CD音质,而原始数据可能需1411kbps。这减少网络负载,确保实时播放流畅。
- 数学上,比特率与文件大小的关系可表示为:
文件大小 (字节) = (比特率 (比特每秒(bps)) × 时间 (秒)) / 8
文件大小 (MB) ≈ (比特率 (kbps) × 时间 (秒)) / (8 × 1000) // 更常用的简化公式
比特率越高,文件越大(时间固定);时间越长,文件越大(比特率固定)。通过降低比特率(如从1411kbps到128kbps),文件大小减小,传输更快更高效。
3. 保持高音质的同时优化资源
- AAC采用先进的感知编码技术,基于人耳听觉模型(如掩蔽效应),智能地去除不重要的音频成分(如高频弱音),而保留关键音质元素。这比早期格式(如MP3)更高效,在相同比特率下音质更优。例如,AAC支持多声道(如5.1环绕声),适用于高清视频和游戏音频,压缩后仍能提供沉浸式体验。
- 压缩过程涉及信号处理,如频域变换(如使用MDCT),AAC通过量化这些系数实现高效压缩。
3、AAC的特点以及优势
3.1.高压缩率:AAC的压缩率高达1:20,远远高于MP3的1:10。换言之,在相同时间内录制AAC的文件大小远远低于MP3的大小。
3.2.更高的音频品质:AAC的优势不仅在于压缩大小上,还在于它的音频还原程度更高,音质相比于其他压缩格式更加优秀。
3.3.更高的解码效率:解码播放器在解码含有AAC的音频编码的时候,它所占用的资源会更加的少,解码时CPU使用率更低。
4、AAC技术规格
AAC根据压缩效率和适用场景分为三种主流规格:
- LC-AAC(低复杂度)
- 技术特点:基于传统AAC编码,复杂度较低,适用于中高比特率(≥80 kbps)场景。
- 应用场景:音乐流媒体(如Apple Music)、高清音频存储
- HE-AAC(高效型,v1)
- 技术特点:结合SBR(Spectral Band Replication,频带复制)技术,仅编码低频信号,通过参数指导重建高频,压缩效率提升30%。适用于中低比特率(≤80 kbps)。
- 应用场景:网络广播、移动通信(如DAB+数字广播)
- HE-AAC v2
- 技术特点:在SBR基础上加入PS(Parametric Stereo,参量立体声),将立体声信息参数化,进一步降低码率(≤48 kbps)。
- 应用场景:低带宽环境(如移动端短视频、语音通话)
5、AAC文件格式表现形式
AAC音频数据通过两种封装格式存储或传输:
- ADIF(Audio Data Interchange Format)
- 特点:仅有一个全局文件头,数据连续存储,不支持流式解码。
- 适用场景:本地文件存储(如.m4a音频文件)
- ADTS(Audio Data Transport Stream)
- 特点:每一帧添加7-9字节头信息(含同步字、采样率、声道数等),支持流式传输和支持在任意帧进行解码。
- 结构示例:
- 固定头:同步字(0xFFF)、规格标识(LC/HE)、采样率索引(如44.1kHz)、声道数。
- 可变头:帧长度、码率控制信息(如0x7FF表示可变码率)
| 特性 | ADIF | ADTS |
|---|---|---|
| 文件头 | 仅有一个统一的文件头 | 每帧都有一个同步字和头信息 |
| 解码方式 | 必须从文件头开始解码 | 可以在任意帧处解码 |
| 适用场景 | 磁盘存储 | 网络传输 |
| 数据结构 | 单一文件头 + 压缩音频数据 | 多帧结构,每帧包含同步字、头信息和数据 |
ADIF与ADTS的对比
5.1 ADIF的数据结构

ADIF Header结构表
|
字段名 |
位宽(bits) |
数据类型 |
说明 |
|---|---|---|---|
|
syncword |
32 |
字符串 |
固定为 |
|
version |
1 |
bool |
|
|
bitstream_type |
1 | bool |
|
|
bitrate |
23 |
int |
仅CBR有效,表示全局固定比特率(单位:bps) |
|
num_channels |
4 | int |
声道数量(如 |
|
sample_rate_index |
4 |
枚举 |
采样率索引值(需查表转换,如 |
|
copyright_id |
1 | bool |
|
|
copyright_start |
1 | bool |
版权信息起始标识(仅当 |
|
metadata |
可变 |
自定义 |
扩展元数据(如版权文本),长度由前序字段决定 |
5.2 ADTS的数据结构

根据上图,一个ADTS帧由ADTS Header(头部信息)和AAC ES(裸流数据)两部分组成。
ADTS(Audio Data Transport Stream)头由固定头(adts_fixed_header)和可变头(adts_variable_header)组成,其结构及字段定义如下表:
ADTS Header结构表格
|
字段名 |
位宽(bits) |
所属部分 |
说明 |
|---|---|---|---|
|
syncword |
12 |
|
同步标识,固定为 |
|
id |
1 |
|
MPEG标识符: |
|
layer |
2 |
|
固定为 |
|
protection_absent |
1 |
|
CRC校验标识: |
|
profile |
2 |
|
AAC级别标识: |
|
sampling_frequency_index |
4 |
|
采样率索引值(需查表转换,例如 |
|
private_bit |
1 |
|
私有位,编码时固定为 |
|
channel_configuration |
3 |
|
声道配置: |
|
original_copy |
1 |
|
固定为 |
|
home |
1 |
|
固定为 |
|
copyright_identification_bit |
1 |
|
固定为 |
|
copyright_identification_start |
1 |
|
固定为 |
|
aac_frame_length |
13 |
|
ADTS帧总长度(含头和原始数据),计算公式: |
|
adts_buffer_fullness |
11 |
|
缓冲区充满度: |
|
number_of_raw_data_blocks |
2 |
|
帧内AAC原始数据块数量: |
关键特性:
-
头长度可变:由
protection_absent决定(7字节或9字节) -
同步机制:
syncword帮助解码器快速定位帧起始位置,支持流式传输 -
适用场景:ADTS格式因每帧自带头部,适用于直播、实时传输(如TS流);而ADIF格式仅有一个全局头,适合本地文件存储
更多推荐
所有评论(0)