1. ADTS(Audio Data Transport Stream)頭之于AAC
AAC音頻文件的每一幀都由一個ADTS頭和AAC ES(AAC音頻數(shù)據(jù))組成。

AAC數(shù)據(jù)幀
2. ADTS頭分析
ADTS頭包含了AAC文件的采樣率、通道數(shù)、幀數(shù)據(jù)長度等信息。ADTS頭分為固定頭信息和可變頭信息兩個部分,固定頭信息在每個幀中的是一樣的,可變頭信息在各個幀中并不是固定值。ADTS頭一般是7個字節(jié)((28+28)/ 8)長度,如果需要對數(shù)據(jù)進(jìn)行CRC校驗(yàn),則會有2個Byte的校驗(yàn)碼,所以ADTS頭的實(shí)際長度是7個字節(jié)或9個字節(jié)。
2.1 固定頭信息:adts_fixed_header()
ADTS頭的固定頭信息在每個幀中都是一樣的。

adts_fixed_header
- syncword:幀同步標(biāo)識一個幀的開始,固定為0xFFF
- ID:MPEG 標(biāo)示符。0表示MPEG-4,1表示MPEG-2
- layer:固定為'00'
- protection_absent:標(biāo)識是否進(jìn)行誤碼校驗(yàn)。0表示有CRC校驗(yàn),1表示沒有CRC校驗(yàn)
- profile:標(biāo)識使用哪個級別的AAC。1: AAC Main 2:AAC LC (Low Complexity) 3:AAC SSR (Scalable Sample Rate) 4:AAC LTP (Long Term Prediction)
- sampling_frequency_index:標(biāo)識使用的采樣率的下標(biāo)
- private_bit:私有位,編碼時設(shè)置為0,解碼時忽略
- channel_configuration:標(biāo)識聲道數(shù)
- original_copy:編碼時設(shè)置為0,解碼時忽略
- home:編碼時設(shè)置為0,解碼時忽略

sampling_frequency_index

channel_configuration
2.2 可變頭信息:adts_variable_header()

adts_variable_header.png
- copyrighted_id_bit:編碼時設(shè)置為0,解碼時忽略
- copyrighted_id_start:編碼時設(shè)置為0,解碼時忽略
- aac_frame_length:ADTS幀長度包括ADTS長度和AAC聲音數(shù)據(jù)長度的和。即 aac_frame_length = (protection_absent == 0 ? 9 : 7) + audio_data_length
- adts_buffer_fullness:固定為0x7FF。表示是碼率可變的碼流
- number_of_raw_data_blocks_in_frame:表示當(dāng)前幀有number_of_raw_data_blocks_in_frame + 1 個原始幀(一個AAC原始幀包含一段時間內(nèi)1024個采樣及相關(guān)數(shù)據(jù))。