H264码流结构讲解

devtools/2024/10/20 21:29:15/

所谓的码流结构就是指:视频经过编码之后所得到的数据是怎样排列的,换句话说,就是编码后的码流我们该如何将一帧一帧的数据分离开来,哪一块数据是一帧图像,哪一块是另外一帧图像,只要了解了这个,后面的事情就好办了。

1.H264帧的定义

        在H264编码中有I帧,p帧和B帧。每一帧都相当于一张静止的图像。在实际的码流传输中会利用编码器来压缩图像以减少视频的体积,其中I帧、P帧、B帧最为常见。

I 帧: I 帧通常又称之为内部画面,它通常是视频编码的第一帧。它的最大特点是自带一个完整的图像信息,在解码的过程中只需要解码本帧就可以完整地提取出一个完整的画面。假设一个视频中丢失了I 帧,则整个视频则会处于黑屏状态,后面的视频则无法正常播出。由此可见, I 帧在视频编码中扮演着相当重要的角色。但是它也有自身的缺点,那就是I 帧的体积比较大,假设在传输视频中全部采用 I 帧去传输,那整个网络链路都承受着巨大的压力。 所以,I 帧就要配合 P 帧、 B 帧等进行数据的传输。
P 帧: P 帧又称之为前向参考帧,此帧的特点是需要参考前一帧的图像信息才可以正确把图像解码出来。 P 帧指的是这一帧和前一帧的差别,并通过将图像序列中已经编码后的冗余信息充分去除来压缩传输数据量的编码图像。
B 帧: B 帧也称之为双向参考帧, B 帧的特点是以前面的帧 (I 帧或者 P ) 或者后面的帧 ( 也是 I 帧、 P ) 作为参考帧找出 B 帧的预测值,并且取预测差值和预测矢量进行传送。所以在拉流端解码B 帧的时候不仅需要获得前面的缓存视频,还需要获得后面的缓存视频才能够正常解码 B 帧。所以, B 帧虽然压缩率更高,但是更消耗CPU 资源

2.GOP(I帧间隔)

     GOP 指的是两个 I 帧之间的距离,在一个 GOP 包含了一组连续的图片。在一个 GOP 中包含了 I 帧、 P 帧、 B 帧,直到下一个 I 帧的出现,一个 GOP 才算结束。
    通常来说,I 帧所占用的字节和体积大于 P 帧、而 P 帧所占用的字节大于 B 帧。所以在码率不变的情况下,可以调整 GOP 的长度去改善画质, GOP的长度越长,所得到的P 帧和 B 帧更多,画面的质量和细节就会更好。

 

3.Slice片

        一帧图像可以分成若干片,每一片又可分成若干个宏块。宏块是视频的最小单位。

        为了并行编码,所以引入了片的概念,所谓的并行编码就是把一帧图像分成几个片,每个片相互独立进行编码。

        


http://www.ppmy.cn/devtools/103191.html

相关文章

算法训练营|图论第5天

题目&#xff1a;107.寻找存在的路径 题目链接&#xff1a; 107. 寻找存在的路径 (kamacoder.com) 代码&#xff1a; #include<bits/stdc.h> #include<unordered_map> #include<unordered_set> using namespace std; vector<int>father; int find(…

AOP基础讲解

AOP 概述 AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过 预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续&#xff0c;是软件开发中的一个热点&#xff0c;是 java 开发中的一个…

MySQL 延迟从库介绍

前言&#xff1a; 我们都知道&#xff0c;MySQL 主从延迟是一件很难避免的情况&#xff0c;从库难免会偶尔追不上主库&#xff0c;特别是主库有大事务或者执行 DDL 的时候。MySQL 除了这种正常从库外&#xff0c;还可以设置延迟从库&#xff0c;顾名思义就是故意让从库落后于主…

Android解析异步消息处理机制

文章目录 Android解析异步消息处理机制MessageHandlerMessageQueueLooper Android解析异步消息处理机制 Android中的异步消息处理主要由4个部分组成&#xff1a;Message、Handler、MessageQueue和Looper。其中Message和Handler在上一小节中我们已经接触过了&#xff0c;而Mess…

AI模型:追求全能还是专精?

关于全能型AI和专业型AI产品的比较&#xff0c;确实是一个非常有趣的讨论。以下是我对这两类AI产品的优劣及未来潜力的看法。 一、全能型AI的特点与优劣 特点&#xff1a; 广泛适用性&#xff1a;全能型AI能够处理多个领域的问题&#xff0c;从数学解题到市场营销策略&#…

数据仓库系列12:如何设计一个高效的ETL流程?

你是否曾经面对过这样的场景:数据量激增,处理时间延长,系统性能下降?作为一名大数据开发人员,我深知高效的ETL(提取、转换、加载)流程对于数据仓库的重要性。今天,让我们一起探索如何设计一个能够应对海量数据、保证数据质量、并且高效运行的ETL流程。 目录 1. 为什么ETL流程…

MybatisPlus的LambdaQueryWrapper用法

LambdaQueryWrapper<Tag> 是 MyBatis-Plus 框架中的一个功能强大的查询构造器&#xff0c;它用于构建 SQL 查询条件&#xff0c;特别是针对 Lambda 表达式的支持&#xff0c;使得代码更加简洁、类型安全。在这个例子中&#xff0c;LambdaQueryWrapper<Tag> 被用来构…

【项目日记】高并发内存池项目---整体框架设计

比起那些用大嗓门企图压制世界的人&#xff0c; 让全世界都安静下来听你小声说话的人更可畏。 --- 韩寒 《告白与告别》--- 高并发内存池项目---整体框架设计 1 整体框架2 线程缓存3 中心缓存4 页缓存 1 整体框架 现代很多的开发环境都是多核多线程&#xff0c;在申请内存的…