首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-12909错误解码内部刷新的h264流

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

Stack Overflow用户
提问于 2017-12-28 22:00:39
回答 1查看 1K关注 0票数 1

我正在制作一个iOS应用程序,用视频工具箱解码h264流。我在PC上用ffmpeg创建流,并使用RTP将其发送到iPhone。当我使用这个命令创建它时,它运行得很好:

代码语言:javascript
复制
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接收并显示所有帧。但是,当我启用内部刷新时

代码语言:javascript
复制
-intra-refresh 1

当调用错误码-12909 (-8969 on仿真器)时,解码失败。

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

我没有找到任何关于视频工具箱不支持内部刷新的信息,所以问题是,视频工具箱支持内部刷新吗?如果是这样的话,我是不是在视频工具箱中遗漏了使流不受支持的东西呢?除了使用SPS和PPS数据使用CMVideoFormatDescriptionRef创建它之外,我还必须向CMVideoFormatDescriptionCreateFromH264ParameterSets()添加一些内容吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 14:29:04

  1. 是的,视频工具箱支持内部刷新。
  2. 不,跟ffmpeg无关
  3. 不,不需要用CMVideoFormatDescriptionRef做什么特别的事

我想明白了,每次我接收到SPS和PPS时,我都会创建一个新的VTDecompressionSession,所以解码器正在失去上下文。

它在不需要内部刷新的情况下工作,因为在这种情况下,在SPS和PPS之后就会接收到完整的I-帧,所以它不需要来自以前帧的上下文。

在启用内部刷新的情况下,只有第一个帧是一个完整的i帧,然后解码器依赖于来自以前帧的上下文,并且必须使用相同的VTDecompressionSession

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48014902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档