1.AAC
AAC是高级音频编码(Adavance Audio Coding)的缩写.1997年基于MPEG-2音频编码,目的取代MP3格式。2000年,AAC集成SBR、PS技术
2.主要三种编码规格
名称 | 技术 | 码率 |
LC-AAC | 传统AAC | 高码率>=80Kbps |
HE-AAC | AAC+SBR | 中码率<=80Kbps |
HE_AACv2 | AAC+SBR+PS | 低码率<=48Kbps |
3.AAC文件格式
ADIF
Audio Data Interchange Format 音频数据交换格式。必须从音频开始处起播
ADTS:
Audio Data Transport Stream 音频数据传输流。可以从流任何位置起播,主要因为每帧有一个同步比特及头信息,方便网络流中直播实时解析。
AAC音频每一帧由ADTS Header和AAC Audio
ADTS Header
头包含音频的采样率、声道、帧大小。一般是7个字节。分为2个部分:
- adts_fixed_header();
- adts_variable_header();
adts_fixed_header 固定头
-
syncword :同步头 总是0xFFF, all bits must be 1,代表着⼀个ADTS帧的开 始
-
ID:MPEG标识符,0标识MPEG-4,1标识MPEG-2
-
Layer:always: '00'
-
protection_absent:表示是否误码校验。Warning, set to 1 if there is no CRC and 0 if there is CRC
-
profile:表示使⽤哪个级别的AAC,如01 Low Complexity(LC)--- AAC LC。有些芯⽚只⽀持AAC LC 。
-
sampling_frequency_index:表示使⽤的采样率下标,通过这个下标在 Sampling Frequencies[ ]数组中查找得知采样率的值。
-
channel_configuration: 表示声道数,⽐如2表示⽴体声双声道
adts_variable_header 可变头信息
frame_length : ⼀个ADTS帧的⻓度包括ADTS头和AAC原始流.
frame length, this value must include 7 or 9 bytes of header length:
aac_frame_length = (protection_absent == 1 ? 7 : 9) + size(AACFrame)
protection_absent=0时, header length=9bytes
protection_absent=1时, header length=7bytes
adts_buffer_fullness:0x7FF 说明是码率可变的码流。
number_of_raw_data_blocks_in_frame:表示ADTS帧中有
number_of_raw_data_blocks_in_frame + 1个AAC原始帧。
所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有⼀个 AAC数据块。
码流分析实例
码流分析
码流代码解析