ffmpeg libav : Any way to set stream info in an input format instead of searching for it?

标签 ffmpeg libav

我正在使用 ffmpeg API 为 RTMP 流编写一​​个播放器。我知道将流信息转换为输入格式的常用方法是使用 avformat_find_stream_info .那行得通。但是,因为它是 RTMP,它需要很长时间才能扫描足够多的流以获取信息。我玩过max_analyze_durationprobesize并且稍微好一点,但仍然需要 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/

相关文章:

audio - AV_SAMPLE_FMT_S16P 和 AV_SAMPLE_FMT_S16 有什么区别?

android - FFmpeg Android 连接。 "–safe 0"是无效参数

ffmpeg - 如何在没有 CPU 完整解码的情况下从 h264 中提取运动矢量

api - FFMPEG API(使用特定格式编译)

makefile - 为ffmpeg编写测试时,如何编写makefile?

encoding - sws_scale 在较小的 x264 mp4 编码中搞砸了最后一个像素行

c++ - FFmpeg/libav 将 AVPacket 数据存储在文件中并在不同的流中再次解码它们 - 如何在解码器中准备和发送自定义数据包?

FFMPEG avcodec_decode_video2 got_picture_ptr 不同的行为

ffmpeg - 通过ffmpeg将全屏图像添加到mp4

python-3.x - 在 ffmpeg 命令上映射 3 个或更多输出