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起始码。

相关推荐
铁盒薄荷糖19 分钟前
YT-DLP :基于 youtube-dl 的命令行视频下载工具
音视频
潜创微科技3 小时前
4K 转 MIPI 硬核方案|ITE IT6616 HDMI1.4 转 MIPI CSI/DSI 转换芯片解析
嵌入式硬件·音视频
Code-keys3 小时前
Android Codec2 Filter 算法模块开发指南
android·算法·音视频·视频编解码
EasyDSS5 小时前
私有化视频会议系统/企业级融媒体生产管理平台EasyDSS一体化视频平台赋能各行业数字化
音视频·媒体
2601_949593658 小时前
Flutter_OpenHarmony_三方库_image_picker图片视频采集适配详解
flutter·音视频
hqyjzsb12 小时前
传统剪辑师升级AI视频生成师后接单效率与收入变化
人工智能·aigc·服务发现·音视频·学习方法·业界资讯·ai写作
byte轻骑兵13 小时前
【LE Audio】ASCS精讲[7]: SDP互操作落地,蓝牙音频服务发现全解析
人工智能·音视频·le audio·低功耗音频·ascs
EasyGBS15 小时前
监控通道太多查不过来?国标GB28181视频平台EasyGBS视频质量诊断支持轮询模式,省心太多了
音视频
EasyDSS16 小时前
私有化音视频系统/视频直播点播EasyDSS社交娱乐场景下的一站式音视频技术实践
音视频·娱乐
GlobalInfo16 小时前
全球汽车音频数字信号处理器市场规模、企业排名、市场占有率及前景分析报告(2026-2032)
大数据·汽车·音视频