编码规格
AAC LC:Low Complexity。低复杂度规格,码流是 128k,音质好。主要应用于中高编码率的场景编码(>= 80Kbit/s)。
AAC HE V1:AAC LC + SBR(Spectral Band Replication)。其核心思想是按频谱保存,低频编码保存主要部分,高频单独放大编码保存音质。码流在 64k 左右。主要应用于低码率的编码(<= 48Kbit/s)
AAC HE V2:AAC LC + SBR + PS(Parametric Stereo)。其核心思想是双声道中的声音存在某种相似度,只需存储一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。
一般码流越大,其保真度越高。码流越小,压缩比高,去除的冗余信息就多,其就会对声音造成一定的损失。
编码格式
ADIF(Audio Data Interchange Format)
可以确定地找到这个音频数据的开始,相当于 AAC 数据加上数据头。只能从头开始解码,不能在音频数据流中间开始。应用于磁盘文件。
ADTS(Audio Data Transport Stream)
每一帧都有一个同步字,所以可以在音频流的任意位置开始解码。会比 ADIF 的数据大。应用于流媒体。
ADTS 结构
ADTS由7或9个字节组成,但其字段排列是按照位来排列。以下每段(即图的一行)是一个字节(8位),每个字母表示一位(0/1),每四位可用一个十六进制表示。
二进制表示:
1 | AAAAAAAA AAAABCCD EEFFFFGH HHIJKLMM MMMMMMMM MMMOOOOO OOOOOOPP (QQQQQQQQ QQQQQQQQ) |
Header consists of 7 or 9 bytes (without or with CRC).
Letter | Length (bits) | Description |
---|---|---|
A | 12 | syncword 0xFFF, all bits must be 1 同步字,表示这是个 ADTS 数据,都为1。 |
B | 1 | MPEG Version: 0 for MPEG-4, 1 for MPEG-2 使用的编码规范。 |
C | 2 | Layer: always 0 |
D | 1 | protection absent, Warning, set to 1 if there is no CRC and 0 if there is CRC 决定是7位还是9位。 |
E | 2 | profile, the MPEG-4 Audio Object Type minus 1 使用的编码规格↑。 |
F | 4 | MPEG-4 Sampling Frequency Index (15 is forbidden) 采样率 |
G | 1 | private bit, guaranteed never to be used by MPEG, set to 0 when encoding, ignore when decoding |
H | 3 | MPEG-4 Channel Configuration (in the case of 0, the channel configuration is sent via an inband PCE) |
I | 1 | originality, set to 0 when encoding, ignore when decoding |
J | 1 | home, set to 0 when encoding, ignore when decoding |
K | 1 | copyrighted id bit, the next bit of a centrally registered copyright identifier, set to 0 when encoding, ignore when decoding |
L | 1 | copyright id start, signals that this frame's copyright id bit is the first bit of the copyright id, set to 0 when encoding, ignore when decoding |
M | 13 | frame length, this value must include 7 or 9 bytes of header length: FrameLength = (ProtectionAbsent == 1 ? 7 : 9) + size(AACFrame) |
O | 11 | Buffer fullness |
P | 2 | Number of AAC frames (RDBs) in ADTS frame minus 1, for maximum compatibility always use 1 AAC frame per ADTS frame |
Q | 16 | CRC if protection absent is 0 |
这些值一般不是具体的数值,而是一个约定的编号,根据编号获得其对应具体数值。
可以根据该工具,输入对应的 ADTS 头,就可以解析出具体的含义。
可见,找到一个同步字0xFFF
即找到一个ADTS的开头。