文章

05.音频编码之AAC编码

05.音频编码之AAC编码

AAC

AAC 概述?

AAC:高级音频编码 (Advanced Audio Coding),基于 MPEG-2 的音频编码技术,目的是取代 MP3 格式。2000 年,MPEG-4 标准出现后,AAC 重新集成了其特性,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC。

由于 PCM 裸流过大,不便于储存与传输,于是就出现了针对于 PCM 裸流的压缩编码标准,包含 AAC,MP3,AC-3 等等(wiki audio file format);而 AAC 则是当前的主流。这里的 AAC 指的是一套编码标准(协议),而 faac 是一个开源的 AAC 编解码工具。

AAC 的音频文件格式

AAC 的音频文件格式有两种 ADIFADTS。这两种格式主要区别:ADIF 只有一个文件头,ADTS 每个包前面有一个文件头。

ADIF

Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。编码格式如下:

![image.png500](https://raw.githubusercontent.com/hacket/ObsidianOSS/master/obsidian/20240603103056.png)

在 MPEG-2 AAC 中 ADIF 语法规则如下:

![image.png500](https://raw.githubusercontent.com/hacket/ObsidianOSS/master/obsidian/20240603103216.png)

ADTS

Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。也就是说 ADTS 的每一帧都有一个 header 和 aac 音频数据,这可以在网络传输的时候进行实时解码。

下图为 ADTS 的组成部分以及在MPEG-2 AAC 的语法结构:

![image.png800](https://raw.githubusercontent.com/hacket/ObsidianOSS/master/obsidian/20240603103305.png)

下图为 ADTS 的组成部分以及在MPEG-4 AAC 的语法结构:

![image.png800](https://raw.githubusercontent.com/hacket/ObsidianOSS/master/obsidian/20240603103326.png)

注:ES:全称 elementary stream,这里意为编码后的音频数据。

faac 开源库

本文由作者按照 CC BY 4.0 进行授权