1、H264碼流解析
00 00 00 01是Start code後面的ox67為 0110 0111
forbidden_zero_bit 是禁止位,應該是第一位即f(1)=0,1為語法有錯誤
nal_ref_idc是參考級別,代表被其它幀參考情況,u(2)= 11 = 3最(0為無參考,詳見規范)
nal_unit_type是該幀的類型,為剩下的5位,u(5)= 0 0111 = 7
目前類型有:
//H264定義的類型 values for nal_unit_type
typedef enum {
NALU_TYPE_SLICE = 1,
NALU_TYPE_DPA = 2,
NALU_TYPE_DPB = 3,
NALU_TYPE_DPC = 4,
NALU_TYPE_IDR = 5,
NALU_TYPE_SEI = 6,
NALU_TYPE_SPS = 7,
NALU_TYPE_PPS = 8,
NALU_TYPE_AUD = 9,
NALU_TYPE_EOSEQ = 10,
NALU_TYPE_EOSTREAM = 11,
NALU_TYPE_FILL = 12,
#if (MVC_EXTENSION_ENABLE)
NALU_TYPE_PREFIX = 14,
NALU_TYPE_SUB_SPS = 15,
NALU_TYPE_SLC_EXT = 20,
NALU_TYPE_VDRD = 24 // View and Dependency Representation Delimiter NAL Unit
#endif
} NaluType;
可以看出是NALU_TYPE_SPS 即sequence parameter sets
profile_idc的u(8)則是後面的64轉化為十進制則是100,
66 Baseline
77 Main
88 Extended
100 High (FRExt)
110 High 10 (FRExt)
122 High 4:2:2 (FRExt)
144 High 4:4:4 (FRExt)
100是High (FRExt)
「level_idc則是0D是13,seq_parameter_set_id的ue(v),則指到AC了,這是哥倫布編碼,答案是0,這個是怎麼算出來的?「
就不太懂了。互相幫忙吧。
2、h264的pps包含了什麼信息
H264的PPS段,主要描述了H264編碼的活動序列參數。下圖是PPS的結構
seq_parameter_set_id是指活動的序列參數集。變數seq_parameter_set_id的值應該在0到31的范圍內(包括0和31)。
entropy_coding_mode_flag 用於選取語法元素的熵編碼方式,在語法表中由兩個標識符代表,具體如下:如果entropy_coding_mode_flag 等於0,那麼採用語法表中左邊的描述符所指定的方法。
pic_order_present_flag等於1 表示與圖像順序數有關的語法元素將出現於條帶頭中,pic_order_present_flag 等於0表示條帶頭中不會出現與圖像順序數有關的語法元素。
num_slice_groups_minus1加1表示一個圖像中的條帶組數。當num_slice_groups_minus1 等於0時,圖像中所有的條帶屬於同一個條帶組。
num_ref_idx_l0_active_minus1表示參考圖像列表0 的最大參考索引號,該索引號將用來在一幅圖像中num_ref_idx_active_override_flag 等於0 的條帶使用列表0 預測時,解碼該圖像的這些條帶。當MbaffFrameFlag等於1時,num_ref_idx_l0_active_minus1 是幀宏塊解碼的最大索引號值,而2 *num_ref_idx_l0_active_minus1 + 1是場宏塊解碼的最大索引號值。num_ref_idx_l0_active_minus1 的值應該在0到31的范圍內(包括0和31)。
weighted_pred_flag等於0表示加權的預測不應用於P和SP條帶。weighted_pred_flag等於1表示在P和SP條帶中應使用加權的預測。
weighted_bipred_idc等於0表示B條帶應該採用默認的加權預測。weighted_bipred_idc等於1表示B條帶應該採用具體指明的加權預測。weighted_bipred_idc 等於2表示B 條帶應該採用隱含的加權預測。
weighted_bipred_idc 的值應該在0到2之間(包括0和2)。
pic_init_qp_minus26表示每個條帶的SliceQPY 初始值減26。當解碼非0值的slice_qp_delta 時,該初始值在條帶層被修正,並且在宏塊層解碼非0 值的mb_qp_delta 時進一步被修正。pic_init_qp_minus26 的值應該在-(26 + QpBdOffsetY ) 到 +25之間(包括邊界值)。
pic_init_qs_minus26表示在SP 或SI 條帶中的所有宏塊的SliceQSY 初始值減26。當解碼非0 值的slice_qs_delta 時,該初始值在條帶層被修正。pic_init_qs_minus26 的值應該在-26 到 +25之間(包括邊界值)。
chroma_qp_index_offset表示為在QPC 值的表格中尋找Cb色度分量而應加到參數QPY 和 QSY 上的偏移。chroma_qp_index_offset的值應在-12 到 +12范圍內(包括邊界值)。
deblocking_filter_control_present_flag等於1 表示控制去塊效應濾波器的特徵的一組語法元素將出現在條帶頭中。deblocking_filter_control_present_flag 等於0 表示控制去塊效應濾波器的特徵的一組語法元素不會出現在條帶頭中,並且它們的推定值將會生效。
constrained_intra_pred_flag等於0 表示幀內預測允許使用殘余數據,且使用幀內宏塊預測模式編碼的宏塊的預測可以使用幀間宏塊預測模式編碼的相鄰宏塊的解碼樣值。constrained_intra_pred_flag 等於1 表示受限制的幀內預測,在這種情況下,使用幀內宏塊預測模式編碼的宏塊的預測僅使用殘余數據和來自I或SI宏塊類型的解碼樣值。
rendant_pic_cnt_present_flag等於0 表示rendant_pic_cnt 語法元素不會在條帶頭、圖像參數集中指明(直接或與相應的數據分割塊A關聯)的數據分割塊B和數據分割塊C中出現。rendant_pic_cnt_present_flag等於1表示rendant_pic_cnt 語法元素將出現在條帶頭、圖像參數集中指明(直接或與相應的數據分割塊A關聯)的數據分割塊B和數據分割塊C中。
3、h264-baseline和maun和high都有什麼區別
使用最新版ffmpeg-0.11 libx264-125,使用默認編碼時,用Eyecard發現profile-idc一直是PROFILE_H264_HIGH (profile-idc=100),但是項目要求是baseline,設置了AVCodecContext的->profile=FF_PROFILE_H264_BASELINE也沒用,經過多方查找,需要如下解決方法:AVDictionary *opts = NULL;av_dict_set(&opts, "profile", "baseline", 0);
/* open the codec */ if (avcodec_open2(m_pEncoderCtx, encoder, &opts) < 0) 真是曲折。
4、H264碼流解析
0
5、H264 Profile_idc level_idc 其中idc代表什麼?
l