[音视频]H264--2--语法及结构

名词解释
场和帧 :    视频的一场或一帧可用来产生一个编码图像。在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场。

片:             每个图象中,若干宏块被排列成片的形式。片分为I片、B片、P片和其他一些片。

                     I片只包含I宏块,P片可包含P和I宏块,而B片可包含B和I宏块。

                     I宏块利用从当前片中已解码的像素作为参考进行帧内预测。

                     P宏块利用前面已编码图象作为参考图象进行帧内预测。

                     B宏块则利用双向的参考图象(前一帧和后一帧)进行帧内预测。

                     片的目的是为了限制误码的扩散和传输,使编码片相互间是独立的。

                     某片的预测不能以其它片中的宏块为参考图像,这样某一片中的预测误差才不会传播到其它片中去。


宏块 :        一个编码图像通常划分成若干宏块组成,一个宏块由一个16×16亮度像素和附加的一个8×8 Cb和一个8×8 Cr彩色像素块组成。


数据之间的关系:
H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成,一个宏块由16x16的yuv数据组成。宏块作为H264编码的基本单位。


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去掉。也称为脱壳操作。

H264/AVC 的分层结构


H.264的主要目标是:

1.高的视频压缩比;

2.良好的网络亲和性;

为了完成这些目标H264的解决方案是:

1.VCL   video coding layer    视频编码层;

2.NAL   network abstraction layer   网络提取层;

 
其中,VCL层是对核心算法引擎,块,宏块及片的语法级别的定义,他最终输出编码完的数据 SODB;

NAL层定义片级以上的语法级别(如序列参数集和图像参数集,针对网络传输),

同时支持以下功能:独立片解码,起始码唯一保证,SEI以及流格式编码数据传送,NAL层将SODB打包成RBSP然后加上NAL头,组成一个NALU(NAL单元);

…… ……

…… ……

原文链接:https://blog.csdn.net/yangzhongxuan/article/details/8003494

posted @ 2021-04-23 00:31  mwy9  阅读(43)  评论(0)    收藏  举报