我在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
?
答案 0 :(得分:3)
当调用 avformat_find_stream_info 时,此功能会扫描流式URL(或本地文件)以检查给定URL中的有效流。
这意味着,换句话说,它将解码来自给定输入URL的少量数据包,因此您可以使用AVCodecContext快速解码数据包,AVCodecContext在 avformat_find_stream_info 中初始化。
我没有对它进行测试,但如果没有调用 avformat_find_stream_info 就无法进行解码。在一般情况下,或者每次解码数据包时它都会被初始化。
无论如何, avformat_find_stream_info 消耗网络流量的原因。因为,正如我所说,它会先拉几包。
如果你真的想快速解码数据包而不调用这个函数,你应该自己手动初始化AVCodecContext。