2011年5月5日 星期四

mpeg4-generic parsing for AAC over RFC3640

轉貼文章


Preface



Reference
  • RFC3640
  • ISO/IEC 14496-3
  • ISO/IEC 13818-7, MPEG-2 Advanced Coding (AAC)
AU-header structure


AAC frame in AU-header


!!NOTES:
1) DVB-H supports High bit-rate AAC while streaming
2) The AU-headers are configured using MIME format parameters
may be empty. Don’t know how to know it according to SDP description??
(if anyone knows the answer, please let me know..:P)

3) If AAC frames are carried over RFC3640, ADTS header is needed for each AAC frame
for AAC decoder using the following info.

AAC ADTS 檔頭分析

adts_fixed_header()

{
syncword; 12 bits

ID; 1 bit

layer; 2 bits

protection_absent; 1 bit

profile; 2 bits

sampling_frequency_index; 4 bits

private_bit; 1 bit

channel_configuration; 3 bits

frame_length; 13 bits

adts_buffer_fullness; 11 bits

number_of_raw_data_blocks_in_frame; 2 bits

}

syncword 固定字串The bit string ‘1111 1111 1111’ -> 0xFFF,為一個ADTS檔頭的開始。

ID MPEG 標誌, 通常為1

layer Indicates which layer is used. Set to ‘00’

protection_absent 表示是否有錯誤碼校正機制,設1為是

profile 表示使用哪個等級的AAC,如01 Low Complexity(LC)--- AACLC

sampling_frequency_index sampling frequeny [Hz]

0x0 96000

0x1 88200

0x2 64000

0x3 48000

0x4 44100

0x5 32000

0x6 24000

0x7 22050

0x8 16000

0x9 2000

0xa 11025

0xb 8000

0xc reserved

0xd reserved

0xe reserved

0xf reserved

channel_configuration channel數量

frame_length 代表一個AAC Frame的長度包括ADTS檔頭和raw data block.

adts_buffer_fullness 固定值為0x7FF 說明frame rate是可變動的

number_of_raw_data_blocks_in_frame

表示AAC Frame中有number_of_raw_data_blocks_in_frame + 個AAC raw data.

所以說number_of_raw_data_blocks_in_frame == 0 表示說AAC Frame中有一個AAC raw block並不是沒有。