如何识别RTP传输的H.264码流中的各类型帧
RTP封装H.264码流帧类型识别方案
前置过滤规则
先排除非帧数据类NAL单元,不参与后续判定:
- nal_type = 6:SEI(补充增强信息)
- nal_type = 7:SPS(序列参数集)
- nal_type = 8:PPS(图像参数集)
- nal_type = 9:AUD(访问单元分隔符,可用于同帧判定辅助)
同帧切片聚合方法
H.264中一帧可包含1~N个切片,可通过以下规则判断哪些切片属于同一帧:
- 先聚合RTP层FU-A分片得到完整NAL单元
同一FU-A分片组的判定条件:RTP序列号连续 + RTP时间戳完全相同 + FU-A头部标记匹配:首分片S=1,尾分片E=1,中间分片S=0/E=0 - 聚合同属一帧的多个切片NAL
核心判定条件(满足即可判定为同帧):- 所有切片NAL对应的RTP时间戳完全一致
- 所有切片头部的
frame_num字段值完全相同
辅助判定条件(适用于携带AUD的码流):两个相邻AUD之间的所有切片属于同一帧
I/P/B帧类型识别逻辑
单切片类型判定
结合slice_type和nal_ref_idc的判定规则如下:
- B类切片:slice_type取值为0/5,且
nal_ref_idc = 0(B切片不作为参考帧) - P类切片:slice_type取值为1/6,且
nal_ref_idc ≥ 1(P切片属于参考帧) - I类切片:slice_type取值为2/7,且
nal_ref_idc ≥ 1(I切片属于参考帧) - 特殊切片:slice_type为3/8的SI切片归为I类,slice_type为4/9的SP切片归为P类
整帧类型判定
完成同帧切片聚合后,按优先级从高到低判定整帧类型:
- 帧内存在至少1个I类切片 → 整帧为I帧
- 帧内无I类切片,但存在至少1个P类切片 → 整帧为P帧
- 帧内所有切片均为B类 → 整帧为B帧
内容的提问来源于stack exchange,提问作者Jordan Sim
相关产品推荐
相关产品推荐

