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

相关推荐
ZC跨境爬虫7 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
weixin_451431569 小时前
【学习笔记】微博视频页面ajax请求与响应数据分析
笔记·学习·音视频
潜创微科技16 小时前
IT6616:HDMI1.4 转 MIPI CSI/DSI 4K 单芯片视频转换方案
音视频
hhdyzwhy16 小时前
彩色血流成像(三):滤波
音视频
EasyDSS18 小时前
视频高清直播点播/智能会议管理系统EasyDSS优化升级提升视频会议协作体验
音视频
DogDaoDao19 小时前
AV1 环路滤波器深度解析:av1_loopfilter.c 源码原理详解
音视频·实时音视频·视频编解码·av1·vp9·libaom·环路滤波
ZC跨境爬虫20 小时前
跟着MDN学HTML_day_47:(Document接口)
前端·javascript·ui·html·ecmascript·音视频
YuxuanSys-Regen20 小时前
WMMAV&YUXUANSYS/育轩:Dante主机接入手持发射器:让会议音频进入“无线高保真”时代
音视频·腾讯会议·teams·dante·无线手持·音频设备
kcuwu.20 小时前
博客转抖音视频(文件上传版)Coze工作流实现文档(第一版)
人工智能·音视频·coze
沙振宇21 小时前
【Python】使用YOLO8识别视频中的车与人物
python·yolo·音视频·状态模式·识别