音视频开发-H264数据组成

  • Post author:
  • Post category:其他




H264

H264结构中,一个视频图像编码后的数据叫做一



,一帧由一个

片(slice)

或多个片组成,一个



由一个或多个

宏块(MB)

组成,一个宏块由

16x16的yuv

数据组成。宏块作为H264编码的基本单位。

一个宏块由一个

16×16

亮度像素和附加的一个

8×8 Cb

和一个

8×8 Cr

彩色像素块组成,我们常见的

YUV

格式

I420


SODB(数据比特串)

最原始的编码数据,即VCL数据;


RBSP(原始字节序列载荷)



SODB

的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐;


EBSP( 扩展字节序列载荷)



RBSP

基础上填加了仿校验字节(0X03)它的原因是:在

NALU

加到

Annexb

上时,需要添加每组NALU之前的开始码

StartCodePrefix(0x00000001 or 0x000001)

,如果该NALU对应的

slice



一帧

的开始则用

4位字节

表示,

0x00000001

,否则用3位字节表示

0x000001

(是一帧的一部分)。另外,为了使

NALU主体

中不包括与

开始码

相冲突的,在编码时,每遇到两个字节连续为0,就插入一个字节的

0x03

。解码时将0x03去掉。也称为

脱壳操作

注:

0x00

表示

16

进制2位,则2进制的八位(

8bit = 1byte

)。即一个字节。所以

0x00 00 00 01

是4位字节,

0x00 00 01

是3位字节。



数据构成 NAL


NAL (Network Abstract Layer)

, 即网络抽象层。

一般来说编码器编出的首帧数据为

PPS



SPS

,接着为

I帧

,然后是

P帧


在这里插入图片描述

在这里插入图片描述

编码器将每个

NAL

各自独立、完整地放入一个分组,因为分组都有头部,解码器可以方便地检测出

NAL

的分界,并依次取出

NAL

进行解码。



起始码、



版权声明:本文为shengpeng3344原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。