You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

H264 SPS payload手动解析疑问:num_units_in_tick与time_scale

H264 SPS解析错误纠正

你的核心问题是错误定位了num_units_in_tick和time_scale的字段位置,同时混淆了H264语法元素的编码类型,以下是具体纠正和解析逻辑:

错误根源

  1. 字段层级误解:num_units_in_tick和time_scale并非SPS顶层字段,而是VUI参数的子字段。只有当SPS中的vui_parameters_present_flag=1,且VUI参数中的timing_info_present_flag=1时,这两个字段才会存在。你跳过了前置字段的解析,直接截取了错误的比特段。
  2. 编码类型混淆:SPS中大部分字段采用指数哥伦布编码(ue(v)/se(v)),而非固定长度编码。你按固定比特数跳步,导致字段位置完全偏移。

正确解析逻辑(关键路径)

按照H264规范,正确的解析流程到目标字段的路径是:

SPS顶层字段 → vui_parameters_present_flag=1 → 进入VUI参数解析 → timing_info_present_flag=1 → 读取32位num_units_in_tick → 读取32位time_scale → 读取1位fixed_frame_rate_flag

针对你的SPS payload:

  • 解析完所有前置的指数哥伦布编码字段后,最终定位到timing_info_present_flag=1,此时后续的比特流为:
    • num_units_in_tick:32位无符号整数,二进制为00000000 00000000 00000000 00000001 → 十进制值1
    • time_scale:32位无符号整数,二进制为00000000 00000000 00000000 00100000 → 十进制值32
    • fixed_frame_rate_flag:1位二进制0 → 值0

这与FFmpeg等工具的解析结果完全一致。

手动解析注意事项

  • 必须严格按照H264语法顺序逐个解析字段,指数哥伦布编码的字段需要计算前导零数量来确定比特长度,不能固定跳步。
  • 所有VUI相关字段都依赖vui_parameters_present_flag的判断,不能直接跳过顶层字段直接读取VUI内容。

内容的提问来源于stack exchange,提问作者User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 12:14:51