一个完整的视频包(通常指H.264/H.265等编码格式的数据包)是分层组织的,其结构可类比为快递打包的分层套娃模型。以下是各层级的核心组成部分:

📦 ​​一、视频包的层级结构​​
​​1. 全局参数层(外箱)​​
​​SPS(序列参数集)​​
​​作用​​:全局“说明书”,定义分辨率、帧率、编码档次(Profile)、级别(Level)等。
​​位置​​:视频流开头独立传输。
​​必要性​​:无SPS则解码器无法解析后续数据。
​​PPS(图像参数集)​​
​​作用​​:单帧解码参数,如量化表、熵编码模式(CABAC/CAVLC)。
​​位置​​:紧随SPS后传输,每个GOP(图像组)开头可能更新。
​​2. 帧组层(中箱)​​
​​GOP(图像组)​​
​​组成​​:以I帧开头,包含多个P/B帧。
​​作用​​:支持随机播放(从任意GOP开始解码),减少误差传播。
​​长度​​:I帧间隔(如N=30表示1秒一个I帧)。
​​3. 帧/切片层(小包裹)​​
​​I帧(关键帧)​​
​​特点​​:独立编码,携带完整画面;是GOP的起点和解码基准。
​​数据量​​:最大(压缩率约7:1),类似JPEG压缩。
​​P帧(前向预测帧)​​
​​特点​​:参考前一I/P帧,存储运动矢量和残差数据。
​​数据量​​:约为I帧的1/3。
​​B帧(双向预测帧)​​
​​特点​​:参考前后帧,压缩率最高(可达I帧的1/9)。
​​缺点​​:解码需缓存前后帧,增加延迟。
​​切片(Slice)​​
​​作用​​:将一帧分割为多个块(如水平条带),网络丢包时仅影响局部。
​​切片头​​:记录帧类型(I/P/B)、参考帧索引。
​​4. 数据块层(最小零件)​​
​​宏块(Macroblock)​​
​​组成​​:16×16像素块,包含预测模式、运动矢量、残差数据。
​​子块​​:可细分为4×4或8×8块处理细节。
⏱️ ​​二、时间与同步信息​​
​​DTS(解码时间戳)​​
指示数据包的解码顺序(因B帧需调整顺序)。
​​PTS(显示时间戳)​​
指示画面的显示顺序(用户看到的顺序)。
​​时间基(Time Base)​​
时间戳的刻度单位(如视频流为1/90000秒)。
📊 ​​三、元数据与封装信息​​
​​元素​​ ​​作用​​
​​分辨率​​ 单帧像素维度(如1920×1080)。
​​帧率​​ 每秒帧数(如30 FPS)。
​​色彩格式​​ 通常为YUV 4:2:0(亮度+降采样色度)。
​​容器封装​​ 如MP4/MOV,存储音视频流、时间戳、元数据。
​​流索引​​ 标识包属于视频流或音频流(如stream_index=0)。
🔄 ​​四、编码与传输规则​​
​​顺序强制​​
SPS/PPS必须在视频流开头传输。
I帧必须在GOP首位。
​​存储顺序 ≠ 显示顺序​​
显示顺序:I → B → B → P
存储顺序:I → P → B → B(B帧需提前解码后续P帧)。
​​错误恢复机制​​
切片独立解码,局部丢包不影响全帧。
丢失P/B帧时,可通过后续I帧重建画面。
💎 ​​总结:视频包 = 分层标签化数据块​​
​​核心帧​​:I帧(完整画面)、P帧(前向差分)、B帧(双向差分)。
​​参数集​​:SPS(全局配置)、PPS(帧级配置)。
​​同步标识​​:DTS/PTS解决编解码时序问题。
​​错误控制​​:切片和宏块结构提升抗丢包能力。