H264编码原理

news2025/1/31 2:56:20

1.什么是音视频?

比如我们下载的mp4格式(还有rmvb、avi)的电影

2.什么是h264?

对摄像头采集的每一帧视频需要进行编码,由于视频中存在空间和时间的冗余, 需要用算法来去除这些冗余。H264是专门去除这些冗余的算法,我们把这种算法称为H264编码,当然还有mpeg4、vp9等编码,它们的区别就是实现的算法不一样。

3.为什么需要对视频编码?

可能有的人会问可不可以将每一帧保存到文件,音频再单独保存呢?答案是在早期是可以的,在早期放映视频的电影院中,确实是通过保存每一帧的画面数据,音频数据单独存放,来达到保存视频文件的效果。一个胶卷30公斤重,是不是觉得很离谱。随着科技的发展,现在肯定不会这样做了,第一,存储问题。第二,网络传输问题。所以需要对视频编码来去冗余(空间、时间、编码、视觉、知识)。

4.什么是封装格式和编码格式?

比如一个.rar的压缩包,这个压缩包就相当于一个封装格式,压缩包里的文件相当于是编码格式。mp4就是封装格式。如下引用的图所示

5.什么是I帧、P帧、B帧?

如下图byte数据就是

I帧:完整编码的帧叫I帧

P帧:参考之前的I帧生成的只包含差异部分编码的帧叫P帧

B帧:参考前后的帧编码的帧叫B帧

除了I/P/B帧外,还有图像序列GOP

GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧

按显示顺序(播放顺序)排列的帧

 按解码顺序排列的帧

 以上只是简单介绍了一下I帧、B帧、P帧的概念

6.什么是NALU单元?

H264原始码流(又称为裸流),是由一个接一个的NALU单元组成

 上图中的 NALU头 + RBSP(切片) 就相当与一个 NALU 。每个单元都按独立的NAL单元传送。单元的信息头(一个字节)定义了RBSP单元的类型,NAL单元的其余部分为RBSP数据。

7.什么是切片?

视频序列就是一帧一帧的图像

 

把一张图片划分成若干个小的区域,这些小的区域称之为宏块

H264默认是使用 16X16 大小的区域作为一个宏块,也可以划分成 8X8 大小

 

8.程序如何解析上面byte数据的呢?

上面说了分隔符是0x00000001,也就是起始码,根据起始码后面的一个字节的后五位来确定NAL单元的类型,如下图所示

06转为二进制后取后五位并转为十进制为6,表示补充增强信息单元,即SEI

67同上十进制为7 ,表示序列参数集,即SPS

68同上十进制为8 ,表示序图像参数集,即PPS

65同上十进制为5 ,表示IDR图像中的片,即 I帧

 注意:起始码:如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001 。 脱壳操作:为了使NALU主体不包括起始码,在编码时每遇到两个字节(连续)的0,就插入一字节0x03,以和起始码相区别。解码时,则将相应的0x03删除掉。

 

H264解码NAL头信息的nal_referrence_idc(NRI)用于在重建过程中标记一个NAL单元的重要性

1. 值为0表示这个NAL单元没有用预测,因此可以被解码器抛弃而不会有错误扩散
2. 值高于0表示NAL单元要用于无漂移重构,且值越高,对此NAL单元丢失的影响越大
3. NAL头信息的隐藏比特位,在H264编码器中默认为0,当网络识别到单元中存在比特错误时,可将其置为1。隐藏比特位主要用于适应不同种类的网络环境(比如有线无线相结合的环境)

 以上就是NAL单元解码的流程,首先从NAL单元中提取出RBSP语法结构,然后上图所示的流程处理RBSP语法结构,不同的NALU类型走不同的处理流程

上面大概介绍了一下H264的编码原理,H264的压缩原理没有具体介绍,有时间再与大家分享一下,感兴趣的可以去学习一下(帧分组、运动估计与补偿、帧内预测、对残差数据做DCT)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL基础语句小结

🍎道阻且长,行则将至。🍓 目录 一、SQL概述 1.简介 2.格式语法 3.SQL分类 二、DDL操作数据库 1.创建数据库 2.查询与使用 3.删除数据库 三、DDL:操作表 (1)数据类型 (2)创建表 (3)查询当前数据库的表 (4)删除表 (5)修改表 四、DML…

小鹏汽车「错失」智能化好牌

本周,作为小鹏品牌销售主力的P7正式迎来改款发布。3月6日,小鹏P7i迎来首发,作为P7的改款车型,在整车电子架构、三电系统、智能化硬件配置上都进行了全面升级。 基于和G9相同的双Orin-X计算平台两个盲区激光雷达,P7i实现…

RocketMQ基础篇(一)

目录一、发送消息类型1、同步消息2、异步消息3、单向消息4、顺序消费5、延迟消费二、消费模式1、集群模式2、广播模式3、消费模式扩展4、如何配置三、其他用法1、事务消息2、过滤消息1)Tag过滤2)SQL方式过滤源码放到了GitHub仓库上,地址 http…

HyperLPR3车牌识别-Android-SDK光速部署与使用

简介HyperLPR在2023年初已经更新到了v3的版本,该版本与先前的版本一样都是用于识别中文车牌的开源图像算法项目,最新的版本的源码可从github中提取:https://github.com/szad670401/HyperLPRHyperLPR-Android-SDK for JitPackHyperLPR3的官方源…

Prim算法和Kruskal算法到底哪个好?

Prim和Kruskal有啥区别?到底哪个好? 今天做了一道最小生成树的题,发现了一点猫腻! 题目在这里 : 《修路问题1》 文章目录Prim和Kruskal有啥区别?到底哪个好?先说结论PrimKruskal修路问题1——…

不好!有敌情,遭到XSS攻击【网络安全篇】

XSS:当一个目标的站点,被我们用户去访问,在渲染HTMl的过程中,出现了没有预期到的脚本指令,然后就会执行攻击者用各种方法注入并执行的恶意脚本,这个时候就会产生XSS。 涉及方: 用户&#xff0…

Linux端安装MySQL并实现远程连接Navicat

文章目录Linux端安装MySQL(centos版本)Linux端安装MySQL(centos版本) 1、先将MySQL需要的四个rpm安装包上传上去,这里可以使用Xftp软件或者是通过window端使用ftp文件传输方式上传到Linux端,这里选择Xftp来…

基于JavaWeb学生选课系统开发与设计(附源码资料)

文章目录1. 适用人群2. 你将收获3.项目简介4.技术实现5.运行部分截图5.1.管理员模块5.2.教师模块5.3.学生模块1. 适用人群 本课程主要是针对计算机专业相关正在做毕业设计或者是需要实战项目的Java开发学习者。 2. 你将收获 提供:项目源码、项目文档、数据库脚本…

远程办公18年,把一个开源工具变成了价值 75亿美元的跨国企业

把自己的兴趣做成了一份事业,把一个开源工具发展成为一家价值75亿美元的跨国企业,而且还是那种员工做梦都想进入的公司,真正实现了功成名就,这或许是所有程序员的梦想吧。 先来看看这家公司的福利: 员工拥有没有限制的…

git快速入门(1)

1 git的下载与安装1)下载git安装包下载路径:https://git-scm.com/我的操作系统是window,64位的,我下载的Git-2.33.0-64-bit.exe,从官网下载或者从网址下载链接:链接地址:https://pan.baidu.com/…

【MySQL】P8 多表查询(2) - 连接查询 联合查询

连接查询以及联合查询多表查询概述连接查询内连接隐式内连接显式内连接外连接左外连接右外连接自连接联合查询多表查询概述 建表语句见上一篇博文:https://blog.csdn.net/weixin_43098506/article/details/129402302 e.g.e.g.e.g. select * from emp, dept where e…

深入分析@Configuration源码

文章目录一、源码时序图1. 注册ConfigurationClassPostProcessor流程源码时序图2. 注册ConfigurationAnnotationConfig流程源码时序图3. 实例化流程源码时序图二、源码解析1. 注册ConfigurationClassPostProcessor流程源码解析(1)运行案例程序启动类Conf…

Python安装、断点调试

一、安装Python方法 1.1 在Microsoft Store微软商店中搜索Python安装(推荐) 或直接在cmd中Python运行 已经安装了就显示版本号, 如果没有安装过,会直接跳到微软商店 1.2 在python官网中找最新版下载安装 二、VSCODE中运行与断点…

容易混淆的嵌入式(Embedded)术语

因为做嵌入式开发工作虽然跳不出电子行业,但还是能接触到跨度较大的不同行当,身处不同的圈子。诸如医疗,银行,车载,工业;亦或者手机,PC,专用芯片;甚至可能横跨系统开发、…

Vue常见的事件修饰符

前言 vue一共给我们准备了6个事件修饰符,前三个比较常用,后三个少见,这里着重讲下前三个 1.prevent:阻止默认事件(常用) 2. stop:阻止事件冒泡(常用) 3. once:事件只触发一次(常用) 4.captrue:使用事件的捕捉模式(不常用) 5.self:只有event…

案例10---对生产环境的敬畏--生产环境

一:背景介绍 1:上午9:23,老师没有进行上课,但是却又很多的在线人员,并且在线人员的时间也不正确,用户反映问题。 2:开发人员发现用户上课情况异常。 3:10点整,询问项目…

Notepad++ 下载与安装教程

文章目录Notepad 下载与安装教程Notepad 简介一,Notepad 下载二,Notepad 安装Notepad 下载与安装教程 Notepad 简介 Notepad是程序员必备的文本编辑器,Notepad中文版小巧高效,支持27种编程语言,通吃C,C ,Java ,C#, XM…

Android Execution failed for task ‘:app:mergeDebugJavaResource

错误提示 FAILURE: Build failed with an exception.* What went wrong: Execution failed for task :app:mergeDebugJavaResource. > A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction> 2 files found with path k…

不写代码、年薪百万,带你玩赚ChatGPT提示工程-提示应用程序

文章目录前言一、数据生成二、PAL (Program-Aided Language Models): Code as Reasoning总结前言 随着ChatGPT的大火,提示工程在大模型中的重要性不言而喻,本文参考国外Prompt Engineering Guide完成国内中文版本的《提示工程指南》,希望能够…

一文读懂倒排序索引涉及的核心概念

基础概念相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是倒排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下倒排序索引&…