video pack
一个完整的视频包(通常指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解决编解码时序问题。
错误控制:切片和宏块结构提升抗丢包能力。