如何在libav中设置sps和pps的频率

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

我正在 webrtc 上流式传输原始 h264。我面临的问题是视频在文件的开头只有 2 或 3 个 sps 和 pps 数据包。 因此,每当观看者在流中加入时,他就看不到视频。 我发现 ffmpeg 中有一个名为

dump_extra
的过滤器。 我将这个过滤器与 ffmpeg 一起使用,它确实插入了 sps 和 pps,并且当有人从中间加入时视频正在播放。 我面临的问题是,当我尝试使用 libav 中的这个过滤器时,代码直接不起作用。 我没有遇到任何错误,它成功生成了数据包,但数据包不包含 sps 或 pps。 我查看了 dump_extra 过滤器的代码,它正在将 extradata 字段从 codeccontext 转储到 avpacket,但我的 codeccontext 额外数据字段设置为 null 并且 extradata_size 为零。 虽然它可以在与 ffmpeg 相同的原始 h264 视频上工作,但在 libav 上却失败,有人可以建议我一些代码或解决方案吗?

c h.264 libav
1个回答
0
投票

对于那些和我有同样问题的人,我想我已经弄清楚 ffmpeg 是如何做到这一点的了。 ffmpeg 复制第一个数据包(或具有 sps 和 pps 的数据包)的 sps 和 pps 并将其放入

extradata
中。之后,过滤器复制该额外数据并将其放在每个 nalu 之前。 只需要从 nalu 中提取额外数据并将其放入 AVContext 的
extradata
字段中,然后运行 dump_extra 过滤器即可。

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