-12909错误解码h264流与内部刷新

问题描述 投票:0回答:1

我正在制作一个使用video-toolbox解码h264流的iOS应用程序。我在PC上使用ffmpeg创建流并使用RTP将其发送到iPhone。当我使用此命令创建它时,它工作得很好:

ffmpeg -y -f:v rawvideo -c:v rawvideo -s 1280x720 -pix_fmt bgra -r 30 -an -i - -pix_fmt yuv420p -c:v libx264 -tune zerolatency -preset fast -b:v 5M -refs 1 -g 30 -profile:v high -level 4.1 -f rtp rtp://192.168.1.100:5678

iPhone接收并显示所有帧。但是,当我启用内部刷新时

-intra-refresh 1

当调用-12909时,解码失败,错误代码为-8969(模拟器上的VTDecompressionSessionDecodeFrame())。

我负责处理UDP数据包以提取NAL单元,所以我对这个过程进行了三重检查,并丢弃了这部分代码的问题。

我没有找到任何关于Video-toolbox不支持内部刷新的信息,所以问题是,Video-toolbox是否支持内部刷新?如果确实如此,我是否在ffmpeg方面遗漏了一些使视频工具箱不支持该流的内容?除了使用CMVideoFormatDescriptionRef使用SPS和PPS数据创建它之外,我还需要向CMVideoFormatDescriptionCreateFromH264ParameterSets()添加一些东西吗?

ios ffmpeg h.264 video-toolbox
1个回答
1
投票
  1. 是的,Video-toolbox支持内部刷新
  2. 不,与ffmpeg无关
  3. 不,不需要与CMVideoFormatDescriptionRef做任何特别的事情

我想通了,每次我收到SPS和PPS NALU时我都会创建一个新的VTDecompressionSession,因此解码器正在失去上下文。

它在没有内部刷新的情况下工作,因为在这种情况下,在SPS和PPS之后立即接收到完整的I帧,因此它不需要来自先前帧的上下文。

启用帧内刷新后,只有第一帧是完整的I帧,然后解码器依赖于前一帧的上下文,并且必须使用相同的VTDecompressionSession

© www.soinside.com 2019 - 2024. All rights reserved.