ffmpeg解码没有avformat_find_stream_info的慢速调用

时间:2015-10-29 03:12:30

标签: performance ffmpeg decode h.264 rtp

我在android上使用ffmpeg解码h264 rtp流。我发现了一个奇怪的问题:如果我不调用avformat_find_stream_info,解码P frame需要几十微秒,相反,在解码之前调用avformat_find_stream_info将减少P frame解码时间平均不到1毫秒。但是,avformat_find_stream_info本身在网络流上非常耗时。我可以做些什么来快速解码而无需调用 avformat_find_stream_info

1 个答案:

答案 0 :(得分:3)

当调用 avformat_find_stream_info 时,此功能会扫描流式URL(或本地文件)以检查给定URL中的有效流。

这意味着,换句话说,它将解码来自给定输入URL的少量数据包,因此您可以使用AVCodecContext快速解码数据包,AVCodecContext在 avformat_find_stream_info 中初始化。

我没有对它进行测试,但如果没有调用 avformat_find_stream_info 就无法进行解码。在一般情况下,或者每次解码数据包时它都会被初始化。

无论如何, avformat_find_stream_info 消耗网络流量的原因。因为,正如我所说,它会先拉几包。

如果你真的想快速解码数据包而不调用这个函数,你应该自己手动初始化AVCodecContext。