精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。
要掌握H264,需要记好标准里描述的属性,SPS和PPS就是常用的属性,这些属性在数据包里的位置,怎么根据位置来截取,得到后怎么使用,都很重要。
使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么这两项从哪里获取呢?答案是从H264码流中获取.在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的,找到开始码之后,使用开始码之后的第一个字节的低5位判断是否为7(sps)或者8(pps), 及data[4] & 0x1f == 7 || data[4] & 0x1f == 8.然后对获取的nal去掉开始码之后进行base64编码,得到的信息就可以用于sdp.sps和pps需要用逗号分隔开来
1.1 基线profile(Baseline profile)
遵循基线profile的码流应该遵循以下的约束:
a) 只有I和P切片存在
b) NAL单元流不应该有范围在2到4的nal_unit_type值,包括2和4.
c) 序列参数集(sps)的frame_mbs_only_fag(之后介绍)应该等于1
d) 图象参数值(psp)的weighted_pred_flag和weighted_bipred_idc都应该为0
e) 图象参数值(psp)的entropy_coding_mode_flag应该等于0
f) 图象参数值(psp)的num_slice_groups_minus1应该在0到7之间,包括0和7
g) 对于基线profile对应的level度应该满足.符合基线profile的码流的profile_idc被赋66.符合一定level的基线Baseline的解码器应该可以解码所有的profile_idc等于66的码流或constrained_set0_flag(等会介绍)为1而且level_idc(在level部分介绍)少于或等于一个指定的level的码流。
1.2 主profile(Main profile)
符合主profile的码流应该遵循以下的约束:
a) 只有I,P,B切片存在.
b) NAL单元流不包括nal_unit_type值范围在2-4之内的值。包括2和4.
c) 不能允许有随意顺序的切片
d) 图像参数集(psp)的num_slice_groups_minus1应该只为0
e) 图像参数集(psp)的redundant_pic_cnt_present_flag应该只为0
f) 对于主profile所要求的level级需要达到。
符合主profile的码流的profile_idc应为77。符合指定level的主profile的解码器应该可以解码所有的profile_idc为77的或constrained_set1_flag值为1且level_idc值小于或等于指定level的码流。
1.3 扩展profile(Extended profile)
符合扩展profile的码流应该遵循以下的约束:
a) 序列参数集的direct_8x8_inference_flag值应该为1
b) 图像参数集的entropy_coding_mode_flag值应该为0
c) 图像参数集的num_slice_groups_minus1的值范围为0到7,包括0和7
d) 对于扩展profile指定的level级应该被达到
符合指定level级的扩展profile的解码器可以解码所有的profile_idc值为88的或constrained_set2_flag值为1的,而且level_idc小于等于指定level级的码流。
符合指定level级的扩展profile的解码器可以解码所有的profile_idc值为66的或constrained_set0_flag值为1的,而且level_idc小于等于指定level级的码流。
5.1 独立于profile的level约束 让fR是这样一个变量:
a) 如果图像n是一帧,fR设为1/1725.2 与profile相关的level级
对于基线profile,主profile和扩展profile的相应的level级约束在H.264的文档中有表可查。