GOP
Easy Tech
在本文中,我们将了解闭合GOP和开放GOP的概念。这两种类型的GOP在视频流化中非常常见,并会影响视频压缩效率、错误恢复以及ABR的切换能力。
什么是GOP?
GOP(A Group of Pictures)是指一组按照编解码和显示顺序排列好的图片。
注意:如果你不熟悉视频压缩和帧的类型,可以先阅读这篇文章:Easy Tech:什么是I帧、P帧和B帧?
一个GOP包含不同类型的图片(帧)。这些基本的帧类型有:
- I帧(仅帧内预测)
- P帧(仅参考前一帧预测)
- B帧(可参考前、后帧预测,即双向预测)
好,现在有了这些最基本的帧类型,我们就可以构建GOP了:
- 一个GOP通常以I帧开头,紧接着是P帧和B帧序列
- 两个连续I帧之间的距离被称为GOP长度
- 连续P帧之间的距离被称为mini-GOP大小
P帧和B帧参考其他帧进行时域预测。用作预测的帧既可以是I帧和P帧,也可以是被参考的B帧。H.264/AVC允许将这三种类型的帧组合起来形成多个预测帧。
问题来了——分析显示顺序(Display Order)时,预测/参考帧的位置在哪里?换言之,P帧和B帧可以参考几个GOP之前的帧吗?这样做也许会呈现最好的效果,为什么不这样做呢?
为了回答这些问题,我们需要先理解闭合GOP和开放GOP的概念。让我们继续吧!
什么是闭合GOP?
顾名思义,闭合GOP是指不对外开放的GOP。一个属于闭合GOP的帧只能参考本GOP之内的帧。
在上面的图片中,第一个GOP以P帧而不是B帧结束,这就意味着编码器不会将下一个GOP中的帧用作参考帧。多补充一点,如果GOP的最后一帧是B帧,你认为会发生什么?难道B帧不就是设计用来参考前、后帧的吗?
在这种情况下,编码器应该确保后一参考帧是空帧。后面那一帧如果是空帧,B帧这时就发挥了P帧的作用。然而,编码器总会确保最后一帧是P帧,这样一来,就简化了“关闭”GOP的过程。
闭合GOP在视频流化和压缩中非常有用,它是视频中的独立片段,和其他GOP有清晰的隔断,所有在闭合GOP出现的问题都不会影响到其他GOP。
闭合GOP以一个被称为IDR(Instantaneous Decoder Refresh,即时解码刷新)的I帧开始。之所以称之为IDR,是因为当解码器遇到 IDR 帧时,由于在 IDR 之前出现的任何帧都不能用作在该 IDR 之后出现的图片的参考帧,它可以刷新其解码图片缓冲区(Decoded Picture Buffer 或 DPB)。这就形成了图片序列的彻底中断。
所以,IDR和闭合GOP到底有什么用处?
ABR视频流:在ABR视频流中,播放器可以根据带宽和解码器缓冲器的填充程度在不同配置文件(组合不同码率和分辨率的视频)之间切换。如果播放器要从1080p切换到360p,那么它就需要这种利落的切换。此时IDR发挥作用,这样播放器就能刷新缓冲,让360p的视频流进入。如果你不了解ABR,请阅读这篇文章:理解ABR及其工作原理。
错误恢复:如果你在流化视频时使用HLS,并且每个视频片段都以IDR开始,这意味着片段中的所有帧都不能参考前、后片段中的帧。所以如果因为某个错误而失去其中一个片段,播放器仍然能继续接收下一个视频片段。有趣的是,Apple 的 HLS 规范提到应该每两秒使用一次 IDR。(注意:规范没有说视频片段持续时间应该是两秒,而是指 GOP 的大小是两秒)。
快进快退(Trick Mode):我们之前提到过,IDR非常有助于实现快进快退。播放器需找到距离最近的IDR,然后开始从这一点播放视频流。
现在你已经理解闭合GOP了吧,让我们继续学习开放GOP。
什么是开放GOP?
开放GOP正好和闭合GOP相反,允许其内的帧参考其他GOP内的帧。请看下图第二个I帧。来自前一个GOP的B帧被用作参考帧,这意味着这是一个开放GOP(由黄色箭头表示)。
开放GOP在以下情况中非常有用:
- 你不需要为了ABR而重新开始一段新的视频,但是需要关闭GOP
- 你现在想要提高视频压缩效率(因为B帧可以多一个高质量的参考帧)
- 当你需要插入I帧时(或是为了刷新视频质量,或者在非场景转换的情况下,是否跨I帧预测并不重要)
总 结
我希望这篇文章能够有助于你理解闭合GOP、开放GOP和IDR。关于视频压缩的更多入门文章,请关注我们的Easy Tech栏目。感谢阅读,我们下次再会!
致谢
本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。
原文链接:
https://ottverse.com/closed-gop-open-gop-idr/