前记:
在前面编译成功后,测试QtAV自带的示例,发现本地视频文件、RTMT流可以正常,但无法播放RTSP流,所以单独探究了此问题
一、分析问题
因为之前研究过ffmpeg的使用,所以直接想到,应该是rtsp拉流,默认使用了udp,而不是tcp,先验证下问题:
找到ffmpeg预编译包ffmpeg-4.4-full_build-shared/bin/ffplay.exe
执行ffplay rtmp://___,可以正常播放
执行ffplay rtsp://___,无法播放
执行ffplay -rtsp_transport tcp rtsp://___,可以正常播放
由此找到问题,是网络状况不佳导致的
二、解决问题
简单看了下QtAV源码,没有找到设置的接口,那就直接写在源码中吧
找到QtAV源码QtAV/src/AVDemuxer.cpp,在void checkNetwork()中加入如下代码
if(file.startsWith(QLatin1String("rtsp:")))
options[QStringLiteral("rtsp_transport")]=QStringLiteral("tcp");
告诉ffmpeg,rtsp直接使用tcp拉流
参考之前的编译的方法,重新编译,然后再测试示例player和QMLPlayer,发现可以正常播放rtsp流了