Qt-VLC: 一个集成VLC的开源跨平台媒体播放库
1.简介
Qt-VLC是一个将 VLC 媒体框架与 Qt 集成的开源库,VLC 是强大的跨平台媒体播放框架,支持几乎所有音视频格式和流媒体协议 ,而 VLC-Qt 则简化了 Qt 与 VLC 的集成,让开发者能快速在 Qt 界面中实现媒体播放功能。VLC-Qt 是对 VLC 核心库(libvlc)的 Qt 封装,提供了 Qt 风格的 API(如 QObject 派生类、信号槽机制),支持:
本地 / 网络音视频文件播放(MP4、MKV、MP3 等);
流媒体播放(RTSP、HTTP 流等);
播放控制(暂停、停止、进度调节、音量控制);
视频渲染(支持 Qt Widgets 和 Qt Quick)。
2.安装编译
2.1.安装必要工具
- CMake:3.10 及以上版本(官网下载,选 Windows x64 安装包,勾选 “Add CMake to system PATH”)。
- Visual Studio 2022:安装时勾选 “使用 C++ 的桌面开发”(确保包含 MSVC 编译器和 Windows SDK)。
- Git(可选):用于克隆 VLC-Qt 源码(官网下载)。
2.2.下载 核心依赖
- Qt:需与 VS2022 兼容的版本(如 Qt 5.15.2 或 Qt 6.5.0),选择 msvc2022_64 架构(64 位)。下载地址:Qt 官方镜像,安装时勾选 “MSVC 2022 64-bit”。
- VLC SDK:64 位版本,需与编译目标架构一致(你的场景是 64 位)。下载地址:VLC 官网 SDK,解压到路径(如 D:/OpenProject/vlc-3.0.21-win64/sdk)。或者从以下网址下载:http://download.videolan.org/pub/videolan/vlc/last/


- VLC-Qt 源码:1) 方法 1(推荐):用 Git 克隆(包含
.git目录,避免版本检查错误)
git clone https://github.com/vlc-qt/vlc-qt.git
cd vlc-qt
2) 方法 2:直接下载源码包(GitHub Releases),解压到 D:/OpenProject/vlc-qt-master。
2.3.windows下编译
1.创建独立编译目录(分离编译)
在 VLC-Qt 源码目录外创建 build 目录(避免污染源码):
mkdir D:/OpenProject/vlc-qt-master/build
cd D:/OpenProject/vlc-qt-master/build
2.运行 CMake 生成 VS 项目
通过 CMake 命令配置编译参数,需指定 Qt 路径、VLC SDK 路径、平台特性等。
完整 CMake 命令(根据你的实际路径修改):
//[1]
cmake .. -DCMAKE_PREFIX_PATH="C:\Qt\Qt5.12.12\5.12.12\msvc2017_64" -DLIBVLC_LIBRARY="D:/OpenProject/vlc-3.0.21-win64/sdk/lib/libvlc.lib" -DLIBVLCCORE_LIBRARY="D:/OpenProject/vlc-3.0.21-win64/sdk/lib/libvlccore.lib" -DLIBVLC_INCLUDE_DIR="D:/OpenProject/vlc-3.0.21-win64/sdk/include" -DCMAKE_CXX_FLAGS="/D_WIN32_WINNT=0x0600 /D_WINSOCKAPI_ /FIwinsock2.h" -DCMAKE_EXE_LINKER_FLAGS="/DEFAULTLIB:ws2_32.lib" -DLIBVLC_VERSION=0x030015 -DDEBUG_SUFFIX=ON
//[2]
cmake --build . --config Debug
参数说明(核心):
- -DCMAKE_PREFIX_PATH:Qt 安装路径,确保 CMake 能找到 Qt 的 Qt5Config.cmake 等配置文件。
- -DVLC_INCLUDE_DIR 和 -DVLC_LIBRARY_DIR:指定 VLC SDK 的头文件和库文件位置,避免 “找不到 vlc.h” 等错误。
- LIBVLC_VERSION:匹配 VLC 版本(3.0.21 对应 0x030015),防止启用不支持的特性。
- CMAKE_CXX_FLAGS 中的宏:
- _WIN32_WINNT=0x0600:启用 Windows Vista 及以上特性(支持 WSAPoll)。
- _WINSOCKAPI_:阻止 winsock.h 被包含(解决头文件冲突)。
- /FIwinsock2.h:强制所有源码包含 winsock2.h(提供 WSAPoll 声明)。
- CMAKE_EXE_LINKER_FLAGS:链接 ws2_32.lib(WSAPoll 的实现库)。
3.解决常见编译错误
1) CMake版本报错
CMake Warning:
Ignoring extra path from command line:
"D:/OpenProject/vlc-qt-master/build/.5"
-- Building for: Visual Studio 17 2022
CMake Error at CMakeLists.txt:19 (CMAKE_MINIMUM_REQUIRED):
Invalid CMAKE_POLICY_VERSION_MINIMUM value "3". A numeric
major.minor[.patch[.tweak]] must be given.
CMake Error at CMakeLists.txt:20 (CMAKE_POLICY):
Invalid CMAKE_POLICY_VERSION_MINIMUM value "3". A numeric
major.minor[.patch[.tweak]] must be given.
-- Building VLC-Qt 1.2.0
fatal: not a git repository (or any of the parent directories): .git
修改如下:

2)poll函数报错
D:\OpenProject\vlc-3.0.21-win64\sdk\include\vlc\plugins\vlc_threads.h(90,11): error C3861: “poll”: 找不到标识符 [D:\OpenProje
ct\vlc-qt-master\build\src\core\Core.vcxproj]
(编译源文件“../../../src/core/Audio.cpp”)
原因:
错误 C3861: “poll”: 找不到标识符 发生在 Windows 环境下使用 MSVC 编译器编译 VLC-Qt 时,核心原因是 Windows 系统默认不支持 POSIX 标准的 poll 函数(poll 是 Linux/Unix 系统的系统调用,用于 I/O 多路复用),而 VLC 的头文件 vlc_threads.h 中直接使用了 poll,导致 MSVC 编译器无法识别。
解决思路:
在 Windows 下,需用 Windows 平台的等效函数 WSAPoll(属于 Winsock 库,功能类似 poll)替代 poll,并通过配置让编译器识别该替代函数。
具体解决方案:
代码修改:D:\OpenProject\vlc-3.0.21-win64\sdk\include\vlc\plugins\vlc_threads.h
CMake配置选项增加:
-DCMAKE_CXX_FLAGS="/D_WIN32_WINNT=0x0600 /D_WINSOCKAPI_ /FIwinsock2.h" -DCMAKE_EXE_LINKER_FLAGS="/DEFAULTLIB:ws2_32.lib"
.生成文件
CMake查找vlc-qt库的文件

vlc-qt核心库:

插件库:

qml开发用的库

qwidget开发用的库:

2.4.Linux下编译
从您的发行版仓库安装依赖项。支持的生成器包括make和ninja。make示例如下:
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Debug
$ make -j8
$ make install
2.5.macOS编译
在构建之前,你需要准备好VLC库和插件。运行cmake后执行make prepare,然后重新运行cmake。以常规库或应用程序的形式进行构建。
支持的生成器为make和ninja。将使用路径中的Qt和位于/Applications中的VLC。
make示例如下:
$ export PATH=$PATH:/path/to/Qt/5.6/clang_64/bin
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Debug
$ make prepare
$ cmake ..
$ make -j8
$ make install
编译成功后,E:\vlc-qt\build\include中只有VLCQtCore文件夹,需要新建VCLQtWidgets文件夹,并把E:\vlc-qt\src\widgets中几个头文件拷贝到VCLQtWidgets中。


3.Example的使用
打开E:\vlc-qt\examples\simple-player中的simple-player.pro,稍作修改如下:
#
# VLC-Qt Simple Player
# Copyright (C) 2015 Tadej Novak <tadej@tano.si>
#
TARGET = simple-player
TEMPLATE = app
CONFIG += c++11
QT += widgets
SOURCES += main.cpp \
SimplePlayer.cpp \
EqualizerDialog.cpp
HEADERS += SimplePlayer.h \
EqualizerDialog.h
FORMS += SimplePlayer.ui \
EqualizerDialog.ui
# Edit below for custom library location
LIBS += -LE:/vlc-qt/build/src/core/ -lVLCQtCore
LIBS += -LE:/vlc-qt/build/src/widgets -lVLCQtWidgets
INCLUDEPATH += E:/vlc-qt/build/include
编译不会报错,但是正常运行的画需要拷贝相应的dll和插件,如下图

播放本地文件:

也可以播放网络Url
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)