H264语法梗概

H.264的主要目标是:
1.高的视频压缩比;
2.良好的网络亲和性;

为了完成这些目标H264的解决方案是:
1.VCL video coding layer 视频编码层;
2.NAL network abstraction layer 网络提取层;

VCL层出来的是编码完的视频帧数据,这些帧可能是I、B、P帧,而且这些帧可能属于不同的序列,再者同一个序列还有相对应的一套序列参数集和图片参数集等等,
所以要完成视频的解码,不仅需要传输VCL层编码出来的视频帧数据,还需要传输序列参数集、图像参数集等数据。
参数集:包括序列参数集 SPS 和图像参数集 PPS
SPS 包含的是针对一连续编码视频序列的参数,如标识符 seq_parameter_set_id、帧数及 POC 的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等等。
PPS对应的是一个序列中某一幅图像或者某几幅图像,

一幅图像包含I frame 、P frame 、B frame
一帧可以分成一个或多个多个片(silce): I片(只包含I宏块(MB))、P片(P和I宏块(MB))、B片(B和I宏块(MB))、SP片(用于不同编码流之间的切换)和SI片(特殊类型的编码宏块)。
一个宏块(MB) 由16x16的yuv数据组成。宏块作为H264编码的基本单位。
数据分割:组成片的编码数据存放在 3 个独立的 DP(数据分割,A、B、C)中,各自包含一个编码片的子集。
分割A包含片头和片中每个宏块头数据。
分割B包含帧内和 SI 片宏块的编码残差数据。
分割 C包含帧间宏块的编码残差数据。
每个分割可放在独立的 NAL 单元并独立传输
在这里插入图片描述
H264网络传输的结构
H264在网络传输的是NALU,NALU的结构是:NAL头+RBSP,实际传输中的数据流如图所示:
在这里插入图片描述
NALU头用来标识后面的RBSP是什么类型的数据,他是否会被其他帧参考以及网络传输是否有错误。
NALU头结构
长度:1byte
forbidden_bit(1bit) + nal_reference_bit(2bit) + nal_unit_type(5bit)
1.forbidden_bit:禁止位,初始为0,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元。
2.nal_reference_bit: nal重要性指示,标志该NAL单元的重要性,值越大,越重要,解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU。

不同类型的NALU的重要性指示如下表所示。
在这里插入图片描述
所谓参考帧,就是在其他帧解码时需要参照的帧。比如一个I帧可能被一个或多个B帧参考,一个B帧可能被某个P帧参考。
从这个表我们也可以看出来,DIR的I帧是非常重要的,他一丢,那么这个序列的所有帧都没办法解码了;序列参数集和图像参数集也很重要,没有序列参数集,这个序列的帧就没法解;没有图像参数集,那用到这个图像参数集的帧都没法解。
nal_unit_type:NALU类型取值如下表所示。

在这里插入图片描述
在这里插入图片描述
H264编码过程中的三种不同的数据形式:
SODB 数据比特串 ---->最原始的编码数据,即VCL数据;
RBSP  原始字节序列载荷 ---->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐;
EBSP  扩展字节序列载荷 ---- > 在RBSP基础上填加了仿校验字节(0X03)它的原因是: 在NALU加到Annexb上时,需要添加每组NALU之前的开始码StartCodePrefix,如果该NALU对应的slice为一帧的开始则用4位字节表示,ox00000001,否则用3位字节表示ox000001(是一帧的一部分)。另外,为了使NALU主体中不包括与开始码相冲突的,在编码时,每遇到两个字节连续为0,就插入一个字节的0x03。解码时将0x03去掉。也称为脱壳操作。这个03操作主要针对NAL内部防止和NAL头出项竞争。

在这里插入图片描述
PTS:Presentation-Time-Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来。
DTS:Decode-Time-Stamp。DTS主要是标识读入内存中的比特流在什么时候开始送入解码器中进行解码。
在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。

MPEG压缩方式:
所以,2个I帧之间的一大串,形成一个GOP,而GOP中间由P帧+B帧组成。
MPEG-2 压缩的帧结构有两个参数:
一是 GOP(Group Of Picture)图像组的长度,一般可按编码方式从 1-15。
二是I帧和P帧之间B帧的数量,一般是1~2个。前者在理论上记录为 N,即多少帧里面出现一次 I 帧;后者描述为多少帧里出现一次 P 帧,记录为 M。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值