最近要在程序中实现一个能够播放本地视频的内嵌播放器,试过用ffmpeg、QtAV来实现,不是播放的速度有问题,就是在播放FLV视频文件时无法调整进度,因此寄希望于VLC-Qt。下面是我在windows10 VS2019环境下编译VLC-Qt的详细步骤
准备工作
编译环境
windows10
VS2019
Qt 5.15.0
vlc-3.0.16
vlc-qt-1.2.0
cmake-3.19.8-win64-x64
下载源码包
我是用Git工具直接下载的,打开Git Bash,键入git clone git://github.com/vlc-qt/vlc-qt.git
进行克隆,完成后源码默认被保存在C:\Users\xxx\vlc-qt
路径下
打开VERSION文件可以看到所下载的vlc-qt的版本号,这里是1.2.0
也可以直接到github上下载源码包,下载地址:github.com/vlc-qt/vlc-…
下载VLC库
下载地址:download.videolan.org/vlc/\
这里我选择的是目前最新的3.0.16版本,根据需要选择要下载的是32位还是64位,我的目标是生成64位的vlc-qt,因此下载的是64位库。
下载cmake
cmake是用来生成编译代码的,可以到cmake官网进行下载,下载地址:cmake.org/download/\
这里我下载的是cmake-3.19.8-win64-x64.zip
vlc-qt的编译
部署VLC环境
【说明】以下提到的Qt安装目录是我个人的安装目录,为C:\Qt\Qt5.15\5.15.0\msvc2019_64
-
将plugins文件夹和libvlc.dll、libvlccore.dll复制到Qt安装目录下的bin目录中
-
将sdk/include/vlc目录复制到Qt安装目录下的include目录中
-
将sdk/lib下的所有.lib文件复制到Qt安装目录下的lib目录中
-
打开我的电脑→属性→高级系统设置→环境变量→系统变量,新建一个变量名为
VLC_PLUGIN_PATH
,值为plugins目录所在路径
的系统变量
生成vs2019项目
到cmake的bin目录下打开cmake-gui.exe,进行配置
在where is the source code处选择vlc-qt源码所在路径
在where to build the binaries处选择vlc-qt编译文件要存放的路径(这个文件夹是临时建的)
【注意】这里最好将编译目录应该建在源码路径下,以防在生成INSTALL项目时会有问题!!!\- \
点击“Configure”,选择生成的工程的类型,这里我选择的是Visual Studio 16 2019,64位版本。
点击“Finish”,出现如下配置信息,进行检查
需要特别注意的有以下几个配置项 -
CMAKE_INSTALL_PREFIX:最终编译结果输出的路径,建议不要放在C盘,因为在makeinstall时,会因为权限不够造成安装时不成功,这里我将路径改为D:\Program Files\VLC-Qt
-
LIBVLCCORE_LIBRARY:将"vlccore.lib"改为"libvlccore.lib"
-
LIBVLC_LIBRARY:将"vlc.lib"改为"libvlc.lib"
-
为了防止生成debug和release库时,不带d的库被覆盖掉,还需要增加一个名为
CMAKE_DEBUG_POSTFIX
的cmake环境变量,点击“Add Entry”,
最终配置如下
点击“Configure”配置成功后,点击“Generate”生成VS2019工程。现在可以看到vlc-qt的编译目录下生成了很多文件与工程。
用文本方式打开cmake_install.cmake文件,找到下列语句,将include替换为bin,这才是正确的路径
用VS2019打VLC-Qt.sln,我要生成的是64位的Release库,所以这里需要对解决方案的配置和平台进行修改。看到左侧的工程目录,分别修改Core、PluginQml、Qml、Widgets
的工程属性。\
以Core项目为例,右键项目属性→配置属性→链接器→命令行,在其他选项中添加/SAFESEH:NO
,其他项目也是进行相同的操作。
完成以上设置后,在ALL_BUILD
工程上右击生成,此时出现报错
查看错误列表\
问题一: “libvlc_media_read_cb”: 未声明的标识符
解决方法:在vlc.h 文件中 添加 typedef __int64 ssize_t; 即可解决此问题
解决这个问题后,重新生成,前4条错误信息都消失了。
问题二:“poll”: 找不到标识符
解决方法:双击错误信息,定位到poll代码区,会看到一个poll的宏定义,需要把这个宏定义剪贴到 poll代码区的上方。
修改后
解决完这个问题后,重新生成项目,不再报错。
其它可能遇到的问题可以参考这位博主整理的
感谢大佬对错误及其解决方法进行详细的记录,让我少走不少弯路 OTL
ALL_BUILD
项目生成成功后,生成INSTALL
项目,到这一步又遇到MSB307 命令"setlocal
错误
查阅资料,基本上都是介绍这几种方法
- 尝试在进行cmake配置时,将build目录创建在源码目录下,而不是源码目录之外,然后重新配置、生成,但这个方法对我遇到的问题无效。
- 用管理员身份运行VS2019,重新编译,这个方法依然无效
- 我原本就是编译的release版本,所以改用release编译这个方法也无效
- INSTALL项目属性→配置属性→生成事件→生成后事件→命令行,给cmake.exe路径加上双引号,无效
最后,在一篇博客的评论中找到解决我问题的方法:INSTALL项目属性→配置属性→生成事件→生成后事件,将“在生成中使用”改为“否”
清理项目并重新生成,成功!!!
现在就可将库提取到在CMake中设置的安装目录中去了
vlc-qt的使用
得到我们需要的库文件之后,下一步就是如何在Qt中使用它们。
环境部署
【说明】以下提到的Qt安装目录是我个人的安装目录,为C:\Qt\Qt5.15\5.15.0\msvc2019_64
- 将bin目录下的所有dll文件拷贝到Qt安装目录的bin目录下
- 将include目录下的三个文件夹VLCQtCore、VLCQtQml、VLCQtWidgets拷贝到Qt安装目录的include目录下
- 将lib目录下cmake文件夹中的四个文件夹VLCQt、VLCQtCore、VLCQtQml、VLCQtWidgets拷贝到Qt安装目录的lib/cmake目录下
- 将lib目录下所有的lib文件拷贝到Qt安装目录的lib目录下
- 将qml目录下的文件夹VLCQt拷贝到Qt安装目录的qml目录下
项目中使用
下面我将用vlc-qt官方提供的示例来测试编译好的库是否能正常使用,点此自取,提取码:sjk8
用Qt打开simple-player.pro,将之前编译好的VLCQtCore.lib和VLCQtWidgets.lib拷贝到项目目录下(其实放在哪里都可以,只要在src.pro文件中添加库的时候能对应好就行)
src.pro文件中LIBS语句如下
LIBS += -L$$PWD/../ -lVLCQtCore -lVLCQtWidgets
1
复制代码
进行Release编译,效果如下
这里我播放的是FLV视频文件,与QtAV不同的是,VLC-Qt不仅支持MP4视频文件进度调整,还支持FLV视频文件进度调整,完美符合我的需求,到这里就大功告成了(๑•̀ㅂ•́)و✧
【参考文章】
QT5.9.3 使用vlc-qt
vlc-qt —— Windows下编译(最新)
Windows平台vlc-qt的编译和使用
VS2015+QT5.9.3+vlc-qt 完全编译
vlc-qt编译VS2017+QT5.9.0
【资源下载】
编译好的vlc-qt库文件以及头文件
近期评论