windows下编译vlc-qt (最新)
简述 vlc-qt
VLC-Qt是用于连接Qt和libvlc库的免费库。它包含用于主要媒体播放的核心类和一些用于加快媒体播放器开发的GUI类。
抛砖及引玉:官方提供的所有SDK均基于Qt 5.6.1和VLC 2.2.4,也就是说你在使用官方提供的sdk时必须使用Qt5.6.1和VLC 2.2.4版。那么问题来了,实际开发中要使用其他版本Qt或VLC时就只能重新编译源码以获取对应SDK。
说明
本文基于Qt 5.12.4(msvc2015)、Vs2015、CMake 3.15.5、VLC 3.0.0、vlc-qt-1.1.1来介绍如何编译vlc-qt。(注:均为x64)
链接(加粗本文为编译需要下载 ):
vlc-qt - 官网地址(https://vlc-qt.tano.si/)
vlc-qt - Github地址(https://github.com/vlc-qt/vlc-qt)
vlc-qt - 示例地址(https://github.com/vlc-qt/examples)
vlc 开发库 - 地址(http://download.videolan.org/pub/videolan/vlc/)
cmake下载(https://cmake.org/download/)
编译
这里默认已经安装好Qt、Vs、CMake。并已下载好vlc开发库与vlc-qt源码。
一、解压并配置vlc 3.0.0开发库
此时需要做4个操作:
1、把plugins目录与libvlc.dll、libvlccore.dll复制到qt安装目录下的bin目录中
(例如:D:\Qt\Qt5.7.1\5.7\msvc2015\bin)
2、把sdk/include/vlc目录复制到qt安装目录下的include目录中
(例如:D:\Qt\Qt5.7.1\5.7\msvc2015\include)
3、把sdk/lib下面的几个lib文件复制到qt安装目录下面的lib目录中
(例如:D:\Qt\Qt5.7.1\5.7\msvc2015\lib)
4、设置环境变量,plugins文件夹的位置 (下图)
变量名:VLC_PLUGIN_PATH
变量值:D:/Qt/Qt5.7.1/5.7/msvc2015/bin/plugins
二、解压vlc-qt源码并使用CMake编译
1、配置并运行CMake
(1) 在"Where is the source code:"处选择vlc-qt的源码路径
(2) 在"Where to build the binaries:"处选择vlc-qt的源码编译路径。(该目录一般为空)
(3) 点击"Configure"按钮配置。这里我们选择使用Vs2015编译为x64位版本。然后点击"Finish"开始执行。
2、修改CMake运行配置
(1) “CMAKE_INSTALL_PREFIX” 为设定最终编译结果输出的目录,一般不要放在C盘。这里我们改为"C:/Users/Administrator/Desktop/VLC-Qt"
(2) “LIBVLCCORE_LIBRARY” 。这里需要将后面的"vlccore.lib"改为"libvlccore.lib"
(3) “LIBVLC_LIBRARY” 。这里需要将后面的"vlc.lib"改为"libvlc.lib"
(4) 增加一个CMake环境变量。点击CMake软件上的"Add Entery"按钮。为了使输出debug版本库时名称带有d结尾。
名称:CMAKE_DEBUG_POSTFIX
类型:STRING
数值:d
说明:可以为空
修改后结果如下图:
设置好后,点击configure成功后,然后执行Generate生成VS2015工程。
三、Vs编译生成的工程
在CMake编译结束后,vlc-qt-1.1.1_build文件夹中产生了很多文件与工程。
1、修改cmake_install.cmake
用文本打开vlc-qt-1.1.1_build/cmake_install.cmake文件夹。将下图中的"include"改为"bin"即可。
2、用Vs2015打开vlc-qt-1.1.1_build/VLC-Qt.sln工程
分别修改Core,PluginQml,Qml,Widgets工程的属性>>调试/发布>>链接器>>命令行>>其它选项下填入/SAFESEH:NO
然后选择"ALL_BUILD"工程进行编译。成功后再选择"INSTALL"工程进行编译,使输出目录至“VLC-Qt”。
至此编译完毕,结果如下
四、Vs编译时与使用过程中常见错误问题解决
问题一:error C2065: “libvlc_media_read_cb”: 未声明的标识符
解决:在vlc.h 文件中 添加 typedef __int64 ssize_t; 即可解决此问题
问题二:编译成功,运行初始化 libvlc_new(0, NULL);一直返回NULL
解决:未包含plugins这个文件夹
问题三:退出时候 程序中断 libvlc_release(m_inst)
解决:判断下m_inst的值,如果为空则不释放,否则会中断
问题四:缺少libvlc.dll 缺少 libvlccore.dll
解决:添加对应的dll文件到运行目录
问题五:libvlc_media_new_path 如果路径参数错误 则返回NULL
解决:主要路径的正确性 例如:E:\Doubango.png 如果写成 E://Doubango.png 就会出错
问题六:VLC is unable to open the MRL ‘file:///E:/Doubango%BF%F2%BC%DC.png’.
解决:路径需要转换成UTF8导入
问题七:用来接收VLC送过来的流
解决:用来接收的流 只需要一个句柄即可
问题八:报错vlc.lib 文件无效或损坏
解决:先将vlc.lib引用去掉
问题九:提示找不到poll标识符
解决:定位到poll代码区。会看到一个poll的宏定义。需要把这个宏定义剪贴到 poll代码区的上方。
问题十:提示vlc.lib文件读取错误,文件破坏
解决:把libvlc.lib改成vlc.lib 把原始的vlc.lib改成其他文件名或者两个名称相互修改成对方
问题十一:关闭SAFESEH警告,不关闭会把这个警告认为错误
解决:分别修改Core,PluginQml,Qml,Widgets工程的属性>>调试/发布>>链接器>>命令行>>其它选项下填入 /SAFESEH:NO 斜杠后面不能有空格
问题十二:ssize_t问题
解决:把ssize_t 类型改成__int64 此问题解决(但由于ssize_t是跨平台类型,所以程序移植后可能会出问题)。
下载
下载包内容为:vlc-3.0.0-win64.7z、vlc-qt-1.1.1.tar.gz、上述编译后的库(debug、release)
关注
微信公众号搜索"Qt_io_"或"Qt开发者中心"了解更多关于Qt、C++开发知识.。
笔者 - jxd