FLV、AAC、AVC封装格式分析
生活随笔
收集整理的這篇文章主要介紹了
FLV、AAC、AVC封装格式分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分析工具:FLVAnalyser、WinHex
/*============================================================================FLV格式分析 ------------------------------------------------------------------------------ FILE Header:固定9字節 ------------------------------------------------------------------------------ FLV header (9 bytes)Signature: FLV(3字節):文件標示Version: 1 (0x01)(1字節):版本Flags: 5 (0x05)(1字節):第六位標示音頻,第七位保留,第八位標示視頻Video: YesAudio: YesSize: 9 (0x00000009)(4字節) ------------------------------------------------------------------------------ FILE Body: ------------------------------------------------------------------------------ 由很多Tag組成,Tag = Tag Header(15字節) + Tag DataHeader(15 bytes)PreviousTagSize: Type : 8 (0x08)(1字節):標示Tag類型。8:音頻;9:視頻,18:字幕BodyLength : 418 (0x0001A2)(3字節):data大小Timestamp_Base : 26 (0x00001A)(3字節):時間戳Timestamp_Extended : 0 (0x00)(1字節):時間戳擴展字節StreamID : 0 (0x000000)(3字節):stream的ID,總是為0.================================================================================ */?
AAC格式:MediaInfo、WinHex
/*----------------------------------------------------------------------------------------------- ADIF:Audio Data Interchange Format 音頻數據交換格式。這種格式的特征是可以確定的找到這個音頻數據的開始,不需進行在音頻數據流中間開始的解碼,即它的解碼必須在明確定義的開始處進行。故這種格式常用在磁盤文件中。ADTS:Audio Data Transport Stream 音頻數據傳輸流。這種格式的特征是它是一個有同步字的比特流,解碼可以在這個流中任何位置開始。它的特征類似于mp3數據流格式。 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ADTS ------------------------------------------------------------------------------------------------- adts_frame - 0 (0x0) (378 bytes) 00000 adts_fixed_header (3 bytes) [28 bits] 00000 syncword: 4095 (0xFFF) - (12 bits) 00001 id: No - MPEG-4 00001 layer: 0 (0x0) - (2 bits) 00001 protection_absent: Yes 00002 profile_ObjectType: 1 (0x1) - (2 bits) - AAC LC 00002 sampling_frequency_index: 4 (0x4) - (4 bits) - 44100 (0xAC44) Hz 00002 private: No 00002 channel_configuration: 2 (0x2) - (3 bits) 00003 original: No :set to 0 when encoding, ignore when decoding 00003 home: No 00003 adts_variable_header (4 bytes) 00003 copyright_id: No 00003 copyright_id_start: No 00003 aac_frame_length: 378 (0x017A) - (13 bits) 00005 adts_buffer_fullness: 2047 (0x7FF) - (11 bits) - VBR 00006 num_raw_data_blocks: 0 (0x0) - (2 bits) 00007 raw_data_block (378 bytes) 00000 CPE - channel_pair_element (14 bytes) 00007 id_syn_ele: 1 (0x1) - (3 bits) - CPE - channel_pair_element 00003 FIL - fill_element (282 bytes) 0000E id_syn_ele: 6 (0x6) - (3 bits) - FIL - fill_element 00004 FIL - fill_element (373 bytes) 0011D id_syn_ele: 6 (0x6) - (3 bits) - FIL - fill_element 00005 END - End (372 bytes) 00179 id_syn_ele: 7 (0x7) - (3 bits) - END - End 00179 byte_alignment: 0 (0x0) - (2 bits)------------------------------------------------------------------------------------------------------- 序號 域 長度(bits) 說明 1 Syncword 12 all bits must be 12 MPEG version 1 0 for MPEG-4, 1 for MPEG-2 3 Layer 2 always 0 4 Protection Absent 1 et to 1 if there is no CRC and 0 if there is CRC5 Profile 2 the MPEG-4 Audio Object Type minus 1 6 MPEG-4 Sampling Frequency Index 4 MPEG-4 Sampling Frequency Index (15 is forbidden) 7 Private Stream 1 set to 0 when encoding, ignore when decoding 8 MPEG-4 Channel Configuration 3 MPEG-4 Channel Configuration (in the case of 0, the channel configuration is sent via an inband PCE)9 Originality 1 set to 0 when encoding, ignore when decoding 10 Home 1 set to 0 when encoding, ignore when decoding11 Copyrighted Stream 1 set to 0 when encoding, ignore when decoding 12 Copyrighted Start 1 set to 0 when encoding, ignore when decoding 13 Frame Length 13 this value must include 7 or 9 bytes of header length: FrameLength = (ProtectionAbsent == 1 ? 7 : 9) + size(AACFrame) 14 Buffer Fullness 11 buffer fullness 15 Number of AAC Frames 2 number of AAC frames (RDBs) in ADTS frame minus 1, for maximum compatibility always use 1 AAC frame per ADTS frame 16 CRC 16 CRC if protection absent is 0*-----------------------------------------------------------------------------------------------*/?
AVC格式:MediaInfo、WinHex?
?
/*----------------------------------------------------------------------------------------------------------------------- NALU:由RBSP打包生成,構成了NAL單元流,即H264碼流。 ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- IDR幀 slice ------------------------------------------------------------------------------------------------------------------------- slice_layer_without_partitioning (IDR) - 0 (0x0) - Frame 0 - slice_type I - frame_num 0 - pic_order_cnt_lsb 0 (9984 bytes) Header (5 bytes)zero_byte: 0 (0x00)start_code_prefix_one_3bytes: 1 (0x000001)nal_ref_idc: 3 (0x3) - (2 bits) :當前幀重要性【0-3】nal_unit_type: 5 (0x05) - (5 bits) :當前NAL類型:5:IDR;7:SPS;8:PPSslice_header (4 bytes)first_mb_in_slice: 0 (0x0) :當前slice中包含的第一個宏塊在整幀中的位置slice_type: 7 (0x07) - I :slice類型:I/P/B/SI/SPpic_parameter_set_id: 0 (0x0) :當前slice所依賴的pps的idframe_num: 0 (0x0) :幀號field_pic_flag :當前slice是否進行的是場編碼bottom_field_flag :當前slice是否在底場(bottom fieldidr_pic_id: 0 (0x0) :表示IDR幀的序號pic_order_cnt_lsb: 0 (0x00) :當前幀號的另一個種計量方式no_output_of_prior_pics_flag: Nolong_term_reference_flag: Noslice_qp_delta: -8 (0xFFFFFFF8) :slice所使用的初始qp值disable_deblocking_filter_idc: 0 (0x0) slice_alpha_c0_offset_div2: 0 (0x0)slice_beta_offset_div2: 0 (0x0)slice_data (9973 bytes)(ToDo): (Data)-------------------------------------------------------------------------------------------------------------------------- P幀 -------------------------------------------------------------------------------------------------------------------------- slice_layer_without_partitioning (non-IDR) - 6 (0x6) - Frame 1 - slice_type P - frame_num 1 - pic_order_cnt_lsb 6 (1958 bytes) Header (5 bytes)zero_byte: 0 (0x00)start_code_prefix_one_3bytes: 1 (0x000001)nal_ref_idc: 2 (0x2) - (2 bits)nal_unit_type: 1 (0x01) - (5 bits) slice_header (4 bytes)first_mb_in_slice: 0 (0x0)slice_type: 5 (0x5) - Ppic_parameter_set_id: 0 (0x0) :設置使用的圖像參數集編號frame_num: 1 (0x1)pic_order_cnt_lsb: 6 (0x06)num_ref_idx_active_override_flag (0 bytes)num_ref_idx_active_override_flag: Yesnum_ref_idx_l0_active_minus1: 0 (0x0)ref_pic_list_modification_flag_l0: Noluma_log2_weight_denom: 0 (0x0)chroma_log2_weight_denom: 0 (0x0)luma_weight_l0_flag: Nochroma_weight_l0_flag: Noadaptive_ref_pic_marking_mode_flag: Nocabac_init_idc: 0 (0x0)slice_qp_delta: -7 (0xFFFFFFF9)disable_deblocking_filter_idc: 0 (0x0)slice_alpha_c0_offset_div2: 0 (0x0)slice_beta_offset_div2: 0 (0x0)slice_data (1949 bytes)(ToDo): (Data)-------------------------------------------------------------------------------------------------------------------------- B幀 -------------------------------------------------------------------------------------------------------------------------- slice_layer_without_partitioning (non-IDR) - 2 (0x2) - Frame 2 - slice_type B - frame_num 2 - pic_order_cnt_lsb 2 (206 bytes) Header (5 bytes)zero_byte: 0 (0x00)start_code_prefix_one_3bytes: 1 (0x000001)nal_ref_idc: 2 (0x2) - (2 bits)nal_unit_type: 1 (0x01) - (5 bits) slice_header (4 bytes)first_mb_in_slice: 0 (0x0)slice_type: 6 (0x6) - Bpic_parameter_set_id: 0 (0x0)frame_num: 2 (0x2)pic_order_cnt_lsb: 2 (0x02)direct_spatial_mv_pred_flag: Yesnum_ref_idx_active_override_flag (0 bytes)num_ref_idx_active_override_flag: Yesnum_ref_idx_l0_active_minus1: 0 (0x0)num_ref_idx_l1_active_minus1: 0 (0x0)ref_pic_list_modification_flag_l0: Noref_pic_list_modification_flag_l1: Noadaptive_ref_pic_marking_mode_flag: Nocabac_init_idc: 0 (0x0)slice_qp_delta: -5 (0xFFFFFFFB)disable_deblocking_filter_idc: 0 (0x0)slice_alpha_c0_offset_div2: 0 (0x0)slice_beta_offset_div2: 0 (0x0)slice_data (196 bytes)(ToDo): (Data)-------------------------------------------------------------------------------------------------------------------------- SPS -------------------------------------------------------------------------------------------------------------------------- seq_parameter_set (37 bytes) seq_parameter_set (37 bytes))Header (5 bytes)zero_byte: 0 (0x00) : 當前的NAL單元為sps、pps或者一個訪問單元(access unit)的第一個NAL單元start_code_prefix_one_3bytes: 1 (0x000001) :固定存在的NAL單元起始碼,用來指示下面為一個NAL單元nal_ref_idc: 3 (0x3) - (2 bits) :當前NAL單元的重要性nal_unit_type: 7 (0x07) - (5 bits):NAL單元類型profile_idc: 77 (0x4D):主要用來規定編碼時是否采用某些特性,Baseline profile就規定了只能使用I、P slice進行編碼constraints (1 bytes)constraint_set0_flag: No : 強制使用Baseline profile進行編碼constraint_set1_flag: Yes:強制使用Main profile進行編碼constraint_set2_flag: No:強制使用Extended profile進行編碼constraint_set3_flag: Noconstraint_set4_flag: Noconstraint_set5_flag: Noreserved_zero_2bits: 0 (0x0) - (2 bits):兩個0bit的保留位level_idc: 31 (0x1F) - (8 bits):本視頻遵循的level,level主要規定了每秒最多能處理多少個宏塊,最大的幀大小,最大的解碼緩存,最大比特率等這些性能相關的東西,如果是硬解碼,則比較容易出現由于視頻level太高而不能解碼的情況。seq_parameter_set_id: 0 (0x0):本SPS的ID,這個ID主要是給PPS用的log2_max_frame_num_minus4: 0 (0x0)pic_order_cnt_type: 0 (0x0)log2_max_pic_order_cnt_lsb_minus4: 2 (0x2)max_num_ref_frames: 4 (0x4):參考幀最多能有多少個gaps_in_frame_num_value_allowed_flag: No:由于碼流在傳輸過程中可能出現丟包的情況,從而導致中間有幀缺失,如果制定了這個標記,則會在解碼時對幀丟失的情況進行調整,否則就當作意外丟失處理pic_width_in_mbs_minus1: 62 (0x03E):圖片寬度(宏塊為單位)-1pic_height_in_map_units_minus1: 25 (0x19) :圖片高度(宏塊為單位)-1frame_mbs_only_flag: Yes :是否只進行幀編碼direct_8x8_inference_flag: Yes :是否子宏塊(8x8塊)中的4個4x4塊共用一個4x4的co-locateframe_cropping_flag (1 bytes) :是否需要對解碼后的圖片進行修剪frame_cropping_flag: Yesframe_crop_left_offset: 0 (0x0)frame_crop_right_offset: 4 (0x4)frame_crop_top_offset: 0 (0x0)frame_crop_bottom_offset: 0 (0x0)vui_parameters_present_flag (21 bytes)vui_parameters_present_flag: Yes :是否需要對解碼后的圖片進行修剪aspect_ratio_info_present_flag (5 bytes)aspect_ratio_info_present_flag: Yesaspect_ratio_idc: 255 (0xFF) - (8 bits)sar_width: 3328 (0x0D00) - (16 bits)sar_height: 3325 (0x0CFD) - (16 bits)overscan_info_present_flag: Novideo_signal_type_present_flag (4 bytes)video_signal_type_present_flag: Yesvideo_format: 5 (0x5) - (3 bits) - video_full_range_flag: 0 (0x0) - (1 bits) - Limitedcolour_description_present_flag (3 bytes)colour_description_present_flag: Yescolour_primaries: 1 (0x01) - (8 bits) - BT.709transfer_characteristics: 1 (0x01) - (8 bits) - BT.709matrix_coefficients: 1 (0x01) - (8 bits) - BT.709chroma_loc_info_present_flag: Notiming_info_present_flag (8 bytes)timing_info_present_flag: Yesnum_units_in_tick: 1 (0x00000001) - (32 bits)time_scale: 48 (0x00000030) - (32 bits)fixed_frame_rate_flag: Nonal_hrd_parameters_present_flag: Novcl_hrd_parameters_present_flag: Nopic_struct_present_flag: Nobitstream_restriction_flag (3 bytes)bitstream_restriction_flag: Yesmotion_vectors_over_pic_boundaries_flag: Yesmax_bytes_per_pic_denom: 0 (0x0)max_bits_per_mb_denom: 0 (0x0)log2_max_mv_length_horizontal: 11 (0x0B)log2_max_mv_length_vertical: 11 (0x0B)max_num_reorder_frames: 2 (0x2)max_dec_frame_buffering: 4 (0x4)------------------------------------------------------------------------------------------------------------- PPS ------------------------------------------------------------------------------------------------------------- pic_parameter_set (8 bytes)Header (5 bytes)zero_byte: 0 (0x00)start_code_prefix_one_3bytes: 1 (0x000001)nal_ref_idc: 3 (0x3) - (2 bits)nal_unit_type: 8 (0x08) - (5 bits)pic_parameter_set_id: 0 (0x0) :當前PPS的ID,供slice RBSP使用seq_parameter_set_id: 0 (0x0) :當前PPS所屬的SPS的IDentropy_coding_mode_flag: Yes:為0時表明采用CAVLC編碼,為1時采用CABAC編碼bottom_field_pic_order_in_frame_present_flag: Nonum_slice_groups_minus1: 0 (0x0):進行圖像編碼時,分成幾個slice groupnum_ref_idx_l0_default_active_minus1: 2 (0x2)num_ref_idx_l1_default_active_minus1: 0 (0x0): 分別指示前向參考圖像以及后向參考圖像的個數weighted_pred_flag: Yes:用于指示P,SP slice是否進行亮度的加權預測weighted_bipred_idc: 2 (0x2) - (2 bits):用于指示B slice的加權預測,:0:否 1:顯式加權預測 2:隱式加權預測pic_init_qp_minus26: 0 (0x0):用于計算初始QPpic_init_qs_minus26: 0 (0x0):用于計算SP,SI幀的初始QPchroma_qp_index_offset: 0 (0x0):色度宏塊Cb與亮度宏塊Y的QP差值deblocking_filter_control_present_flag: Yes :是否進行deblockingconstrained_intra_pred_flag: Noredundant_pic_cnt_present_flag: No :如果當前視頻中冗余圖像的話(SI,SP),那么這個flag應該為1 ----------------------------------------------------------------------------------------------------------------------------*/?
總結
以上是生活随笔為你收集整理的FLV、AAC、AVC封装格式分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 啊实打实阿松大
- 下一篇: oracle命令历史,查看命令历史记录及