H264码流解析

标题 H.264 码流结构概念解析

H.264(又称AVC)的码流结构是一个分层封装体系,设计目标是兼顾编码效率、网络适应性和解码可靠性。其核心思想是通过多级抽象,将视频数据、控制参数和元数据分离。以下是其核心概念的分层解析:

码流层级结构(从高到低)​

H.264码流可分解为四个逻辑层次:

​层级​组成单元​作用
​视频序列层Sequence完整视频流,包含多个GOP(图像组)
​图像层Frame/Slice单帧图像数据(I/P/B帧),可能被分割为多个Slice
​片层Macroblock16×16像素块,编码的基本单位
​子块层4×4/8×8 变换块DCT变换、量化的最小单元

标题NALU(网络抽象层单元)​

NALU(Network Abstraction Layer Unit)​ 是H.264码流的最小传输单元,每个NALU独立封装,包含头部和负载数据。

​NALU的两种封装格式

​格式​标识方式​应用场景
​Annex B起始码 00 00 00 01实时传输(RTP/TS流)、文件存储(.h264)
​AVCC长度前缀(4字节)MP4容器、FLV封装

​Annex B:更适合实时传输,兼容性好但解析稍慢。
​AVCC:更适合文件存储,支持快速随机访问,需容器配合。
​转换工具:FFmpeg、GPAC等可无损转换两种格式。
​开发注意:处理AVCC时需先读取avcC盒子,而Annex B需实时检测起始码。

对比维度​Annex B​AVCC (AVC1)
​NALU分隔方式起始码 00 00 00 01 或 00 00 014字节大端长度前缀(如 00 00 02 1F)
​典型应用场景RTP传输、TS流、.h264裸流文件MP4、FLV、MKV等容器
​参数集存储分散在码流中(通过SPS/PPS NALU)集中在文件头(avcC盒子中)
​兼容性所有H.264解码器支持需容器支持(如MP4的avcC配置盒)
​随机访问性能较差(需扫描起始码)更好(直接跳转长度前缀)
​修改复杂度高(需处理变长起始码)低(长度固定)

关键NALU类型

H.264定义了多种NALU类型,以下是核心分类:

​类型值名称​作用​示例场景
1非IDR Slice普通视频帧数据(P帧/B帧)连续视频帧
5IDR Slice关键帧(可独立解码,清空参考缓冲区)视频seek点、直播流首帧
6SEI补充增强信息(时间戳、水印等)携带元数据
7SPS序列参数集(分辨率、帧率、Profile/Level等全局参数)解码初始化
8PPS图像参数集(熵编码模式、参考帧数量等)解码配置
9AUD访问单元分隔符(标记帧边界)直播流分帧

参数集(Parameter Sets)​

H.264通过参数集分离关键配置信息,避免重复传输:
(1) SPS(Sequence Parameter Set)
​作用:定义视频序列的全局参数
​包含信息:

profile_idc      // 编码档次(如66=Baseline, 77=Main, 100=High)
level_idc       // 级别限制(决定最大分辨率/码率等)
pic_width_in_mbs // 图像宽度(以宏块为单位)
pic_height_in_mbs // 图像高度
frame_mbs_only  // 0=隔行扫描,1=逐行扫描
log2_max_frame_num // 帧序号的最大比特数

(2) PPS(Picture Parameter Set)
​作用:定义单帧图像的编码参数
​包含信息:

entropy_coding_mode // 0=CAVLC,1=CABAC
num_ref_idx_l0_active // 前向参考帧数量
weighted_pred_flag   // 加权预测标志

Slice(片)与宏块(Macroblock)​

(1) Slice的作用
将一帧图像分割为多个独立编码区域
提高容错性(某Slice损坏不影响其他部分)
支持并行编码/解码
(2) 宏块(Macroblock)​
​基本单位:16×16像素块
​子分区:可进一步分为8×8或4×4子块
​包含数据:
| 预测模式 | 运动向量 | 残差系数 |

码流示例分析

00 00 00 01 67 64 00 1E ...  // SPS
00 00 00 01 68 EE 3C 80 ...  // PPS
00 00 00 01 65 88 80 21 ...  // IDR帧
00 00 00 01 41 9A 01 23 ...  // P帧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值