我正在制作一个iOS应用程序,用视频工具箱解码h264流。我在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:5678iPhone接收并显示所有帧。但是,当我启用内部刷新时
-intra-refresh 1当调用错误码-12909 (-8969 on仿真器)时,解码失败。
我负责处理UDP数据包以提取NAL单元,所以我三次检查了这个过程,并放弃了代码这一部分的问题。
我没有找到任何关于视频工具箱不支持内部刷新的信息,所以问题是,视频工具箱支持内部刷新吗?如果是这样的话,我是不是在视频工具箱中遗漏了使流不受支持的东西呢?除了使用SPS和PPS数据使用CMVideoFormatDescriptionRef创建它之外,我还必须向CMVideoFormatDescriptionCreateFromH264ParameterSets()添加一些内容吗?
发布于 2018-01-02 14:29:04
CMVideoFormatDescriptionRef做什么特别的事我想明白了,每次我接收到SPS和PPS时,我都会创建一个新的VTDecompressionSession,所以解码器正在失去上下文。
它在不需要内部刷新的情况下工作,因为在这种情况下,在SPS和PPS之后就会接收到完整的I-帧,所以它不需要来自以前帧的上下文。
在启用内部刷新的情况下,只有第一个帧是一个完整的i帧,然后解码器依赖于来自以前帧的上下文,并且必须使用相同的VTDecompressionSession。
https://stackoverflow.com/questions/48014902
复制相似问题