您的位置首页百科问答

Qt5,QtAV使用,调试时,fatal error LNK1104: 无法打开文件“Qt5AVWidgetsd.lib”,怎么解决?

这段时间需要用QT开发一个播放直播流的功能,能够播放各种格式的直播流,并且CPU占用率不要太高(可以占用GPU),这些是我们的目标。

直播流推流的技术进展在上一篇博客中已经提到了,目前我的能力范围内只能推送RTMP格式的链接,所以需要播放端能够解析这种格式的链接。

下面是一张自己做的图,对QT可调用的几种播放方面的开源库进行孙滑碧对比:

Qt5,QtAV使用,调试时,fatal error LNK1104: 无法打开文件“Qt5AVWidgetsd.lib”,怎么解决?

这种方式有两个优点:

缺点:

代码示例:

1 QWidget wi; 2 QMediaPlayer* player = new QMediaPlayer(0, QMediaPlayer::VideoSurface); 3 QVideoWidget* vw = new QVideoWidget; 4 QVBoxLayout* lay = new QVBoxLayout; 5 lay->addWidget(vw); 6 vw->setMinimumSize(400, 300); 7 lay->setSizeConstraint(QLayout::SetMinimumSize); 8 wi.setLayout(lay); 9 10 player->setVideoOutput(vw); 11 12 QNetworkRequest req(QUrl("http://pull-g.kktv8.com/livekktv/100987038.flv")); 13 14 QMediaContent c(req); 15 player->setMedia(c); 16 player->play();

优点:

缺点:

优点:

缺点:

Qt5,QtAV使用,调试时,fatal error LNK1104: 无法打开文件“Qt5AVWidgetsd.lib”,怎么解决?

上图是目前支持的平台,链接中都是编译过可以直接用的库,只需要配置到相应位置即可

(头文件和lib库在QT的.pro文件中添加进去即可,DLL库需要将相应路径添加到系统环境变量中,具体可以参考:QT总结第3篇:如何在QT中添加.lib,.dll还有.h文件)

综合来说较为推荐

在VLC没配置成后,就搜索"qt rtmp",找到了这个项目。这是一个正让枯在成长中的项目,发布日期为2018年4月3日,距离现在仅有11天。主要是为了实现基于FFmpeg的rtsp/rtmp网络流媒体播放库。

作者仅给出了相应的库文件,以及一个基于QT的可运行在Visual Studio中的例子。

在经过尝试使用VS运行失败后,还是决定使用最熟悉的QT Creator运行,然后仿照在VS平台的例子,自己修改出来了一个例子,见GITHUB仓库

但是这个例子可以解析HTTP的直播链接,如CCTV1的:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8

对于RTMP的链接,虽然可以加载,但是总是无法解析,遂放弃FQFlib的方式,继续寻找新方式。于是找到了QT-AV。

官方介绍:

QtAV is a multimedia playback library based on Qt and FFmpeg. It can help you to write a player with less effort than ever before.

QtAV has been added to FFmpeg projects page http://ffmpeg.org/projects.html

这个项目是2012年开始的,已经被ffmpeg官方收录了,的确是非常的方便。

下面简单写一下在Windows系统下的Qt-AV安装方式和使用方法,官方的文档在这里:https://github.com/wang-bin/QtAV/wiki/Build-QtAV,个人感觉没有说的很清楚,所以写一下自己踩过坑后的总结

参考之前我的文章:http://www.cnblogs.com/QingHuan/p/7685328.html

下载链接:https://ffmpeg.zeranoe.com/builds/

Qt5,QtAV使用,调试时,fatal error LNK1104: 无法打开文件“Qt5AVWidgetsd.lib”,怎么解决?

将右边的Shared版本和Dev版本都下载下来,分别是DLL动态链接库、头文件和LIB。

头文件和lib库在QT的.pro文件中添加进去即可(第三步再进行添加),DLL库需要将相应路径添加到系则举统环境变量中,具体可以参考:QT总结第3篇:如何在QT中添加.lib,.dll还有.h文件

Windows系统的环境变量一般在重启后才会生效。

头文件和LIB文件的书写示例:

git clone https://github.com/wang-bin/QtAV.git git submodule update --init

Qt5,QtAV使用,调试时,fatal error LNK1104: 无法打开文件“Qt5AVWidgetsd.lib”,怎么解决?

打开build-QtAV-Desktop_Qt_5_7_1_MSVC2015_64bit-Debug文件夹,这个文件夹是和git clone之后的那个目录同级的,

找到sdk_install.bat,这个脚本能够自动将相应的DLL文件复制到正确的位置,可以看一下代码,很容易理解:

View Code

此时就可以使用所有QT-AV的例子了,也可以创造自己的新工程并调用它。

注意:在DEBUG模式下编译的QT-AV只能让同样在DEBUG模式下编译的工程使用,

如果你想要使用windeployqt来打包你的程序(即生成绿色无安装版本程序),需要将QT-AV和你自己的工程都在QT Creator的release模式下进行编译。

更多关于使用windeployqt来打包程序的细节不在此赘述。我已经将自己打包的一个程序发布在了GITHUB上,可以参考一下:https://github.com/zhixuanli/qt-av-stream-player

切换当前目录到如下位置:

\QtAV\examples\simpleplayer

点击打开simpleplayer_sdk.pro来在QT Creator中打开这个工程,不要打开simpleplayer.pro;

然后找到playerwindow.cpp,将68行进行如下修改,即可打开指定直播流链接(任意ffmpeg支持的格式,RTMP也支持),而非从本地加载一个视频

1 // QString file = QFileDialog::getOpenFileName(0, tr("Open a video")); 2 QString file = "rtmp://live.hkstv.hk.lxdns.com/live/hks";

再编译-运行,点击open即可打开香港位置的这个RTMP格式的直播流

相应的源代码和绿色版程序已经放在了我的仓库里:https://github.com/zhixuanli/qt-av-stream-player

Qt-AV其实已经完成了FQFlib所要开发的对RTMP和RSTP格式直播流播放的支持,而且根据目前的实际测试其并不能播放RTMP(也可能是我自己没写好)

但是在已经有轮子的情况下,不太建议FQFlib的作者继续重新造轮子

RTMP测试源:rtmp://live.hkstv.hk.lxdns.com/live/hks

RTSP测试源:rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov

HTTP和RTMP是直播流链接的格式,而直播流本身也有编码格式和封装格式。编码格式如h.264格式(也叫MPEG-4)等;封装格式则为MP4、WMV、FLV等。具体可以在推流时使用不同的ffmpeg参数进行设置。

H.264的维基百科介绍:

H.264,又称为MPEG-4第10部分,高级视频编码(英语:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)是一种面向块,基于运动补偿的视频编码标准(英语:Video_coding_format) 。

MP4和MPEG4并不同:参考自:Difference between MPEG4 and MP4

综合来说,Qt-AV给我留下的印象最好,其经过了6个年头的发展,也有了多次的版本迭代,已经较为完善。

如果您想要使用QT开发功能强大,支持播放“格式”众多且代码简单的播放器,非常推荐使用Qt-AV