一、概述
AAC(Advanced Audio Coding),高级音频编码,给予MPEG-2的音频编码技术,于1997年诞生,主要用于取代MP3格式。2000年,MPEG-4标准的更新,AAC重新集成了其新的技术特性,称为MEPG-4 AAC。
二、码流类型
AAC是一种高压缩比的音频压缩算法。格式有两种:
- ADTS:Audio Data Transport Stream。音频数据传输流格式,每一帧都有头信息,可以在任意帧解码,适用于传输流(重点)。
- ADIF:Audio Data Interchage Format。音频数据交换格式,只有一个统一的头,必须得到所有数据后解码,适用于本地文件。
三、ADTS
该格式是由一个个ADTS frame组成;其中每个ADTS frame之间通过syncword进行分割,该同步字为0XFFF(二进制111111111111)。
3.1 信息头(ADTS Header)
头信息包含了AAC文件的采样率、通道数、真数据长度等基本信息。分为固定头信息(adts_fixed_header)和可变头信息(adts_variable_header)两个部分。
长度可能为7或9字节,差别在于CRC校验。
3.1.1 固定头信息(adts_fixed_header())
固定头的信息在每一帧中都是一样的。
- Syncword:12bit,一帧的开始,用于分界符。
- ID(MPEG version):1bit,0(MPEG-4),1(MPEG-2)。
- layer:2bit,总是00。
- protection_absent:1bit,是否有CRC检验字符,1表示没有,0表示有。
- profile:2bit,使用哪个级别的AAC。
- 1:AAC Main
- 2:AAC LC(低复杂度)
- 3:AAC SSR(可扩展采样)
- 4:AAC LTP(长期预测)
- sampling_frequency_index:4bit,标识使用的采样率的下标。
- 0:96000Hz,DVD、蓝光、高清等
- 1:88200Hz
- 2:64000Hz
- 3:48000Hz,电视、专业音频
- 4:44100Hz,音频CD用
- 5:32000Hz
- 6:24000Hz
- 7:22050Hz
- 8:16000Hz
- 9:12000Hz
- 10:11025Hz
- 11:8000Hz,电话用
- 12:7350Hz
- 13-14:保留
- 15:其他使用
- private_bit:1bit,私有位,默认为0。
- channel_configuration:3bit,声道数
- 0:在 AOT 特定配置中定义
- 1:1通道,前中
- 2:2通道,左前,右前
- 3:3通道,前中,左前,右前
- 4:4通道,前中,左前,右前,后中
- 5:5通道,前中,左前,右前,左后,右后
- 6:6通道,前中,左前,右前,左后,右后,LEF声道
- 7:8通道,前中,左前,右前,左侧,右侧,左后,右后,LEF声道
- 8-15:保留
- original_copy:1bit,默认为0。
- home:1bit,默认为0。
3.1.2 可变头信息(adts_variable_header())
- copyrighted_id_bit:1bit,默认为0。
- copyrighted_id_start:1bit,默认为0。
- aac_frame_length:13bit,一个ADTS帧的长度(ADTS头和AAC原始流)。用AAC原始流长度+7或者9。( 当proection_ansent = 0 则+9;proection_ansent = 1 则+7)。
- adts_buffer_fullness:11bit,0x7FF 说明是码率可变的码流;0x000代表是固定码率的码流。
- number_of_raw_data_blocks_in_frame:2bit,表示当前帧有number_of_raw_data_blocks_in_frame + 1 个原始帧(一个AAC原始帧包含一段时间内1024个采样及相关数据)。
- CRC:16bit,校验字段,可选。
3.2 音频数据(ACC ES)
根据其中的3bit的标识位id_syn_ele运行到不同的流处理:
- ID_SCE:0X0,single_channel_element(),单通道元素基本上只由一个ICS组成。一个原始数据块最可能由16个SCE组成(核心算法)。
- ID_CPE:0X1,channel_pair_element(),由两个可能共享边信息的ICS和一些联合立体声编码信息组成。一个原始数据块最多可能由16个SCE组成(核心算法)。
- ID_CCE:0X2,coupling_channel_element(),藕合通道元素。代表一个块的多通道联合立体声信息或者多语种程序的对话信息(核心算法)。
- ID_LFE:0X3,lfe_channel_element(),低频元素。包含了一个加强低采样频率的通道(核心算法)。
- ID_DSE:0X4,data_stream_element(),数据流元素,包含了一些并不属于音频的附加信息。
- ID_PCE:0X5,program_config_element(),程序配置元素。包含了声道的配置信息。它可能出现在ADIF 头部信息中。
- ID_FIL:0X6,fill_element(),填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。
- ID_END:0X7,END。
四、ADIF
相对简单,有信息头和信息体构成整个AAC数据:
4.1 信息头
- adif_id
- copyright_id_present
- copyrightid
- original_copy
- home
- bitstream_type
- num_program_config_elements
- adif_buffer_fullness
- program_config_element()