H264编码原理(I帧B帧P帧)

2023-11-15

I帧B帧P帧

编码帧的分类

  • I帧(intraframe frame),关键帧,采用帧内压缩技术,IDR帧属于I帧。每个GOP组中第一帧肯定是I帧,而且还是一种特殊的I帧,也可以称为IDR帧。

    一个GOP中可能有很多I帧,但是只有一个IDR帧。
    如果一组中有很多帧,超过了h264限制,会强制塞一个I帧,防止出现错误时,出现串联,因为后面所有非I帧的解码都要依据I帧中的数据进行解码,都是依赖于I帧的。

  • P帧(forward Predicted frame),向前参考帧。压缩时只参考前面以处理的帧,采用帧间压缩技术。占I帧的一半大小。

    所谓向前参考帧就是前面的帧解码成功之后才能解码P帧,前面的帧解码失败,P帧会由于没有关键信息而解码失败(就是上一篇文章说的,小人图片的背景、头发等).
    P帧只参考前面,不参考后面。

  • B帧(Bidirectionallly predicted frame),双向参考帧。压缩时,既参考前面已经处理的帧,也参考后面的帧,帧间压缩技术。它占I帧的四分之一大小。

    如果两帧连续时,且B帧在前,一定是P帧优先进行解码,在一组帧处理时一定是B帧后进行解码,但是播放时按照顺序进行播放,即B帧先进行播放。
    虽然B帧的压缩率是最高的,但是同时占用cpu,还会耗费大量时间,B帧越多,延迟性越大,由于实时通信一定是快速的,计量做到数据过去立即进行解码,展示。
    所以在大部分实时视频场景中,比如音视频会议、在线教育等,都是使用的I帧和P帧,没有使用B帧。
    而在大量的音视频转码时,会大量使用B帧,这是为了减少存储空间,因为去买云存储时,空间越大花费也是越大的。

IDR帧与I帧的区别与联系

  • IDR(Instantaneous Decoder Refresh)解码器立即刷新

极端的想,如果所有的视频都是一串下来,如果中间出现了错误,那么后边的视频就很难恢复了,如果有了IDR帧,当解码器遇见IDR帧时会将解码器 缓存区全部清空,因为每一个GOP的第一帧都是IDR帧。
将缓存的数据都清空对到来的GOP所有视频帧都没有影响,因为这个GOP后边的所有视频帧都是依赖于这个IDR帧的。
这样可以防止错误的传播性。

  • 每当遇见IDR帧时,解码器就会清空解码器参考buffer中的内容。

  • 每个GOP中的第一帧就是IDR帧

  • IDR帧是一种特殊的I帧

帧与分组的关系

在这里插入图片描述
以GOP1为例,可以看见第一个I帧指向三个B帧以及一个P帧,这是因为P帧向前参考解码,但是前面三个B帧无法参考,所以要参考I帧,拿到公共部分数据,进行解码。
B帧前后参考解码,所以既要参考I帧,也要参考后面的P帧,所以在传输时,虽然是按照IBBBP的顺序进行传输,但是实际解码顺序确是IPBBB,第一帧无疑解IDR帧,第二帧解码P帧,所以实时性不是太好。
B帧前后参考时,向前也可以参考P帧,图内可以看出来这一点。
B帧与B帧是没有任何参考的。

SPS与PPS

与之称为帧不如说参数数据,是在IDR帧之前,

  • SPS(Sequence Parameter Set)

序列参数集,作用于一串连续的视频图像。如seq_parameter_set_id、帧数及POC(picture order count)的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。
在解码时可以参考一帧也可以参考多帧,上面说的是参考一帧,之后会有参考多帧的情况,参考多帧时,压缩率会进一步降低。

  • PPS(Picture Parameter Set)

图像数据集,作用于视频序列中的图像,如pic_parameter_set_id、熵编码模式识别选择标识、片组数量、初始量化参数和去方块滤波系数调整标识等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H264编码原理(I帧B帧P帧) 的相关文章

随机推荐

  • 【自然语言处理】隐马尔可夫模型【Ⅵ】精度问题

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 由于字数限制 分成六篇博客 自然语言处理 隐马尔可夫模型 马尔可夫模型 自然语言处理 隐马尔可夫模型 隐马尔科夫模型概述 自然语言处理 隐马尔可夫模型 估计问题 自然语言处理 隐马尔
  • 非递减排列和非递增排列的定义

    递增排列 1 2 3 4 5 6 7 8 递减排列 8 7 6 5 4 3 2 1 非递减排列 1 2 3 4 5 6 6 7 8 8 非递增排列 9 8 8 7 6 5 2 2 1
  • 小白学python-数据清洗

    数据清洗 赔率 公路堵车模型的概念及应用 主成分分析PCA 新的的特征组合 车辆数据描述 one hot编码会使特征值大量增加 维度变高视情况而定 Logistic回归 AUC 曲线下的面积 求取素数以及赔率的代码 import opera
  • web service概念、架构及相关知识

    一 WebService的定义 WebService有好几种定义 W3C组织对其定义 WebService是一个软件系统 为了支持跨网络的机器间互操作交互而设计 WebService通常被定义为一组模块化的API 我们可以通过网络进行调用
  • 太原理工大学19年Java试题复习笔计

    19年Java复习题 1 为使一个名为Example的public类成功编译 需至少满足以下哪个条件 2 0分 A Example类中必须定义一个正确的main函数 B Example类中必须定义在 Example java源文件中 C E
  • sklearn 神经网络

    sklearn 神经网络 url https blog csdn net luanpeng825485697 article details 79064657 url sklearn 神经网络 多层感知器的优点 可以学习得到非线性模型 使用
  • 雷军发布会刚结束,就能写出上万字原创文章!

    前言 看完雷军演讲会之后你有没有看到过很多文章 成千上万个字的原创文章 瞬间就出现了 这是一个一个字敲的吗 当然不是 是AI 话不多说直接上教程 把雷军的演讲整理到笔记中 可以是md格式 word格式等等 复制粘贴即可 打开网站 smart
  • vmware workstation14连网

    记录一下手残的过程 1 选择NAT形式的连接 2 在桌面的右上角有个圆圈 右击这个图标 会显示一个有线连接 默认是关闭的 3 所以设置成连接状态 4 右击有线连接 进行网络配置 5 所有都配置成自动获取
  • MybatisPlus多表连接查询

    mybatis plus作为mybatis的增强工具 它的出现极大的简化了开发中的数据库操作 但是长久以来 它的联表查询能力一直被大家所诟病 一旦遇到left join或right join的左右连接 你还是得老老实实的打开xml文件 手写
  • mybatis与数据库连接过程

    菜鸟发文 请大神多多指导 1 准被一个maven项目 2 先导入jar包 3 配置mybatis核心文件 4 把连接数据库的配置项抽离出来 5 编写实体类 6 编写接口 7 编写mapper映射文件 8 把相同SQL session 方法抽
  • TCP三次握手-backlog队列问题

    TCP三次握手 backlog队列问题 md 概述 之前有同事做压力测试时 发现无论如何都无法突破128并发的问题 经排查发现该服务器ACCEPT QUEUE队列都为128 限制了网络的并发 TCP三次握手 Linux内核协议栈为一个TCP
  • 初识-常见浏览器兼容性问题与解决方案

    浏览器兼容问题一 不同浏览器的标签默认的外补丁和内补丁不同 问题症状 随便写几个标签 不加样式控制的情况下 各自的margin 和padding差异较大 碰到频率 100 解决方案 CSS里 margin 0 padding 0 备注 这个
  • 前后端利用accessToken与refreshToken无感刷新

    项目初衷 以jwt 由header payload和signature组成 为例 用户登录成功 后端返回accessToken 前端保存 请求接口携带 一切都是水到渠成的 可是在acessToken失效时 你正好请求一次接口 接口就挂了 可
  • SpringBoot集成ShedLock分布式定时任务

    文章目录 前言 一 背景 二 ShedLock是什么 三 落地实现 1 1 引入依赖包 1 2 配置数据库连接信息 1 3 创建Mysql数据表 1 4 配置LockProvider 1 5 创建定时Job 四 结果分析 前言 一 背景 在
  • 【性能测试】Jmeter —— jmeter计数器

    jmeter计数器 如果需要引用的数据量较大 且要求不能重复或者需要递增 那么可以使用计数器来实现 如 新增功能 要求名称不能重复 1 新增计数器 计数器 允许用户创建一个在线程组之内都可以被引用的计数器 计数器允许用户配置一个起点 一个最
  • 《Go语言在微服务中的崛起:为什么Go是下一个后端之星?》

    博主猫头虎 带您进入 Golang 语言的新世界 博客首页 猫头虎的博客 面试题大全专栏 文章图文并茂 生动形象 简单易学 欢迎大家来踩踩 IDEA开发秘籍专栏 学会IDEA常用操作 工作效率翻倍 100天精通Golang 基础入门篇 学会
  • c语言 常量表达式,Constant expressions(常量表达)

    几种表达式被称为常量表达式 预处理器常量表达式 if 或 elif 后面的表达式必须扩展为 除赋值 增量 减量 函数调用或逗号之外的其他操作符 其参数是预处理常量表达式 整数常量 字符常量 特殊的预处理器操作员 defined 当在 if表
  • 面试题 : Top-k问题

    目录 简介 题目 示例 提示 开始解题 1 思路 2 解题代码 3 时间复杂度 4 运行结果 编辑 目前问题 真正的解法 1 以找前K个最大的元素为例 2 代码执行过程 时间复杂度的计算 3 画图演示代码执行过程 4 解题代码 两种解法的比
  • webpack3 配置详解

    今天详细的学习了webpack3 下面贴出我的主要配置代码给后来人一些参考 Created by shanpengfei051 on 2018 1 3 const path require path const uglify require
  • H264编码原理(I帧B帧P帧)

    I帧B帧P帧 编码帧的分类 I帧 intraframe frame 关键帧 采用帧内压缩技术 IDR帧属于I帧 每个GOP组中第一帧肯定是I帧 而且还是一种特殊的I帧 也可以称为IDR帧 一个GOP中可能有很多I帧 但是只有一个IDR帧 如