入门理解H264编码

音视频开发系列--H264编解码总结 H264,通常也被称之为H264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)对摄像头采集的每一帧视频需要进行编码,由于视频中存在空间和时间的冗余,需要用算法来去除这些冗余。H264是专门去除这些冗余的算法,我们把这种算法称为H264编码H264的出现就是为了创建比以前的视频压缩标准更高效的压缩标准,使用更好高效的视频压缩算法来压缩视频的占用空间,提高存储和传输的效率,在获得有效的压缩效果的同时,使得压缩过程引起的失真最小。 阅读详情

 最近入门音视频技术,一直在学习H264编解码标准,了解了不少关于H264的相关知识,对于网上各种类型的资料,始终没有找到一篇适合的知识梳理资料。可能是查找方式不对,所以花费了比较多的时间。经过一段时间的熟悉后结合网上各类大神的指导资料和自己的理解决定自己整理一下关于H264编解码标准的知识。以后方便自己查阅,也让更多刚入门的人提供一个参考资料,由于是初次涉及,所以有些地方可能有理解不全面或有误,望各位前辈大神多多指导,不胜感激;
        主要的参考资料在已贴在后面,大家可以详细了解;

0、序言

        首先要弄明白编码的目的,有目的的学习效率会更好。编码是为了将数据进行压缩,这样在传输的过程中就不会使资源被浪费,用一个简单的例子来说明编码的必要性:
        当你此刻显示器正在播放一个视频,分辨率是1280*720,帧率是25,那么一秒所产生正常的数据大小为:
         1280*720(位像素)*25(张) / 8(1字节8位)(结果:B) / 1024(结果:KB) / 1024 (结果:MB) =  2.75MB
        显然一秒这么大的数据你是无法接受的,所以如果不将数据进行压缩,那么只能一首凉凉表达此刻的感受了;

1、前言

    H264里面很多文章梳理,具体标准定义就不多赘述了,但是有些概念一定要弄明白,这样在后面我就是因为有些概念模糊所以在理解某些知识点十分吃力,例如序列、GOP等等,我会逐一在后面描述到。

    H264在视频采集到输出中属于编解码层次的数据,如图1所示,是在采集数据后做编码压缩时通过编码标准编码后所呈现的数据。


                                                   图1

2、H264相关概念

2.1序列

      H264编码标准中所遵循的理论依据个人理解成:参照一段时间内相邻的图像中,像素、亮度与色温的差别很小。所以当面对一段时间内图像我们没必要去对每一幅图像进行完整一帧的编码,而是可以选取这段时间的第一帧图像作为完整编码,而下一幅图像可以记录与第一帧完整编码图像像素、亮度与色温等的差别即可,以此类推循环下去。
       什么叫序列呢?上述的这段时间内图像变化不大的图像集我们就可以称之为一个序列。序列可以理解为有相同特点的一段数据。但是如果某个图像与之前的图像变换很大,很难参考之前的帧来生成新的帧,那么久结束删一个序列,开始下一段序列。重复上一序列的做法,生成新的一段序列。
2.2、帧类型
         H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成,一个宏块由16x16的yuv数据组成。宏块作为H264编码的基本单位。 
        在H264协议内定义了三种帧,分别是I帧、B帧与P帧。I帧就是之前所说的一个完整的图像帧,而B、帧与P帧所对应的就是之前说的不编码全部图像的帧。P帧与B帧的差别就是P帧是参考之前的I帧而生成的,而B帧是参考前后图像帧编码生成的。
2.3、GOP(画面组)
        GOP我个人也理解为跟序列差不多意思,就是一段时间内变化不大的图像集。GOP结构一般有两个数字,如M=3,N=12。M指定I帧和P帧之间的距离,N指定两个I帧之间的距离。上面的M=3,N=12,GOP结构为:IBBPBBPBBPBBI。在一个GOP内I frame解码不依赖任何的其它帧,p frame解码则依赖前面的I frame或P frame,B frame解码依赖前最近的一个I frame或P frame 及其后最近的一个P frame。
2.4、IDR帧(关键帧)
        在编码解码中为了方便,将GOP中首个I帧要和其他I帧区别开,把第一个I帧叫IDR,这样方便控制编码和解码流程,所以IDR帧一定是I帧,但I帧不一定是IDR帧;IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始算新的序列开始编码。I帧有被跨帧参考的可能,IDR不会。
I帧不用参考任何帧,但是之后的P帧和B帧是有可能参考这个I帧之前的帧的。IDR就不允许这样,例如:
IDR1 P4 B2 B3   P7   B5 B6  
H264编码基础概念+格式分析   一、编码基础概念 1、为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成。一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧画面(一般是30帧),假如该视频是一个1280x720分辨率的视频,那么不经过编码一秒钟的大小: 结果:1280x720x60≈843.75M 所以不经过编码的视频根本没法保存,更不用说传... 阅读详情

相关推荐

2024年最新入门理解H264编码(1),那些BAT大厂的物联网嵌入式开发面试官到底在想些什么

如我们所见,每个分片也包含着头和数据两部分,分片头中包含着分片类型、分片中的宏块类型、分片帧的数量以及对应的帧的设置和参数等信息,而分片数据中则是宏块,这里就是我们要找的存储像素数据的地方;和帧间编码信息数据块不通的是,帧内编码信息能防止进一步的偏差,因此比帧间编码信息更重要。从容纳数据角度来说,NAL单元除了容纳Slice编码的码流外,还可以容纳其他数据,这也就是为什么有SPS、PPS等这些数据出现的原因,并且这些数据在传输H264码流的过程中起到不可或缺的作用,具体作用上面也是有讲到的。

2401_85013615的博客 735

将视频 YUV 格式编码H264

首先开始的时候我们插入一张雷神大大的图帮助大家理解一下我们今天的操作究竟属于那一步。 音视频格式封装层次 从上图可以看出我们要做的,就是将像素层的 YUV 格式,编码编码层的 h264数据。 前面讲到我们已经成功编译出 iOS 中可用的 ffmpeg 的库了,那么我们首先熟悉一下今天我们要用到的 ffmpeg 中的函数和结构体 AVFormatContext: 数据文件操

ZH952016281的博客 2万+

深入讲解音视频编码原理,H264码流详解——手写H264编码

音视频高手课08-H264 I帧 P帧 B帧及手写H264编码器 1 三种帧的说明 1、I 帧:帧内编码帧,帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面) I 帧的特点: a. 它是一个全帧压缩编码帧,它将全帧图像信息进行JPEG压缩编码及传输 b. 解码时仅用I 帧的数据就可重构完整图像 c. I 帧描述了图像背景和运动主体的详情 d. I 帧不需要参考其他画面而生成 e. I 帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各.

鸿蒙开发知识记录 3672

H.264编码详解

这里FQ是量化后的值,y是原来的系数,Qstep是量化步长(对亮度一般有52种,对于色度有40种),round表示向下取整(量化后一般右下角的数据都会舍去,就是变成0)。上面提到DCT,在经过DCT变换后,有效的图像信息会聚集在低频(如左上角),而高频(如右下角)的信息一般是不必要的,而通过量化则可以去掉这些不必要的高频信息以达到压缩的效果。帧内预测参考每像素块的相邻像素来预测,4×4亮度分量使用子块上方4个,右上方4个,左侧4个,左上顶点1个,总共13个像素来预测构建。C(u)是归一化矩阵,

Garllic的博客 5910

H264 编码基本原理

H.264,同时也是 MPEG-4 第十部分,是由 ITU-T 视频编码专家组(VCEG)和 ISO/IEC 动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为 H.264/AVC(或者 AVC/H.264 或者 H.264/MPEG-4 AVC 或 MPEG-4/H.264 AVC)。是一种面向块,基于运动补偿的视频编码标准。...

hello_1995的博客 1万+

入门理解H264编码(转)

入门理解H264编码 2018年05月17日 16:50:27 go_str 阅读数:2107  版权声明:转载请注明出处,谢谢 https://blog.csdn.net/go_str/article/details/80340564    最近入门音视频技术,一直在学习H264编解码标准,了解了不少关于H264的相关知识,对于网上各种类型的资料,始终没有找到一篇适合的知识梳理资料。可能...

luzubodfgs的专栏 664

音视频开发之入门理解H264编码

0、序言 首先要弄明白编码的目的,有目的的学习效率会更好。编码是为了将数据进行压缩,这样在传输的过程中就不会使资源被浪费,用一个简单的例子来说明编码的必要性: 当你此刻显示器正在播放一个视频,分辨率是1280*720,帧率是25,那么一秒所产生正常的数据大小为: 1280*720(位像素)*25(张) / 8(1字节8位)(结果:B) / 1024(结果:KB) / 1024 (结果:MB) = 2.75MB 显然一秒这么大的数据你是无法接...

yinshipin007的博客 399

H264入门

这篇文章写的比较有逻辑,容易理解

weixin_53455155的博客 198

2024年入门理解H264编码,2024年最新解锁物联网嵌入式开发性能优化的五大误区

如我们所见,每个分片也包含着头和数据两部分,分片头中包含着分片类型、分片中的宏块类型、分片帧的数量以及对应的帧的设置和参数等信息,而分片数据中则是宏块,这里就是我们要找的存储像素数据的地方;参数集(Parameter sets),参数集是携带解码参数的NAL单元,参数集对于正确解码是非常重要的,在一个有损耗的传输场景中,传输过程中比特列或包可能丢失或损坏,在这种网络环境下,参数集可以通过高质量的服务来发送,比如向前纠错机制或优先级机制。这些信息是最重要的,因为离开他们,被的数据块种的码元都无法使用。

2401_85013639的博客 975

解析H.264码流

1,入门理解H264编码 https://www.seotest.cn/jishu/28532.html 2,一步一步解析H.264码流的NALU(SPS,PSS,IDR) http://guoh.org/lifelog/2013/10/h-264-bit-stream-sps-pps-idr-nalu/ https://www.jianshu.com/p/19fa110c2383 3,h.264-guide.md https://gist.github.com/Akagi201/96add5c

king52113141314的博客 270

1.1 海思3518 H264编码

海思的SDK里其实有H264编码的sample,但因为要匹配很多东西,代码有点复杂,让初学都感到有点混乱。我根据sample自己修改了一下代码,从最简单的情况(确定摄像头类型,只选一种尺寸的图片,只用一个通道)来说明海思HI3518是怎么编码H264的。先把源代码下载下来,再分析程序。下载链接:https://download.csdn.net/download/zhanshenrui/1032...

zhanshenrui的博客 8504

音视频入门H264&AAC

音视频基础知识简述: 录像、录音,实质上是一个压缩采集到的图像或者音频数据的过程,这个过程又称为编码,混合。那为什么需要编码(压缩)呢?因为设备采集到的音视频数据太大了,如果不进行压缩,占用的空间太大,不利于传输等。 而播放视频或者音频文件,实质上是一个解压缩的过程,这个过程又称为解码。那为什么又要解码(解压缩)呢?因为播放器播放需要的是音频采样数据、视频像素数据,通俗一点来说就是需要的是编码之前...

u011509690的博客 1万+
上一篇: 浅窥Linux编译过程
下一篇: USB传输之控制传输
go_str
博客等级 码龄10年 230粉丝 13原创
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值