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

RTSP客户端解码报OSStatus -8969:AVCC格式适配问题求助

问题分析与解决方案

1. OSStatus -8969 错误本质

该错误对应kVTInvalidParameterErr,核心原因是传给VideoToolKit解码器的媒体数据格式不符合要求,结合你的描述,大概率是AVCC封装逻辑错误导致。

2. 正确的AVCC格式与FU-A分片处理

AVCC格式的核心规则是每个完整的NAL单元前添加4字节大端长度前缀,而非你当前对每个FU-A分片单独封装的方式。针对FU-A分片的正确处理流程如下:

  • 从每个RTP包中提取FU标识字节(第一个字节)、FU头字节(第二个字节),以及后续的NAL载荷分片;
  • 重组完整NAL单元:
    • 取第一个分片(S位为1)的FU标识字节,保留其NRI(最高2位),将低5位替换为FU头中的原始NAL类型(FU头的低5位);
    • 拼接所有FU分片的载荷部分(去掉FU标识和FU头后的剩余数据),与上述修改后的字节组合成完整的NAL单元;
  • 给重组后的完整NAL单元添加4字节大端长度前缀,这才是解码器可识别的AVCC格式数据。

你当前的错误在于将每个FU分片单独封装成AVCC单元,解码器无法识别碎片化的NAL片段,直接触发参数无效错误。

3. 解码会话的优化

每帧创建新解码会话是不合理的:

  • 频繁创建会话会极大消耗系统资源,导致性能下降;
  • VideoToolKit解码器需要依赖SPS/PPS等上下文信息初始化,每帧重建会话会丢失上下文,无法正确解码。

正确做法:初始化一次解码会话,当获取到新的SPS/PPS时,重新配置会话参数,而非重建会话。

4. SPS/PPS的关键处理

  • 必须解析sprop-parameter-sets参数,或从RTP流中的SPS(NAL类型7)、PPS(NAL类型8)单元中提取真实配置;
  • SPS/PPS必须在解码帧数据之前传给解码器,作为解码器的初始化配置参数。使用静态值无法适配流的真实编码参数,必然导致解码失败。

5. 长度计算验证

你提到的length = RTSP长度字段 - RTP_HEADER_LEN需要注意:这里的长度应该是单个RTP包的payload长度(即整个RTP包的总长度减去12字节RTP头),确保你提取的是每个FU分片的真实载荷数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:55:21