H.264技术及原理

H.264组成

  • 1、网络提取层 (Network Abstraction Layer,NAL)

  • 2、视讯编码层 (Video Coding Layer,VCL)

    • a.H.264/AVC影像格式阶层架构

    • b.Slice的编码模式
      (1) I -slice: slice的全部MB都采用intra-prediction的方式来编码;
      (2) P-slice: slice中的MB使用intra-prediction和inter-prediction的方式来编码,但每一个inter-prediction block最多只能使用一个移动向量;
      (3) B-slice:与P-slice类似,但每一个inter-prediction block可以使用二个移动向量。B-slice的‘B’是指Bi-predictive(双向预测),除了可由前一张和后一张影像的I(或P、B)-slice外,也能从前二张不同影像的I(或P、B)-slice来做inter- prediction。
      (4) SP-slice:即所谓的Switching P slice,为P-slice的一种特殊类型,用来串接两个不同bitrate的bitstream;
      (5) SI-slice: 即所谓的Switching I slice,为I-slice的一种特殊类型,除了用来串接两个不同content的bitstream外,也可用来执行随机存取(random access)来达到网络VCR的功能

    • c、画面内预测技术(Intra-frame Prediction)

    • d、画面间预测技术(Inter-frame Prediction)

码流结构

H.264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)VCL数据即被压缩编码后的视频数据序列。在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。

原理

H.264原始码流(又称为“裸流”)是由一个一个的NALU组成的。他们的结构如下图所示。


其中每个NALU之间通过startcode(起始码)进行分隔,起始码分成两种:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU对应的Slice为一帧的开始就用0x00000001,否则就用0x000001。

H.264码流解析的步骤就是首先从码流中搜索0x000001和0x00000001,分离出NALU;然后再分析NALU的各个字段。

H.264技术及原理_第1张图片

AVC Sequence Header

AVC的解码器如果想要正确解码,需要首先接收AVC Sequence Header, 其中包含了码流的Profile和Level等信息,还包含SPS和PPS信息等,接收到AVC Sequence Header,解码器需要根据header的信息做相应的解码准备(比如初始化相关解码变量等).

SPS

SPS是H.264码流的第一个NALU.

PPS

SPS是H.264码流的第二个NALU.

SEI

在H.264中, 补充增强信息(SEI)可能存在,也可能不存在.

I

I帧. 一幅完整的图像进行编码的结果, 可独立进行解码.
通常解码器收到第一个I帧之后才开始解码.
相邻的SPS & PPS & SEI & I帧具有相同的时间戳.

P

P帧. 前向预测帧. 一般为当前实际图像与前一I帧的图像差值.
无法独立解码,需要结合I帧才可以进行解码.

第一时间获得不止个人原创 android/音视频技术干货,问题深度总结,FrameWork源码解析,插件化研究,FFmpeg研究,直播技术,最新开源项目推荐,还有更多职场思考,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码

你可能感兴趣的:(H.264技术及原理)