1. ADTS(Audio Data Transport Stream)頭之于AAC
AAC音頻文件的每一幀都由一個(gè)ADTS頭和AAC ES(AAC音頻數(shù)據(jù))組成。
AAC數(shù)據(jù)幀
2. ADTS頭分析
ADTS頭包含了AAC文件的采樣率、通道數(shù)、幀數(shù)據(jù)長度等信息。ADTS頭分為固定頭信息和可變頭信息兩個(gè)部分,固定頭信息在每個(gè)幀中的是一樣的,可變頭信息在各個(gè)幀中并不是固定值。ADTS頭一般是7個(gè)字節(jié)((28+28)/ 8)長度,如果需要對(duì)數(shù)據(jù)進(jìn)行CRC校驗(yàn),則會(huì)有2個(gè)Byte的校驗(yàn)碼,所以ADTS頭的實(shí)際長度是7個(gè)字節(jié)或9個(gè)字節(jié)。
2.1 固定頭信息:adts_fixed_header()
ADTS頭的固定頭信息在每個(gè)幀中都是一樣的。
adts_fixed_header
- syncword:幀同步標(biāo)識(shí)一個(gè)幀的開始,固定為0xFFF
- ID:MPEG 標(biāo)示符。0表示MPEG-4,1表示MPEG-2
- layer:固定為'00'
- protection_absent:標(biāo)識(shí)是否進(jìn)行誤碼校驗(yàn)。0表示有CRC校驗(yàn),1表示沒有CRC校驗(yàn)
- profile:標(biāo)識(shí)使用哪個(gè)級(jí)別的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)識(shí)使用的采樣率的下標(biāo)
- private_bit:私有位,編碼時(shí)設(shè)置為0,解碼時(shí)忽略
- channel_configuration:標(biāo)識(shí)聲道數(shù)
- original_copy:編碼時(shí)設(shè)置為0,解碼時(shí)忽略
- home:編碼時(shí)設(shè)置為0,解碼時(shí)忽略
sampling_frequency_index
channel_configuration
2.2 可變頭信息:adts_variable_header()
adts_variable_header.png
- copyrighted_id_bit:編碼時(shí)設(shè)置為0,解碼時(shí)忽略
- copyrighted_id_start:編碼時(shí)設(shè)置為0,解碼時(shí)忽略
- 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 個(gè)原始幀(一個(gè)AAC原始幀包含一段時(shí)間內(nèi)1024個(gè)采樣及相關(guān)數(shù)據(jù))。