-
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的各个字段。
AVC的解码器如果想要正确解码,需要首先接收AVC Sequence Header, 其中包含了码流的Profile和Level等信息,还包含SPS和PPS信息等,接收到AVC Sequence Header,解码器需要根据header的信息做相应的解码准备(比如初始化相关解码变量等).
SPSSPS是H.264码流的第一个NALU.
PPSSPS是H.264码流的第二个NALU.
SEI在H.264中, 补充增强信息(SEI)可能存在,也可能不存在.
II帧. 一幅完整的图像进行编码的结果, 可独立进行解码. 通常解码器收到第一个I帧之后才开始解码. 相邻的SPS & PPS & SEI & I帧具有相同的时间戳.
PP帧. 前向预测帧. 一般为当前实际图像与前一I帧的图像差值. 无法独立解码,需要结合I帧才可以进行解码.
第一时间获得【不止个人原创 android/音视频技术干货,问题深度总结,FrameWork源码解析,插件化研究,FFmpeg研究,直播技术,最新开源项目推荐,还有更多职场思考】,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码