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)。

官网:https://github.com/vlc-qt/vlc-qt

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

Logo

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

更多推荐