SDP转NAL单元问题:H.265的sprop-vps解码头部异常排查
问题分析与结论
首先明确两个关键核心点:
- sprop-vps的本质:根据RFC7798,SDP中的
sprop-vps是Base64编码的VPS的RBSP字节序列,不是包含NAL头的完整NAL单元。你解码后得到的0x44 0x01 0xc0 0xf3 0xc0 0x02 0x10是VPS的原始负载(RBSP),不是带NAL头的NAL单元,所以第一个字节根本不是NAL头——这是你操作中的核心误解。 - H.265与H.264的NAL头混淆:你提到的“VPS对应NAL头应为0x40”“0x44是PPS的头”,明显是把H.264的NAL头规则套到了H.265上。H.265的NAL头是2字节结构,和H.264的1字节头完全不同:
- H.264的NAL头是1字节,用低5位标识类型;
- H.265的NAL头是2字节,包含禁止位、层ID、时间ID、单元类型等字段,VPS的单元类型是3,对应的NAL头需要结合层ID、时间ID计算,不存在固定的
0x40单字节头。
正确的处理步骤
- 对
sprop-vps的Base64值解码,得到VPS的RBSP(也就是你现在得到的0x44 0x01 0xc0 0xf3 0xc0 0x02 0x10); - 给这个RBSP加上H.265的VPS NAL头,拼接成完整的VPS NAL单元:
- 假设层ID(nuh_layer_id)为0,时间ID+1(nuh_temporal_id_plus1)为1,对应的NAL头是
0x00 0x19; - 最终VPS NAL单元为
0x00 0x19 0x44 0x01 0xc0 0xf3 0xc0 0x02 0x10。
- 假设层ID(nuh_layer_id)为0,时间ID+1(nuh_temporal_id_plus1)为1,对应的NAL头是
所以不是sprop-vps信息错误,是你对sprop-vps的内容定义、以及H.265 NAL头的结构理解有误。
内容的提问来源于stack exchange,提问作者Jeff Brower
相关产品推荐
相关产品推荐

