当前位置: 首页 > news >正文

什么是闭合GOP和开放GOP?

d1df28906bc6f0ced06d3ae2fdeaed39.gif

点击上方“LiveVideoStack”关注我们

翻译 | Alex

技术审校 | 李忠

本文来自OTTVerse,作者为Krishna Rao Vijayanagar。

GOP

Easy Tech

#008#

在本文中,我们将了解闭合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之内的帧。

d65b5ccb676d7b001e50722a183e1b83.png

在上面的图片中,第一个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(由黄色箭头表示)。

c5e0fb596e0f9f1f3c99bdbcf14fcfdf.png

开放GOP在以下情况中非常有用:

  • 你不需要为了ABR而重新开始一段新的视频,但是需要关闭GOP

  • 你现在想要提高视频压缩效率(因为B帧可以多一个高质量的参考帧)

  • 当你需要插入I帧时(或是为了刷新视频质量,或者在非场景转换的情况下,是否跨I帧预测并不重要)

  总   结

我希望这篇文章能够有助于你理解闭合GOP、开放GOP和IDR。关于视频压缩的更多入门文章,请关注我们的Easy Tech栏目。感谢阅读,我们下次再会!


致谢

本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。

原文链接:

https://ottverse.com/closed-gop-open-gop-idr/

延伸阅读:

视频编码完全指南

Easy Tech:什么是I帧、P帧和B帧?

为什么视频压缩如此重要

相关文章:

  • 星球专享 | 关于播放器的一次项目实践~~
  • 可远程办公的神仙公司 招音视频啦!
  • 星球专享 | 播放器 FFmpeg 依赖库的配置
  • 干货分享丨HDR 技术产品实践与探索
  • H264 视频文件如何缩放分辨率?
  • 也许可以少走弯路的职场建议
  • FFmpeg 中 AVPacket 与 AVFrame 中数据的传递与释放
  • 头条都在用的边下边播方案
  • YUV 与 颜色空间转换
  • 原创干货 | 入门或者转行音视频,应该要怎么做?
  • 上手 GAMES 104 课程 Pilot 游戏引擎~~
  • 关于音视频里面的 解码帧率 和 渲染帧率
  • 将音视频中的花屏、绿屏、黑屏问题一网打尽
  • 关于直播、WebRTC、FFmpeg 的那些事~~
  • 干货 | 快速抽取缩略图是怎么练成的?
  • @jsonView过滤属性
  • Angular 2 DI - IoC DI - 1
  • css属性的继承、初识值、计算值、当前值、应用值
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • javascript 总结(常用工具类的封装)
  • leetcode讲解--894. All Possible Full Binary Trees
  • rabbitmq延迟消息示例
  • React as a UI Runtime(五、列表)
  • Terraform入门 - 1. 安装Terraform
  • vue2.0项目引入element-ui
  • vue--为什么data属性必须是一个函数
  • yii2权限控制rbac之rule详细讲解
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 程序员该如何有效的找工作?
  • 从重复到重用
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 聚簇索引和非聚簇索引
  • 前端
  • 思维导图—你不知道的JavaScript中卷
  • 网页视频流m3u8/ts视频下载
  • 我的面试准备过程--容器(更新中)
  • 线性表及其算法(java实现)
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 学习笔记TF060:图像语音结合,看图说话
  • 2017年360最后一道编程题
  • linux 淘宝开源监控工具tsar
  • 仓管云——企业云erp功能有哪些?
  • ​ubuntu下安装kvm虚拟机
  • #考研#计算机文化知识1(局域网及网络互联)
  • (3)STL算法之搜索
  • (9)STL算法之逆转旋转
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (安卓)跳转应用市场APP详情页的方式
  • (八)Spring源码解析:Spring MVC
  • (二)springcloud实战之config配置中心
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (转)linux 命令大全
  • (转载)OpenStack Hacker养成指南
  • *setTimeout实现text输入在用户停顿时才调用事件!*