本文为博主原创文章,未经博主允许不得转载。(合作洽谈请联系QQ:1010316426)
这篇博客H.265的各种帧(详解):接入图像对所有的VCL NAL进行了详细解说。
Trailing pictures包括TSA、STSA和TRAIL。
在Trailing pictures中,除了TSA和STSA之外,其他的都定义为TRAIL帧。
这两种是H265中引入的新结构。
Temporal sub-layer access picture随机接入点后按解码和输出顺序的图像。
TSA(temporal sublayer access)
STSA(stepwise temporal sublayer access)
1.3 关于RADL和RASL
Leading picture 包括RASL和RADL。
RADL(random access decodable leading):在随机接入点后,可以按顺序解码的图像。不依赖IRAP前码流信息的前置图像。即IRAP介入,其RADL图像可以正确解码。
RASL(random access skipped leading) 因为包含帧间信息而不能解码的图像–会被丢弃。依赖IRAP前码流信息的前置图像。即IRAP介入,其RADL图像不能正确解码
这是两种GOP间的图像类型。如果解码器从某个CRA随机接入,则按照显示顺序的后面几帧数据由于缺少参考帧而不能解码,这些图像将被解码器抛弃,即skip leading。而对于没有从当前CRA接入的数据,这些图像可以被正常解码显示,因此称为decodable leading。由于这些数据是有可能舍弃的,因此其他图像(trailing pictures)不能参考这些数据,否则万一这些图像被舍弃,将会有更多的图像受其影响而不能正常解码。
举例说明:
假设视频序列的显示顺序为①,这是一个完整的GOP,解码顺序为②
①I B B P B B P B B P
②I P B B P B B P B B
在H.264中,第一个I帧为IDR,GOP为闭合结构,因此两个GOP组成视频的结构为
I B B P B B P B B PI B B P B B P B B P(显示顺序)
I P B B P B B P B BI P B B P B B P B B(解码顺序)
而在HEVC中,两个I帧为CRA,GOP为开放结构,因此GOP的结构为:
I B B P B B P B B PB B I B B P B B P B(显示顺序)
I P B B P B B P B B I B BP B B P B B…(解码顺序)
两个黄色的B帧表示的是按照解码顺序在CRA之后,该GOP内参考的前一个GOP进行编码的图像。这样便很容易得知,如果选择在第二个CRA进行随机接入,这两个黄色的B帧将会由于没有参考帧无法解码而被舍弃。这两个黄色的B帧即RASP。如果没有选择这个CRA进行随机接入,这两个黄色B帧将可以顺利解码,即成为RADP。
对于BLA,情况也是类似的。由于出现码流拼接,第二段码流的CRA之后的B也会因为没有参考帧无法解码而丢弃。很容易理解,此时缓存中的参考帧数据还来自上一段码流,跟当前码流没关系,当然不能用作B的参考了。
之余HEVC这么设计的目的,我觉得应该是为了编码效率考虑的。因为B帧的压缩比相对是最高的,引入这种设计可以在不影响随机存取性能的前提下,尽可能增大B帧的比重,提高整体压缩编码的性能。
以下是一些国外研究者在论坛中对这个问题的一些讨论,可以拿来做一下参考:
forum.doom9.org/archive/index.php/t-105129.html
BLA(broken link access)
BLA只是CRA在视频流切换情况下的一种特例。视频流在某个RAP上要求切换到另一个视频流继续解码,则直接将该CRA同另一个视频流中的接入CRA连接,后者便是BLA。由于BLA之前解码到缓存的视频流与当前视频流无关,因此其特性类似于直接从该点进行随机存取后的CRA。
IDR:Instantaneous Decoding Refresh
是在H.264中定义的结构。在H.264中,IDR帧一定是I帧,而且一定是GOP的开始,也是H.264 GOP的关键帧。但是反过来却不成立,I帧不一定是IDR帧。GOP的长度不是定死不变的,在H.264的编码器中,如果判定场景发生变化,那么即使不到原定GOP的末尾,也会在这个位置加入一个IDR,作为新一个GOP的开始。此时这个GOP的长度就被缩小了。
GOP:Group of Pictures
CRA:clean random access
GOP是图像组(Group of Pictures)的意思,表示编码的视频序列分成了一组一组的有序的帧的集合进行编码。每个GOP一定是以一个I帧开始的,但是却不一定指代的是两个I帧之间的距离。因为一个GOP内可能包含几个I帧,只有第一个I帧(也就是第一帧)才是关键帧。在程序cfg中,GOP的长度和两个I帧的距离也是两个不同参数指定的(如IntraPeriod和GOP Size或者类似的参数)。所以,两个I帧的间距不可能大于GOP的长度,一般情况是更小的。
GOP有封闭式(Open GOP)和开放式(Closed GOP)两种。H264只有封闭式,H265两种都有。
H264封闭式GOP: H264中单个GOP内部帧解码不会依赖其它GOP,即每个GOP都可独立解码,因此成为是“封闭”的。每个GOP都可独立解码的关键点就是IDR帧的强制刷新起了阻隔作用,避免错误帧相互影响,所以H264中GOP开始的第一帧必须为IDR关键帧,IDR为I帧的一种采用帧内编码无参考方式,但I帧不一定是IDR帧,普通I帧会参考前边的IDR,在RTC中,用的最多的就是IDR关键帧。
但是在HEVC中,GOP的结构发生了变化,采用了“开放”的结构,在解码过程过可能会参考其他GOP的数据。这时,一个GOP的起始帧命名为CRA, clean random access,同样采用帧内编码,但是这个GOP内的帧间编码帧可以越过CRA参考前一个GOP的数据,这便是GOP的open。
Intra Random Access Point:帧内随机接入点
为了满足压缩视频流的随机介入需求,如电视频道的切换、视频播放中的快进、拖曳等,一段视频流中通常会间隔地存在一些随机介入点。从IRAP开始,后续视频流(播放顺序在IRAP后的图像)可以独立正确解码,无需参考IRAP前面的视频信息。IRAP后的第一幅解码图像被称为IRAP图像。IRAP图像只包含帧内编码片,不采用帧间预测技术,可以独立解码。
IRAP相当于H264的IDR帧。
IRAP的前置(Leading)图像:解码顺序在IRAP图像后而播放顺序在其前面的图像。
IRAP的后置(Trailing)图像:播放顺序在IRAP图像后(解码顺序必在其后)的图像。
IRAP的分类:BLA图像,IDR图像,和CRA图像。
IDR图像在H.264中作为IRAP图像使用,IDR图像要求其前置图像必须是RADL图像,即IDR图像及其后续码流可以不依赖该IDR图像前的视频流信息进行独立解码。
CRA图像允许其前置图像识RASL图像,允许参考CRA图像前的视频流可以使RASL图像获得更高的编码效率,当直接从CRA图像介入,其RASL图像无法正常解码。当以CRA图像开始的码流的一部分也属于另一段码流时,其RASL肯定不能正常解码。为了方便,将CRA定义为BLA图像,明确其RASL图像不需要解码。
CVS(Coded Video Sequence):由IRAP所分成的相对独立的区域,且两个相邻IRAP图像的NORaslOutFlag=1的视频流。
CVS包含的编码图像组相当于早期的GOP,是一个相对可以独立解码的单位。编码过程通常以CVS为单位设置固定的时域编码结构。不同CVS内的视频压缩数据不会相互参考的称为封闭式GOP。
Video Parameter Sets
Sequence Parameter Sets
Picture Parameter Sets
Access unit delimiter
End of sequence
End of bitstream
Filler data
Supplemental enhancement information
SEI_PREFIX
SEI_SUFFIX
有另一位博主的博客写的很专业,以供参考:
https://www.cnblogs.com/DwyaneTalk/p/5711430.html