好记性不如铅笔头

media, 编程

H264 NALU单元结构简单笔记

参考链接

https://www.cnblogs.com/wujianming-110117/p/12722286.html
https://blog.csdn.net/qq_29350001/article/details/78226286

在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧

相关术语介绍

NALU:H264编码数据存储或传输的基本单元,一般H264码流最开始的两个NALU是SPS和PPS,第三个NALU是IDR。SPS、PPS、SEI这三种NALU不属于帧的范畴。
SPS(Sequence Parameter Sets):序列参数集,作用于一系列连续的编码图像。
PPS(Picture Parameter Set):图像参数集,作用于编码视频序列中一个或多个独立的图像。
SEI(Supplemental enhancement information):附加增强信息,包含了视频画面定时等信息,一般放在主编码图像数据之前,在某些应用中,它可以被省略掉。
IDR(Instantaneous Decoding Refresh):即时解码刷新。
HRD(Hypothetical Reference Decoder):假想码流调度器。

一个典型的H264码流如下:

。。。 [StartCode] [NALU Header] [NALU Payload] [StartCode] [NALU Header] [NALU Payload] [StartCode] [NALU Header] [NALU Payload] 。。。

StartCode(3-4 BYTES) 用于标示这是一个NALU单元的开始,必须是”00 00 00 01” 或”00 00 01”
NALU Header(1 BYTE) 具体定义如下表:

正常H264码流如下图:

关于SPS和PPS的相关介绍,这里笔记2个网址:
https://blog.csdn.net/shaqoneal/article/details/52771030
https://blog.csdn.net/shaqoneal/article/details/52877689

Leave a Reply

11 − 5 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据