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根据压缩效率和适用场景分为三种主流规格:

  1. ​​LC-AAC(低复杂度)​​
    • ​​技术特点​​:基于传统AAC编码,复杂度较低,适用于中高比特率(≥80 kbps)场景。
    • ​​应用场景​​:音乐流媒体(如Apple Music)、高清音频存储
  2. ​​HE-AAC(高效型,v1)​​
    • ​​技术特点​​:结合SBR(Spectral Band Replication,频带复制)技术,仅编码低频信号,通过参数指导重建高频,压缩效率提升30%。适用于中低比特率(≤80 kbps)。
    • ​​应用场景​​:网络广播、移动通信(如DAB+数字广播)
  3. ​​HE-AAC v2​​
    • ​​技术特点​​:在SBR基础上加入PS(Parametric Stereo,参量立体声),将立体声信息参数化,进一步降低码率(≤48 kbps)。
    • ​​应用场景​​:低带宽环境(如移动端短视频、语音通话)

5、​​AAC文件格式表现形式​​

AAC音频数据通过两种封装格式存储或传输:

  1. ​​ADIF(Audio Data Interchange Format)​​
    • ​​特点​​:仅有一个全局文件头,数据连续存储,不支持流式解码。
    • ​​适用场景​​:本地文件存储(如.m4a音频文件)
  2. ​​ADTS(Audio Data Transport Stream)​​
    • ​​特点​​:每一帧添加7-9字节头信息(含同步字、采样率、声道数等),支持流式传输和支持在任意帧进行解码。
    • ​​结构示例​​:
      • ​​固定头​​:同步字(0xFFF)、规格标识(LC/HE)、采样率索引(如44.1kHz)、声道数。
      • ​​可变头​​:帧长度、码率控制信息(如0x7FF表示可变码率)
特性ADIFADTS
文件头仅有一个统一的文件头每帧都有一个同步字和头信息
解码方式必须从文件头开始解码可以在任意帧处解码
适用场景磁盘存储网络传输
数据结构单一文件头 + 压缩音频数据多帧结构,每帧包含同步字、头信息和数据

ADIF与ADTS的对比

5.1 ADIF的数据结构

ADIF Header结构表

​​字段名​​

​​位宽(bits)​​

​​数据类型​​

​​说明​​

​​syncword​​

32

字符串

固定为 0x41444946(ASCII "ADIF"),标识ADIF格式起始

​​version​​

1

bool

0表示ADIF版本1,1表示版本2

​​bitstream_type​​

1

bool

0表示固定比特率(CBR),1表示可变比特率(VBR)

​​bitrate​​

23

int

仅CBR有效,表示全局固定比特率(单位:bps)

​​num_channels​​

4

int

声道数量(如2表示立体声)

​​sample_rate_index​​

4

枚举

采样率索引值(需查表转换,如3对应48kHz)

​​copyright_id​​

1

bool

1表示存在版权信息字段,0表示无

​​copyright_start​​

1

bool

版权信息起始标识(仅当copyright_id=1时有效)

​​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

adts_fixed_header

同步标识,固定为 0xFFF,标志ADTS帧的开始

​​id​​

1

adts_fixed_header

MPEG标识符:0表示MPEG-4,1表示MPEG-2

​​layer​​

2

adts_fixed_header

固定为 00

​​protection_absent​​

1

adts_fixed_header

CRC校验标识:0表示有2字节CRC校验(头总长9字节),1表示无校验(头总长7字节)

​​profile​​

2

adts_fixed_header

AAC级别标识:
0:AAC Main
1:AAC LC(低复杂度,最常用)
2:AAC SSR
3:AAC LTP

​​sampling_frequency_index​​

4

adts_fixed_header

采样率索引值(需查表转换,例如3对应48kHz)

​​private_bit​​

1

adts_fixed_header

私有位,编码时固定为 0,解码忽略

​​channel_configuration​​

3

adts_fixed_header

声道配置:
1:单声道
2:双声道
3-7:多声道(最高8声道)

​​original_copy​​

1

adts_fixed_header

固定为 0,解码忽略

​​home​​

1

adts_fixed_header

固定为 0,解码忽略

​​copyright_identification_bit​​

1

adts_variable_header

固定为 0,解码忽略

​​copyright_identification_start​​

1

adts_variable_header

固定为 0,解码忽略

​​aac_frame_length​​

13

adts_variable_header

ADTS帧总长度(含头和原始数据),计算公式:长度 = (protection_absent ? 7 : 9) + AAC原始数据长度

​​adts_buffer_fullness​​

11

adts_variable_header

缓冲区充满度:0x7FF表示可变码流(VBR),固定码流(CBR)需动态设置

​​number_of_raw_data_blocks​​

2

adts_variable_header

帧内AAC原始数据块数量:N表示实际块数为 N+1(0表示仅1个块)

关键特性​​:

  • ​​头长度可变​​:由 protection_absent决定(7字节或9字节)

  • ​​同步机制​​:syncword帮助解码器快速定位帧起始位置,支持流式传输

  • ​​适用场景​​:ADTS格式因每帧自带头部,适用于直播、实时传输(如TS流);而ADIF格式仅有一个全局头,适合本地文件存储

Logo

邀请您加入社区

更多推荐