1. 编码的分层编码结构
视频->GOP->slice->SS(slice segment)->CTU->CU
1.1 GOP
图像组,由slice组成
GOP结构分为开放式GOP和封闭式GOP。
封闭式GOP中,每个GOP的第一帧是IDR帧,并且每个GOP独立编解码。
开放式GOP只有第一个GOP的第一帧为IDR帧,而后续GOP的第一帧为non-IDR帧,于是后一GOP可以参考前一GOP中的帧。
1.2 slice
slice为了并行处理,一帧图像可以是一个slice,也可以是多个slice。
不同slice之间独立编解码,所以可以多个slice并行编解码,提高编码效率。
1.3 Slice segment
每个slice又可以划分为多个SS,SS有依赖SS,编码需要参考其他SS信息,也有独立SS,编码可以独立完成。
2.码流结构
2.1 SPS、PPS、VPS
将属于GOP层和slice层中公用的的语法元素独立出来编码,避免在低层语法上重复编码。分别组成序列参数集(SPS, Sequence Parameters Set)和图像参数集(PPS, Picture Parameters Set)。
- SPS包含一个CVS(Coded Video Sequence)中所有图像的共用信息。
Note:CVS是一个GOP编码生成的压缩数据。所以应该是每一个GOP公用一个SPS。
SPS中内容大致包括:解码相关信息,档次级别、分辨率、档次中编码工具开关以及涉及的参数、时域可分级信息等, - PPS包含一幅图像所用的公共参数,也就是一幅图像中所有的SS引用同一个PPS。
内容包括初始图像控制信息,包括:量化参数、分块信息等。
Note:也就是说,当多个slice并行编解码时,是公用一个PPS的。 - VPS(Video Parameter Set, VPS)是为了兼容标准在其他应用上的扩展,当扩展了新的应用时,原语法结构不需要发生改变,添加新的语法结构来应对。内容大致包含多个子层共享的语法元素,但是不属于SPS中的信息。
所以,当SS想获得一些公用信息时,需要先引用自己的PPS,再通过PPS引用的SPS,进而再获得SPS引用的VPS。这样层层递进的获得自己的所有控制和参数信息。
2.2 码流参数引用结构图
2.3 一对多的关系
为了节省码流,参数集不会传输很多次,当然也可以设定每次都传输。
也就是,参数集是一对多的关系,可以很多个GOP引用同一个SPS,同理,可以很多个SS引用同一个PPS。也就是多个图像的控制参数没有发生太大变化,那么只传输一个PPS,后续图像都引用他即可。所以实际编码时,有SPS_ID和PPS_ID,每个PPS有自己ID以及自己参考的SPS的ID,这样的话,只要传输一部分即可,不需要每次都传输。
2.4 VCLU和non-VCLU
NAL单元根据是否装载视频编码数据被分为VCLU(Video Coding Layer Unit)和non-VCLU。
非编码数据的参数集作为non-VCLU进行传输,参数集的独立可以使其提前发送,也可以在需要增加新的参数集的时候再发送。
这样的好处就是和非编码数据分离开来,因为他比较重要,所以可以重发,可以额外发送作为补充,以及增加多重保护机制发送。
SS是视频编码数据的基本单位,一个SS的压缩数据生成一个VCLU进行传输。
最终,一个视频序列的编码码流由一系列SS生成的多个VCLU单元和在VCLU之间的一些分割标示数据,以及参数集数据组成。
分割标示数据和参数集数据是non-VCLU,分割标示数据用于区分SS属于哪副图像,哪个CVS。
3. 编码系统的分层结构
AVC和HEVC,都是采用视频编码层(Video Coding Layer, VCL)和网络适配层(Network Abstract Layer, NAL)双层架构,目的是:适应不同的网络环境和视频应用。
网络适配层:对视频压缩后的数据进行划分和封装,并进行必要的标示。视频压缩后的数据中,有一些参数数据非常重要,有一些作为参考帧的编码数据也非常重要,在面对复杂的网络环境时,我们要优先保证这些数据的安全。所以,需要网络适配层对编码后的数据根据重要性进行划分和封装,并标示出数据的重要性。
3.1 分层结构
不同类型的网络还是有比较大的区别,将整个编码系统分层的话,就可以在视频编码层,只关注视频数据的压缩效率,而在网络适配层去针对网络环境进行调整。
例如:不同网络支持的最大传输单元(Maximum Transmission Unit, MTU)是不同的,有线网络会比无线网络大很多。网络的分组策略要根据视频数据的内容特性来决定,不同网络有自己的分组策略。不同的场景下,应用的传输协议不同,时延要求低注重视频数据完整性和正确性的应用,采用可靠的传输协议–TCP/IP;视频会议等实时要求高的应用,采用不可靠的传输协议(RTP/UDP/IP)。
适应不同的网络环境和应用需要,NAL将视频压缩数据根据内容特性,分类成具有不同特性的NAL单元(NAL Unit,NALU),并对NALU的内容特性进行标识。从而使得在网络上传播中,网络只需要根据NALU标识就可以优化传输性能,不需要自行分析。
3.2 变化过程
原始视频序列:
数据组成:序列->帧->像素
经过视频编码层(VCL):
数据组成:参数集+编码数据->控制信息+残差数据
经过网络适配层(NAL):
数据组成:NALU+non-NALU
其中,NAL根据压缩视频数据比特流的内容特性,将其划分成多个数据段,对每个数据段进行封装并对其中的内容特性进行标识,生成NALU,内容特性信息放在NALU头信息中。