首页 > 解决方案 > ffmpeg libav:有什么方法可以以输入格式设置流信息而不是搜索它?

问题描述

我正在使用 ffmpeg API 为 RTMP 流编写一​​个播放器。我知道将流信息转换为输入格式的常用方法是使用avformat_find_stream_info. 那行得通。但是,因为它是 RTMP,它需要很长时间才能扫描足够多的流以获取信息。我玩过max_analyze_durationand probesize,它好一点,但加载仍然需要10-15秒。这对我的申请来说太长了。

但我是在另一端制作流的人,所以我确切地知道里面有什么。对我来说,告诉输入格式流信息是什么似乎比要求它搜索它更有意义。但是我找不到任何这样的例子,而且我尝试使用avformat_new_stream输入格式的尝试也不起作用。

有谁知道这是否可能?如果是这样,你能指出我的方向吗?

谢谢!

标签: ffmpeglibav

解决方案


这就是所谓的XY 问题

是的,您可以欺骗序列头(假设 h.264/aac)。但它不会完成你想要的。发生的事情是您的 RTMP 服务器(反射器)正在吃掉第一个GOP。因此,即使分析完成得更快,您也必须先等待第一个视频关键帧。

您需要配置您的 RTMP 服务器以发送完整的 GOP(在 nginx+rtmp 中设置为wait_key on


推荐阅读