【网络通信 -- 直播】视频流基础 -- H.264 整体结构整理
【网络通信 — 直播】视频流基础 — H.264 整体结构整理
【1】视频编解码的一般流程
【2】H.264 编解码框架简介
【2.1】H.264 分层编解码框架
H.264 视频编码标准引入了分层结构,从而适用于不同网络之间的视频传输,即将图像压缩系统分为网络抽象层(NAL,Network Abstraction Layer) 和 视频编解码层(VCL,Video Coding Layer),实现了压缩编码与网络传输的分离;
【2.2】H.264 编码器框架
【2.3】H.264 解码器框架
【2.4】H.264 传输与存储
【2.4.1】NAL 单元结构
RBSP,Raw Byte Sequence Payload,原始字节序列负载
SODB,String Of Data Bits,原始数据比特流
RBSP = SODB + rbsp_trailing_bits(使码流按字节对齐)
NAL 头信息结构
F:禁止位(1 比特),标记该 NAL 包是否出现错误,出错置 1,否则置 0;
R:重要性指示位(2 比特),值越大代表该 NAL 单元的重要程度越高;
T:NAL 单元类型(5 比特);
常用 NAL 类型图示
SPS,PPS,I 帧判定
码流截图图示
在实际的H264数据帧中,往往帧前面带有 00 00 00 01 或 00 00 01 分隔符,一般来说编码器编出的首帧数据为 PPS 与 SPS,接着为 I 帧,分析上图,以 00 00 00 01 分割之后的下一个字节就是 NALU 类型,将其转为二进制数据后,解读顺序为从左往右算,如下
第1位禁止位,值为1表示语法出错
第2~3位为参考级别
第4~8为是 NAL 单元类型
其中0x67的二进制码为:
0110 0111
4-8为00111,转为十进制7,参考常用 NAL 类型图示: 7对应序列参数集SPS
其中0x68的二进制码为:
0110 1000
4-8为01000,转为十进制8,参考常用 NAL 类型图示: 8对应图像参数集PPS
其中0x65的二进制码为:
0110 0101
4-8为00101,转为十进制5,参考常用 NAL 类型图示: 5对应IDR图像中的片(I帧)
【2.4.2】H.264 语法元素优先级
H.264 优先级的划分图示
图示相关标识说明
标识 | 说明 | 标识 | 说明 |
PSYNC | LUM | 亮度 | |
IPM | CHR | 色度 | |
MB | 宏块 | CBP | 模式信息 |
AC | 交流 | DC | 直流 |
INTER | 帧间 | INTERA | 帧内 |
REF_FRAME | 参考帧 | MVD | 宏块运动矢量预测差 |
H.264 优先级的划分详细说明
参考致谢
本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。
【1】新一代视频压缩编码标准H.264
【2】深入理解视频编解码技术 — 基于 H.264 标准及参考模型
【3】数字视频编码技术原理(第二版)
【4】视频编解码流程
【5】H264 编解码框架简介