H.264中的帧
导言
高级视频编码 (AVC) 也称为 H.264,是使用最广泛的视频压缩标准。它与所有主要的流式传输协议和容器格式兼容。
当我们使用播放器播放一个视频时,通常会经过:解协议,解封装,音视频解码,音视频同步这几个步骤。其中H.264就是视频解码阶段的标准。通过解封装,可以将数据解析为H.264格式的数据流,通过解码,可以将H.264格式的数据流输出为非压缩的颜色数据,如YUV,RGB等。

视频帧
在视频编码中,视频由一系列连续的图像帧组成。每一帧都代表视频中的一个瞬间图像,而它们之间存在特定的关系。为了压缩视频数据的大小,H.264中有三种不同的帧。
I帧
关键帧是视频序列中的关键参考点,它是独立编码的帧,不依赖于其他帧。
关键帧包含完整的信息,可以独立解码出网站的图像。基于其特性,播放器在进行快进操作时,一般都会跳转到I帧,确保在该关键帧之后的播放过程中可以正常解码和显示视频。这样可以有效减少解码所需的计算量,提高快进操作的响应速度。
P帧
预测帧是相对于关键帧的帧,它通过对前面的关键帧或预测帧进行预测来编码。
P帧相对于I帧具有较小的文件大小,因为它只存储相对于参考帧的差异信息。但是在进行解码时,P帧也需要依赖之前的帧进行解码。
B帧
双向预测帧引入了更复杂的预测方式,利用前后的关键帧和预测帧进行双向预测。
相对于关键帧(I 帧)和预测帧(P 帧)具有更高的压缩效率和更复杂的结构,适当的引入B帧可以显著的较小视频文件的大小,提升视频的传输效率。
帧解码和播放顺序
由于一个视频文件中可能存在I,B,P三种不同的视频帧,所以帧的解码和播放顺序可能会不同。在H.264中,有两个时间戳,一个是PTS,一个是DTS:
- PTS(Presentation Time Stamp):
- PTS 表示视频帧应该被展示的时间。它指示视频帧何时应该在播放器中显示给用户。
- PTS 的时间单位通常是毫秒(ms)或时钟周期,取决于具体的应用和实现。
- PTS 的值不仅受到帧自身的编码时间影响,还受到解码和显示的延迟等因素的影响。
- DTS(Decoding Time Stamp):
- DTS 表示视频帧应该被解码的时间。它指示视频帧何时应该被送入解码器进行解码。
- 与 PTS 不同,DTS 主要关注解码过程,而不是展示过程。
- 在一些情况下,视频帧的 DTS 可能等于其 PTS,但在其他情况下可能存在差异,这取决于编码和解码过程中的各种因素。
在视频中没有B帧时,视频的解码顺序和播放顺序如下:
Stream: I P P P P P P
PTS: 1 2 3 4 5 6 7
DTS: 1 2 3 4 5 6 7
在视频中存在B帧时,视频的解码顺序和播放顺序如下:
Stream: I B B P B B P
PTS: 1 2 3 4 5 6 7
DTS: 1 3 4 2 6 7 5
GOP
全称是Group of Pictures,即画面组,是一组连续的画面。
一个GOP由一系列图像帧组成,这些图像帧通常都是I帧,或者P帧,或者B帧。GOP的长度就是两个I帧之间的距离。
在视频编码中,GOP(Group of Pictures)的结构通常用"M"和"N"来表示:
- M帧(IPredictive周期):表示在两个I帧(包括第一个I帧)之间的帧数,即P帧和B帧的总数。M帧的设定影响着两个I帧之间的编码周期长度。
- N帧(GOP周期):表示两个连续I帧之间的总帧数,包括M帧、I帧以及I帧之间的所有帧。N帧定义了一个GOP的长度。
例如
IBBPBBPBBPBB
其中M=2,N=12。这表示两个I帧之间有10帧,其中包含了2个P帧和8个B帧。这样的结构有助于提高视频编码的压缩效率和压缩质量。
IDR
I帧和IDR帧都是H.264视频编码中的关键帧,所有的 IDR 帧都是 I 帧,但是并不是所有 I 帧都是 IDR 帧。
IDR帧在一些方面和I帧有一些区别。
- IDR帧也是关键帧,但有一个重要的特性是它可以用来随时刷新解码器的状态。
- 当解码器在解码过程中发生错误或需要进行随机访问时,通常会使用IDR帧来重新开始解码。
- IDR帧之后的帧不可以参考之前的帧。
总体而言,IDR帧可以看作是一种特殊类型的I帧,具有附加的刷新解码器状态的功能。在需要在任何时间点重新开始解码时,IDR帧是很有用的。
H.264中的帧的更多相关文章
- H.264中NAL、Slice与frame意思及相互关系
H.264中NAL.Slice与frame意思及相互关系 NAL nal_unit_type中的1(非IDR图像的编码条带).2(编码条带数据分割块A).3(编码条带数据分割块B).4(编码条带数据分 ...
- H.264中NALU、RBSP、SODB的关系 (弄清码流结构)
NALU:Coded H.264 data is stored or transmitted as a series of packets known as NetworkAbstraction La ...
- 【转】H.264中的NAL技术
NAL技术 1.NAL概述 NAL全称Network Abstract Layer,即网络抽象层.在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面 ...
- H.264 中的Annex B格式和AVCC格式
首先要理解的是没有标准的H.264基本流格式.文档中的确包含了一个Annex,特别是描述了一种可能的格式Annex B格式,但是这个并不是一个必须要求的格式.标准文档中指定了视频怎样编码成独立的包,但 ...
- (转载)H.264码流的RTP封包说明
H.264的NALU,RTP封包说明(转自牛人) 2010-06-30 16:28 H.264 RTP payload 格式 H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) ...
- 【视频编解码·学习笔记】2. H.264简介
一.H.264视频编码标准 H.264视频编码标准是ITU-T与MPEG合作产生的又一巨大成果,自颁布之日起就在业界产生了巨大影响.严格地讲,H.264标准是属于MPEG-4家族的一部分,即MPEG- ...
- FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
- H.264学习笔记3——帧间预测
帧间预测主要包括运动估计(运动搜索方法.运动估计准则.亚像素插值和运动矢量估计)和运动补偿. 对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码. A.树状结构分块 H.264的宏 ...
- H.264简介
H.264/MPEG-4 AVC (H.264) 是1995年自MPEG-2视频压缩标准发布以后最新的, 最有前途的视频压缩标准. H.264是由ITU-U和ISO/IEC联合开发组共同开发的最新国际 ...
随机推荐
- 《CUDA编程:基础与实践》读书笔记(2):CUDA内存
1. 全局内存 核函数中的所有线程都能够访问全局内存(global memory).全局内存的容量是所有设备内存中最大的,但由于它没有放在GPU芯片内部,因此具有相对较高的延迟和较低的访问速度,cud ...
- 从原理聊 JVM(五):JVM 的编译过程和优化手段
一.前端编译 前端编译就是将Java源码文件编译成Class文件的过程,编译过程分为4步: 1 准备 初始化插入式注解处理器(Annotation Processing Tool). 2 解析与填充符 ...
- Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)
Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN) 来源: KDD'2023 Google ...
- 图解Spark Graphx基于connectedComponents函数实现连通图底层原理
原创/朱季谦 第一次写这么长的graphx源码解读,还是比较晦涩,有较多不足之处,争取改进. 一.连通图说明 连通图是指图中的任意两个顶点之间都存在路径相连而组成的一个子图. 用一个图来说明,例如,下 ...
- [项目源码] JavaWeb校园宿舍管理系统
jsp校园宿舍管理系统源码,采用Servlet+JSP+MySQL.包含数据库文件,界面采用bootstrap,简洁大方. 项目导入eclipse后的目录结构如下: 关注下面公众号,下载源码
- K8s 多集群实践思考和探索
作者:vivo 互联网容器团队 - Zhang Rong 本文主要讲述了一些对于K8s多集群管理的思考,包括为什么需要多集群.多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实 ...
- freeswitch sofia协议栈调试
概述 freeswitch是一款简单好用的VOIP开源软交换平台. fs内部使用sofia的sip协议栈,本文介绍如何调试跟踪sofia协议栈. 环境 centos:CentOS release 7 ...
- .Net8 AOT+VMP简单的逆向分析
1.前言 测试下VMP加密.NET的强度,选了最新的.Net8+AOT编译,用VMP给它加壳.最后逆向下,简单的分析,本篇看下. 2.概述 一.前奏 首先一段简单的C#代码: namespace Te ...
- Hugging News #0912: Hugging Face 2 人入选时代周刊全球百大 AI 人物
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- AK、SK实现(双方API交互:签名及验证)
参考:https://blog.csdn.net/yqwang75457/article/details/117815474 1.原理 AK/SK: AK:Access Key Id,用于标示用户. ...