原文:https://www.cnblogs.com/betterwgo/p/7642331.html
网上看到这篇文章感觉很有用!记录一下!
简单记录一下最近使用ffmpeg播放RTSP做的一点参数优化。
先做如下定义:
AVDictionary* options = NULL;
1.画质优化
原生的ffmpeg参数在对1920x1080的RTSP流进行播放时,花屏现象很严重,根据网上查的资料,可以通过增大“buffer_size”参数来提高画质,减少花屏现象,当你rtsp流码率很大的时候,设置“buffer_size”很有必要,否则内存泄漏,并出现花屏。
如:
av_dict_set(&options, "buffer_size", "1024000", 0);
2.RTSP连接不上导致卡死的问题
原生的ffmpeg参数在打开RTSP流时,若连接不上,会出现卡死在打开函数的情况,在有些情况下这是很不好的,可以通过设置超时来改变卡死的情况
如设置20s超时:
av_dict_set(&options, "stimeout", "20000000", 0); //设置超时断开连接时间
3.其他
可以设置的参数还有很多,如可以设置连接为TCP,设置最大延时等等
av_dict_set(&options, "max_delay", "500000", 0); av_dict_set(&options, "rtsp_transport", "tcp", 0); //以udp方式打开,如果以tcp方式打开将udp替换为tcp
注意TCP模式可能会出现卡顿现象。
例子:
AVDictionary* options = NULL; av_dict_set(&options, "buffer_size", "1024000", 0); av_dict_set(&options, "max_delay", "500000", 0); av_dict_set(&options, "stimeout", "20000000", 0); //设置超时断开连接时间 av_dict_set(&options, "rtsp_transport", "tcp", 0); //以udp方式打开,如果以tcp方式打开将udp替换为tcp if(avformat_open_input(&pFormatCtx,url.c_str(),NULL,&options)!=0){ printf("Couldn't open input stream.\n"); return false; }