进过测试:
1.从文件中输入转rtsp流,在一秒内完成。
in_filename = "D:\\音视频编解码知识\\媒体文件\\VID.flv";//输入URL(Input file URL)
out_filename = "rtsp://127.0.0.1/test.sdp";
av_register_all();
//Network
avformat_network_init();
if ((ret = avformat_open_input(&ifmt_ctx, in_filename, 0, 0)) < 0) ;
2.从内存中读取视频流,视频流来着文件。
flv文件
测试结果:1秒内
//读取本地文件,模拟远端视频流
if (!feof(fp)) {
fread(buf, 1, 2048, fp);
return 2048;
}
PS保存的文件:
测试结果也在一秒以内
从上面的结果看出来,ffmpeg在输入端读取本地文件的情况下,解码效率还是非常高的,都在一秒内完成。从而可以看出,延时6秒的问题还在于视频流延时的问题。
经过日志打印,最后确定avformat_find_stream_info函数处理非常慢,需要6秒时间。原因是阀值默认设置的太大了。
设置成这样后,大概延时在2秒左右。