H264解码(1)——NALU

H264解码(1)——NALU

前言:

由于本人在平时的工作学习种经常接触到音视频相关的,因此,本系列将开启H264编解码的内容分享,这些内容也是作为本人学习过程中的一些输出,希望对也在学习视频编解码的同学有帮助,同时也欢迎大家给出反馈,共同进步!

背景:

H264是非常经典的一个视频编码标准,当然,它的各项性能跟较新的H265、AV1等进行比较的话,有待提高,但是,它对我们学习这些新的编码标准有着非常重要的知识背景补充,因此,我们完全可以先学习H264,继而再往更新的更高效的技术学习。
H264是一个包含编码和解码的过程,在刚开始接触的时候,建议大家先从解码部分开始,当我们有了一个基础的解码器之后,可以直观地得到一个能够把H264文件输出成一帧一帧地图片,这个过程相对于直接把一帧一帧图片转换成H264码流要更快,同时给个人成就感上也更强,因此,本系列将从解码视角,一步一步剖析H264。当然,解码地这个过程同时也会涉及到很多编码地知识点,这些日后再详谈。
我们现在的目标就是:把H264码流,解码成一帧一帧的yuv数据,同时在这个过程把H264学习一遍。

NALU框架

H264是一个视频编码压缩标准,主要是包含两个部分,一是用于规定传输相关的NALU(Network Abstract Layer Unit 网络抽象层单元),一个是编解码相关的VCL(Video Codec Layer)。一段264码流,里面就是以一个个NALU组成,可参考如下结构图:
在这里插入图片描述
此处只需关注A.Annexb格式即可(实际上还有其他的格式,Annexb是属于比较常用且经典的格式,本文以该格式为基础进行说明)。
通过该结构图看可以发现,每一个H264文件,实际上是由一个个的**“起始码” + “NALU”**组成,它们构成了整一个H264码流的主要框架。

NALU主要内容:

通过上面的框架图可以看到,一个NALU包含了**“Header” + “Body”**两个部分。在了解这两个主体之前,我们需要首先清楚:Body是主要的内容,而Header是用于阐述说明Body的。
我们知道H264码流中有SPS、PPS、I帧、P帧、B帧等,这些统一都是存放在NALU的Body部分,那么,对于一个播放端而言,怎么知道这个NALU是SPS还是PPS呢?关键就是NALU的Header部分,它对这个NALU进行了一些类型的说明以及其他的标识。

NALU的Header:

在这里插入图片描述
NALU的header如上所述:
它由8个bit组成,分为3个部分,F为禁止位,表明该NALU是否丢掉;NRI表示该NALU的重要性,值越高,表示越重要,如通常而言I帧为3,P帧为2;TYPE表示的就是这个NALU的类型,包括常用的SPS(type为7)、PPS(type为8)、I帧、P帧等,它有32种类型,但是有很多都是用不到的,如下图:
在这里插入图片描述

NALU的Body:

NALU的Body装的就是数据主体,根据不同的type类型,里面的结构都不一样,解析的时候的语法也不一样。
NALU的主体内容由一个或多个字节组成,具体的格式由NALU头部中的字段指定。常见的NALU主体内容包括以下几种类型:
SPS(Sequence Parameter Set):序列参数集。SPS包含了视频序列的一些基本信息,如视频的宽度、高度、帧率、码率等。一个视频序列通常只包含一个SPS。
PPS(Picture Parameter Set):图像参数集。PPS包含了一些与图像相关的参数,如图像的色彩空间、量化矩阵等。一个视频序列通常只包含一个PPS。
IDR(Instantaneous Decoding Refresh)帧:关键帧。IDR帧是视频序列中的关键帧,它包含了完整的图像信息,可以独立地进行解码。
非IDR帧:非关键帧。非IDR帧是视频序列中的非关键帧,它通常只包含了图像的差异部分,需要依赖于前一帧或关键帧进行解码。
除了上述几种主体内容类型外,还可能存在其他类型的NALU,如补充增强信息(SEI)等。不同的NALU类型有不同的语法结构和含义。

在解码H.264码流时,解码器需要解析NALU的头部,从中获取NALU的类型和长度等信息,并根据类型来解析和处理NALU的主体内容。根据NALU的类型和顺序,解码器可以还原出原始的视频帧数据,以供后续的处理和显示。

需要注意的是,NALU的主体内容是经过H.264视频压缩算法编码的数据,它不是原始的像素数据。解码器需要将NALU中的压缩数据解码成原始的像素数据,才能进行后续的处理和显示。

(总结)

本文只是对NALU做一个简要的概述,对于其body部分仍有很大内容可以进行讲解,该部分内容将于日后再说。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值