H264码流结构讲解

2024-08-30 01:04
文章标签 讲解 结构 h264 码流

本文主要是介绍H264码流结构讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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片

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

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

        

这篇关于H264码流结构讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119355

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c