H264码流分析及不同编码方式的对比

一、H264编码标准


1.编码原理
H264 是 MPEG-4 标准所定义的编码格式,标准写法应该是H.264。H.264和先前的标准一样,都采用变换编码、基于运动补偿的帧间预测和熵编码的混合框架。大的不同是增加了帧内预测,变换采用整数变换,熵编码采用自适应的方法。但又在此基础上,增加了一些技术,如帧内预测压缩,帧间预测压缩(运动估计与补偿),整数离散余弦变换(DCT)等。
2.语法结构设计
H.264在视频编码层(VCL)和网络提取层(NAL)之间进行概念分割,以实现在不同的传输环境下的有效传输,便于与当前和将来的编码格式和不同类型的网络进行无缝连接。

在这里插入图片描述
3.NAL单元
H.264由NAL Unit组成。在H.264标准协议中规定了多种不同的NAL
Unit类型,有些类型包含了MP4的主要信息,有些包含了数据;其中两个重要的Unit是SPS 和PPS。
NAL用于定义适合于任何信道传输和存储的数据格式,并提供头信息,从而为视频编码提供与外界的统一接口。 所有的数据都包含于NAL单元(NAL units)中,每个NAL单元包含整数个字节的数据。 如果在有效载荷中包含位错误,则在NALU的头部设置标识。

在这里插入图片描述

二、H264编码标准

1.SPS:序列参数集
在这里插入图片描述
·66<-profile_idc:基准档次baseline profile
·1<-constraint_set0_flag,1<-constraint_set1_flag
·40<-level_idc:标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。
·0<-seq_parameter_set_id:当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。
·4<-log2_max_frame_num_minus4:计算frame_num的上限值MaxFrameNum=2(log2_max_frame_num_minus4+4),这里为28。
·2<-pic_order_cnt_type:表示解码picture order count(POC)的方法。
·2<-num_ref_frames:参考帧的最大数目为2
·10<-pic_width_in_mbs_minus1:计算图像的宽度,单位为宏块个数。Frame_width=(pic_width_in_mbs_minus1+1),这里为16*(10+1)=176
·8<-pic_height_in_map_units_minus1:度量视频中一帧图像的高度,·PicHeightInMapUnits=16*(pic_height_in_map_units_minus1+1),这里为16*(8+1)=144
·1<-frame_mbs_only_flag:说明宏块的编码方式的标识位,为1时,所有宏块都采用帧编码,同时PicHeightInMapUnits表示一帧数据按宏块计算的高度。FrameHeightInMbs=(2-frame_mbs_only_flag)PicHeightInMapUnits,这里图像实际的高度为:frame-height=130=30
·1<-direct_8x8_inference_flag:标识位,用于B_Skip、B_Direct模式运动矢量的推导计算。
·0<-frame_cropping_flag:标识位,说明需要对输出的图像帧进行裁剪。
·0<-vui_parameters_present_flag:标识位,说明SPS中 不存在VUI信息。

2.PPS:图像参数集

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值