我正在使用 ffmpeg API 为 RTMP 流编写一个播放器。我知道将流信息转换为输入格式的常用方法是使用 avformat_find_stream_info
.那行得通。但是,因为它是 RTMP,它需要很长时间才能扫描足够多的流以获取信息。我玩过max_analyze_duration
和 probesize
并且稍微好一点,但仍然需要 10-15 秒才能加载。这对我的申请来说太长了。
但我是在另一端制作流的人,所以我确切地知道里面有什么。对我来说,告诉输入格式流信息是什么似乎比要求它搜索它更有意义。但我找不到任何这样的例子,我尝试使用 avformat_new_stream
输入格式不起作用。
有谁知道这是否可能?如果是这样,你能指出我的方向吗?
谢谢!
最佳答案
这就是所谓的 XY problem
是的,您可以欺骗序列头(假设 h.264/aac)。但它不会完成你想要的。发生的事情是您的 RTMP 服务器(反射器)正在吃第一个 GOP .因此,即使分析完成得更快,您也必须先等待第一个视频关键帧。
您需要配置您的 RTMP 服务器以发送完整的 GOP(在 nginx+rtmp 中设置为 wait_key on
)
关于ffmpeg libav : Any way to set stream info in an input format instead of searching for it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566279/