H.264编码

news2024/11/23 4:31:29

1.为什么要对视频进行编码

       视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像,由于人眼的视觉暂留效应,当帧序列以一定的速率播放时,我们看到的就是动作连续的视频,这么多连续的图像数据如果不经过编码则数据量太大了。

2.H.264编码框架

H.264码流文件分为两层

(1)VCL(Video Coding Layer,视频编码层): 负责高效的视频内容表示,VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。

(2)NAL (Network Abstraction layer,网络提取层): 负责以网络所要求的恰当的方式对数据进行打包和传送,是传输层。I不管在本地播放还是网络播放,都要通过这一层来传输。

VCL就是被压缩编码后的原始数据

将VCL数据封装到NAL单元中,才可以用于传输和存储

3.H.264码流分析

一般H.264编码器的默认输出为:起始码+NAL单元(NALU)。起始码为:0x00000001或者0x000001

(1)NAL单元

H.264的编码视频序列包括一系列的NAL单元。

一个NAL单元=一个原始字节序列负载(RBSP)+一个对应于视频编码的NAL头文件

H.264码流NAL单元序列如图

(2)NAL Header

通过解析NAL头部,可以确定每个NAL单元的帧类型IPB帧。

l帧:帧内编码帧,关键帧,l帧可以看作一个图像经过压缩之后的产物,可以单独解码出一个完整的图像。
P:前向预测编码,记录了本帧跟之前的一个关键帧(或P)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。
B帧:双向预测编码帧,记录了本帧与前后帧的差别,解码需要参考前面一个I帧或者P帧,同时也需要后面的P帧才能解码一张完整的图像。

NAL头的组成:

NAL头由一个字节组成,如下所示:

语法:禁止位(1位)、重要性指示位(2位)、NALU类型(5位)

|0|1|2|3|4|5|6|7|

|F|NRI| Type|

NAl头信息的每一位说明如表所示

01~23~7
简称FNRITYPE
全称forbidden_zero_bitnal_ref_idcnal_unit_type
中文禁止位重要性指示位NALU类型
作用当网络发现NAL单元有比特错误时,可设置该比特为1,以便接收方丢掉该单元标志该NAL单元用于重建时的重要性,值越大,越重要,取值为00~111~23表示单个NAL包,24~31需要分包或者组合发送。

nal_unit_type取值的含义如下:

    

(3)原始字节序列负载(RBSP)

每个NAL单元包含一个RBSP。典型的RBSP单元序列如图

每个单元都独立的NAL单元传送。NAL单元的信息头(1字节)定义了RBSP单元的类型,NAL单元的其余部分为RBSP数据。

RBSP各部分的解释:

RBSP描述
参数集PS序列的全局参数
增强信息SEI视频序列解码的增强信息
图像定界符视频图像的边界
编码片(Slice)的头信息和数据
数据分割DP片层的数据,用于错误恢复解码
序列结束符表明下一图像为IDR图像
流结束符表明该流中已没有图像
填充数据元数据,用于填充字节

片(Slice):
一帧图片经过 H.264 编码器之后,就被编码为一个或多个片 (slice),每片包含整数个宏块(至少一个宏块,最多包含整个图像宏块),NAL单元就是装载着这些片 (slice)的载体。

片的语法结构:片头规定了片的类型,属于哪个图像、有关的参考图像等;片的数据包含了一系列宏块和不编码数据。

4.H.264编码原理

       H.264编码的原理是通过利用帧内和帧间的相关性、运动估计、变换、量化和熵编码等技术来减小视频数据的体积,从而实现高效的视频压缩。解码器在接收到H.264编码的视频流后,通过反向过程将其还原为可视的视频序列,以实现视频的播放和显示。

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

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

相关文章

在python3上使用pyautogui模拟鼠标键盘操作删除垃圾邮件

在PyPI The Python Package Index网站上搜索pyautogui,可以看到最新版本python3可用,本机环境:win7 64位,python3.8.10。之前写过一篇python2的文章,参考用python使用pyautogui库实现按键精灵模拟鼠标键盘找图的功能_…

如何看待unity新的收费模式

Unity的由来: Unity 是一款跨平台的游戏引擎,由 Unity Technologies 公司开发和维护。Unity 的起源可以追溯到 2002 年,当时 Unity Technologies 创始人之一的 David Helgason 在丹麦创建了一个名为 Over the Edge Entertainment 的游戏开发…

GLTF编辑器教你区分自发光贴图和光照贴图

什么自发光贴图 自发光贴图(Emissive Mapping)是一种用于在计算机图形学中模拟自发光效果的技术。它可以将光源直接嵌入纹理贴图中,以模拟物体表面具有发光效果的材质。 传统的纹理贴图只能模拟物体表面的颜色和纹理,无法模拟物体…

【Unity3D赛车游戏制作】开始界面场景搭建

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

【计算机网络笔记二】网络层

IP 地址分类和子网掩码 IPv4 地址—简称 IP 地址,IP 地址由 32 位比特组成 IP地址现在由因特网名字和数字分配机构 ICANN(Internet Corporation for Assigned Names and Numbers)进行分配,IP地址的作用:用于网络寻址&…

基于Java的酒店管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【pytest】 参数化@pytest.mark.parametrize

1.创建 test_parametrize.py 通过 pytest.mark.parametrize 方法设置参数 import pytestimport math#pytest参数化 pytest.mark.parametrize("base,exponent,expected", # 参数变量名称# 每个元组都是一条测试用例测试数据[(2,2,4),(3,3,9),(1,9,1),(0,9,0)],i…

为什么网络安全缺口很大,而招聘却很少?学网络安全真的没有前途吗?

2020年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢&#xff1…

多线程进阶学习笔记

文章目录 多线程进阶学习前言1、线程的状态1.1 线程状态相关介绍1.2 状态切换演示示例一示例二示例三 2、线程池2.1 线程池的实现2.2 JDK中的线程池2.2.1 Executors2.2.2 ThreadPoolExecutor2.2.3 线程池的工作原理2.2.4 任务拒绝策略 3、volatile关键字3.1 可见性问题3.2 JMM3…

Learn Prompt-Prompt 高级技巧:HuggingGPT

HuggingGPT是一个 Agent 框架,利用 ChatGPT 作为任务规划器,根据每个模型的描述来选择 HuggingFace 平台上可用的模型,最后根据模型的执行结果生成总结性的响应。这个项目目前已在 Github 上开源,并且有一个非常酷的名字叫做 JARV…

【5G PHY】物理层逻辑和物理天线的映射

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

MQ - 01 消息队列发展史MQ通用架构

文章目录 导图PreMQ 发展史消息队列的发展脉络MQ选型考虑因素消息 和 流消息队列的架构和功能什么情况下会使用消息队列?架构和功能的基本概念架构层面的基本概念功能层面的基本概念4款主流消息队列的区别和建议对比图导图 Pre MQ - 闲聊MQ一二事儿

字符串的大小(补充)

字符串大小 strlen对char b[ ] { ‘a’,‘b’,‘c’};不知道 ’\0‘在哪里&#xff0c;读取的是一个字符串 #include <iostream> using namespace std; int main() {char a[] { "abcde" };char b[] { a,b,c};cout << sizeof(a)/sizeof(a[0]) <&l…

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 Python函数绘图与高等代数互融实例(五…

运营商停止提供公网IP地址,如何远程访问网络服务?

前段时间&#xff0c;广州电信宣布自2023年10月1日起&#xff0c;将不再为新装宽带和双栈宽带的用户提供公网IPv4地址。其实&#xff0c;自去年开始&#xff0c;中国三大运营商的各地分公司都纷纷宣布停止提供公网IPv4地址&#xff0c;这一决策的理由也都是IPv4公网地址资源已经…

JavaScript混淆工具大比拼:JScrambler和JShaman哪个更胜一筹?

两款顶级JavaScript混淆工具测评&#xff1a;JScrambler和JShaman 出于JavaScript代码安全需求&#xff0c;JavaScript混淆已经被广泛使用。在这个领域中&#xff0c;有免费的小工具&#xff0c;也有专业、商业级的产品。 商业产品在功能强度、保护效果、稳定性等各方面都是全…

胶质层指数

声明 本文是学习GB-T 397-2022 商品煤质量 炼焦用煤. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了炼焦用商品煤产品质量等级和技术要求、试验方法、检验规则、标识、运输及贮存。 本文件适用于生产、加工、储运、销售、使用…

qt状态机QtState

文章目录 前言例子一 :官方文档的例子1. 抓住重点:初步认识状态机完整代码 2. 抓住重点:状态机中的状态共享 (进一步完善)完整代码 3. 抓住重点:使用历史状态保存和恢复当前状态(进一步完善)完整代码 4. 抓住重点:使用并行状态来避免状态组合爆炸(进一步完善)完整代码&#xff…

【斗破年番】彩鳞遭捆绑,萧炎单手抱彩鳞,有谁注意到小医仙流泪

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗破苍穹年番 斗破年番新一集已经更新&#xff0c;很显然这集仅仅只是过渡集。整体而言质量的确不太行&#xff0c;尤其是场景的刻画实在是太过粗糙。完全就是将“廉价”二字体现得淋漓尽致。不过随着剧情的跟进&#xff…