05-编码篇-H264文件分析

通过前面的分析,我们可以看出常规情况下,是将视频以帧的单位进行处理,比如I帧,P帧,B帧等。
但是这些帧是如何以文件方式保存的呢,这节我们主要对H264的保存方式作一个了解。
一帧图片通过编码后,会编码成一个片或多个片slice。但是为什么会有图像切片,原因如下
(1)鲁棒性良好,把一张图片分成一个个独立的slice,在解码时遇到错误,也可以实现再同步,减少错误蔓延,而代价仅仅是失去了一个slice。
(2)匹配MTU(Maximum Transmission Unit)大小,这涉及到网络层的概念,网络上发包时,每个包的大小受到限制,把图像分割成slice可以减小打包的大小。
(3)并行处理,由于每个slice相互独立的缘故,编码、解码以至环路滤波均可以并行处理,加快处理速度,提高效率。

slice切片以NALU行式保存,如下:在存储过程中,一个切片前面还会对应一个NALU头部
在这里插入图片描述
图1 切片以NALU方式保存

h264的文件序列如下
在这里插入图片描述
图2 文件保存方式

RBSP叫原始字节序列负荷:封装于网络所抽象单元的数据。

一般情况下,一帧图像包括多个切片,一个切片又包括切片头和切片数据,一个切片数据是由多个宏块Macroblock构成,宏块又包括宏块类型、预测类型、CPB、QP和宏块数据,而宏块数据是就是YUV的颜色分量。h264是以NALU形式保存,保存方式如图1和图2所示。另外一帧视频的细节是怎样的,可以查看下图的分解步骤。
在这里插入图片描述
图3 一帧图像由宏观到微观描述

下面的图片是h264的码流分层结构的具体细节
在这里插入图片描述
在一个h264视频中,最前面的数据是起始码,起始码是在NALU头部之前,假如NALU对应的Slice为一帧的开始,用十六进制00,00,00,01四个字节表示,否则用00,00,01的三个字节表示。另外在编码中,每遇到两个00 00 就会在其后插入一个03字节,保证干扰起始码的确认。在解码过程删除03字节。

最后描述的是视频序列,图像,切片,宏块,子块之前的关系。如下图所示
在这里插入图片描述

一个h264文件中相应的存储方式图如下:
在这里插入图片描述
上图中的几个概念,描述如下:
序列参数集SPS:包括一个图像序列的所有信息,即两个 IDR 图像间的所有图像信息,如图像尺寸、视频格式等
picture参数集PPS:包括一个图像的所有分片的所有相关信息, 包括图像类型、序列号等,解码时某些序列号的丢失可用来检验信息包的丢失与否
下面打开一个h264文件,可以看出,绿框所描述的是起始码,而箭头所示的67表示SPS开头,68表示PPS开头,65表示I帧的开头
在这里插入图片描述
整个文件大概内容如下。而帧内部的slice区分靠000001起始码。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回显服务器(基于TCP)

目录 API学习 ServerSocket Socket 服务端 思路分析 具体实现 客户端 思路分析 具体实现 运行测试 问题分析 修改优化 完整代码 在学习了基于UDP实现的回显服务器后,我们学习基于TCP实现的回显服务器 API学习 ServerSocket ServerSocket是创建TCP服…

07:指针

指针 1、什么是指针1.1、地址的定义1.2、指针的作用 2、指针的分类2.1、基本类型指针2.2、指针和数组2.2.1、指针和一维数组2.2.1.1、一维数组名2.2.1.2、下标和指针的关系2.2.1.3、确定一维数组需要几个参数2.2.1.4、指针变量的运算2.2.1.5、指针变量占用几个字节 2.2.2、动态…

2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏

文章目录 1 特殊文件夹 Editor2 在 Unity 菜单栏中添加自定义页签3 在 Hierarchy 窗口中添加自定义页签4 在 Project 窗口中添加自定义页签5 在菜单栏的 Component 菜单添加脚本6 在 Inspector 为脚本右键添加菜单7 加入快捷键8 小结 1 特殊文件夹 Editor ​ Editor 文件夹是 …

[职场] 公安管理学就业方向及前景 #媒体#笔记#笔记

公安管理学就业方向及前景 公安管理学是中国普通高等学校本科专业。本专业文理兼收,学制4年,授予法学学士学位。本专业培养掌握马克思主义基本原理,政治坚定,坚持党和国家的路线、方针、政策,具有良好职业素养、科学素…

嵌入式Qt 第一个Qt项目

一.创建Qt项目 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框,选择Qt Widgets Application 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步 选…

应急响应实战笔记01入侵排查篇(5)

第5篇:勒索病毒自救指南 前言 经常会有一些小伙伴问:中了勒索病毒,该怎么办,可以解密吗? 第一次遇到勒索病毒是在早几年的时候,客户因网站访问异常,进而远程协助进行排查。登录服务器&#x…

Python算法题集_排序链表

Python算法题集_排序链表 题148:排序链表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【冒泡大法】2) 改进版一【列表排序】3) 改进版二【数值归并排序】4) 改进版三【快慢指针归并排序】 4. 最优算法 本文为Python算法题集之一的…

Confluence CVE-2023-22527利用工具

介绍 Confluence CVE 2021,2022,2023 利用工具,支持命令执行,哥斯拉,冰蝎 内存马注入 支持 Confluence 版本:CVE-2021-26084,CVE-2022-26134,CVE_2023_22515,CVE-2023-2…

中年中产程序员从西安出发到海南三亚低成本吃喝万里行:西安-南宁-湛江-雷州-徐闻-博鳌-陵水-三亚-重庆-西安(2.游玩过程)

文章大纲 出发时间:Day1-1月25日星期四,西安飞南宁路途中:Day2-1月26日星期五,南宁-湛江-住雷州(曾经支教过的地方)【晚上买徐闻到海安新港】路途中:Day3-1月27日星期六,雷州-徐闻渡…

前端JavaScript篇之Promise解决了什么问题、Promise.all和Promise.race的区别的使用场景

目录 Promise解决了什么问题Promise.all和Promise.race的区别的使用场景 Promise解决了什么问题 Promise 解决了 JavaScript 中回调地狱的问题。在传统的回调函数中,如果需要依次执行多个异步操作,就需要使用嵌套的回调函数,这样会导致代码难…

UE5 播放本地MP3、MP4

1.创建一个媒体播放器 2.如创建视频,勾选。 它会多一个媒体纹理给你 3.1 设置音频 在一个actor上添加“媒体音频组件” “音频媒体播放器”赋值给它 3.2播放音频 添加一个音频媒体播放器变量, 赋值 地址使用绝对地址 4.1设置视频 UI上创建一个imag…