H264编码流程_h.264编码流程-程序员宅基地

技术标签: Android音视频开发  H264编码流程  

H264编码流程手绘图:

 H264编码网上图:

I 帧

Fn(左上)是当前要编码的帧,他是 GOP 中的第一帧,也就是 I 帧,I 帧要进行帧内编码,首先要选择预测模式(Choose Intra prediction),然后进行帧内预测(Intra prediction),然后把每一个宏块的预测模式计算出来,然后进行量化( T ),再经过无损编码( Q ),最后进行拆包( Reorder )和熵编码( Entropy encode ),打成 NAL 头进行数据分发。

B 帧和 P 帧

Fn-1(中间)是 B 帧或 P 帧,首先要经过运动评估( ME ),对每一个宏块进行匹配查找,完成之后拿到运动矢量( MC ),根据运动矢量推断出运动评估之后帧的值,再与当前帧做残差值(残差值=当前帧-运动评估值),残差值与运动矢量相加,就可以得到当前帧数据,然后进行无损编码,最后生成 NAL 数据。

其中 Choose Intra prediction 和 Intra predictio 都是帧内压缩,ME(运动估计) 和 MC(运动补偿) 都是帧间压缩,T(DCT量化) 与 Q(VLC/CABAC熵编码) 都是无损压缩。

上面就是编码流程,解码就是反向操作,如下图:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuqingsen1/article/details/119182053

智能推荐

JAVA中使用JSON进行数据传递_java 如何实现 动态json里面有个json 想js 一样进行连点拿去数据-程序员宅基地

文章浏览阅读773次。最近在做一个基于JAVA Servlet的WEB应用以及对应的Anroid应用客户端的开发工作。其中,在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在WEB前端或者Android客户端使用JSON来解析接收到的数据。首先,在JAVA中使用JSON需要引入 org.json 包(点击这里 可以下载相应的JAR包!_java 如何实现 动态json里面有个json 想js 一样进行连点拿去数据

java对接Modbus_java modbus-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏11次。Modbus是一种单主站的主/从通信模式,它定义了一种通讯规范,用于在工业自动化系统中实现设备之间的数据交换。Modbus网络上只能有一个主站存在,主站在Modbus网络上没有地址,而从站的地址范围为0-247,其中0为广播地址,从站的实际地址范围为1-247。Modbus通信协议可以通过多种传输方式传播,如RS232C、RS485、光纤和无线电等。它具有两种串行传输模式,即ASCII和RTU,它们定义了数据如何打包和解码的方式。_java modbus

WINCE实现的基本功能_wince可以实现哪些功能-程序员宅基地

文章浏览阅读1.6k次。2008--8--61。修改LCD参数--------支持的像素/RGB格式《5/6/5---5/5/5》/前后仰参数修改2。USB键盘与鼠标/U盘3。电池电量检测-------BAT组件4。注册表永久保存5。多国语言支持----MUI6。ACTIVESY_wince可以实现哪些功能

IOS技术栈总结_ios开发技术栈-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏7次。IOS技术栈总结自己开发中使用或接触到的技能集合,整理了一份IOS开发的技能栈。_ios开发技术栈

android activity之间跳转和数据传递参数,Activity跳转(有返回数据跳转)以及传递参数和回传参数...-程序员宅基地

文章浏览阅读1.6k次。使用Bundle在Activity之间传递数据Bundle类是一个key-value对,是一个final类两个Activity之间通信可以用Bundle类实现步骤:新建一个Bundle类Bundle bundle=new Bundle();bundle类中加入数据(key-value的形式)bundle.putString("data", "张三");新建一个Intent对象,并将该Bundle加..._activity间跳转和数据传递需借助于intent对象,该对象通过( )的形式保存数据

数据库驱动【获取connection对象】【篇幅一】_html获取connection对象-程序员宅基地

文章浏览阅读976次。我们不应该仅仅靠记忆来掌握技术,我们要靠我们自身的逻辑分析能力,理出一道逻辑线,总结出学习技术和解决技术问题的方法论,记忆知识帮助我们快速拿出东西解决问题,而方法论才是我们面临后续挑战的真正手段。本次分析基于mysql驱动8.0.13版本 public static Connection getConnection(String url, String user, S..._html获取connection对象

随便推点

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

DW个人网站制作成品 简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码_dw成品网站成品-程序员宅基地

文章浏览阅读1w次,点赞17次,收藏97次。网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程序方面:计划采用最新的网页编程语言HTML5+CSS3+JS程序语言完成网站的功能设计。并确保网站代码兼容目前市面上所有的主流浏览器,已达到打开后就能即时看到网站的效果。网站素材方面:计划收集各大平台好看的图片素材,并精挑细选适合网页风格的图片,然后使用PS做出适合网页尺寸的图片。网站文件方面:网站系统文件种类包含:html网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件;_dw成品网站成品