vlc-qt的编译与使用(MSVC+Qt5)

(最初的环境是 MSVC2015-32bit+Qt5.9,新的配置为 MSVC2019-64bit+Qt5.15,更新时间 2021-5-30)

0.前言

项目中要用到视频播放,Qt 封装的视频库里用得多的第三方库就是 QtAV 和 vlc-qt 了(其他的主要是自己去封装 FFmpeg,当然 Qt 自带的的多媒体库基本也够用了只是要额外装解码器),具体的可以百度或者 github 上去了解,本文主要是记录 vlc-qt 的编译和使用过程。

《错过》----顾城

隔膜的薄冰溶化了,湖水是那样透彻,被雪和谜掩埋的生命,都在春光中复活。

一切都明明白白,但我们仍匆匆错过,因为你相信命运,因为我怀疑生活……

本文目录

1.准备工作-vlc库

2.准备工作-CMake

3.准备工作-vlc-qt

4.编译

5.使用

6.参考


1.准备工作-vlc库

下载链接:http://download.videolan.org/vlc/

vlc-qt 1.1 的发行版用的 vlc 2.2.4,实测 2.2.6 和 2.2.8 也是可以使用的,也有人用 3.0。如果编译器是 mscv2015-32bit,可以选的 win32 那个链接 http://download.videolan.org/vlc/2.2.6/win32/vlc-2.2.6-win32.7z  (需要带 sdk 的压缩包),如果是 64bit 就下 win64 那个。

可以把需要的文件复制到 Qt 安装目录去,这里参考:https://blog.csdn.net/octdream/article/details/82079907

不过 vlc 也没必要复制,因为 vlc-qt install 的时候已经打包好了需要的东西,我之前也是依葫芦画瓢。

把 plugins 和两个 dll 文件复制到 Qt 安装目录下的 bin 目录中(如:D:\Qt\Qt5.9.8\5.9.8\msvc2015\bin)

把 sdk/include/vlc 目录复制到 Qt 安装目录下的 include 目录中(如:D:\Qt\Qt5.9.8\5.9.8\msvc2015\include)

把 sdk/lib 下面的几个 lib 文件复制到qt安装目录下面的lib目录中(如:D:\Qt\Qt5.9.8\5.9.8\msvc2015\lib)

这里我们还要设置一个环境变量,就是我们 plugins 文件夹的位置,如:

VLC_PLUGIN_PATH   D:/Qt/Qt5.9.8/5.9.8/msvc2015/bin/plugins  

也可以直接 CMake gui 里 Add Entry:

2.准备工作-CMake

下载链接:https://cmake.org/download/

随便下一个版本新点的就行了,我下的 cmake-3.14.3-win64-x64.msi

安装好 CMake 还要设置一个环境变量,指到包含 bin 及 lib 的一级,例如:

CMAKE_PREFIX_PATH   D:/Qt/Qt5.9.8/5.9.8/msvc2015

(可以确认下环境变量生效没,没有的话参考https://blog.csdn.net/mldr001czb/article/details/80295894

也可以直接 CMake gui 里 Add Entry:

3.准备工作-vlc-qt

下载链接:https://vlc-qt.tano.si/ 

版本的原因我下的github的源码 ,不然就可以不用编译了。利用git clone:

git clone git://github.com/vlc-qt/vlc-qt.git
cd vlc-qt
git submodule init
git submodule update

4.编译

准备好需要的东西之后就可以编译了,作者有个简易的编译说明:https://github.com/vlc-qt/vlc-qt/blob/master/BUILDING.md

 (因为我出错的次数很多,所以重复了很多次,无奈)

首先,在 vlc-qt 目录旁边或者文件夹下分别建两个用来放 build 文件和 install 文件的文件夹(我的叫 vlc-qtbuild 和 vlc-qtinstall),打开 CMake 的 gui 程序,选择 source 即 vlc-qt 源码文件夹,选择 build 即新建的 vlc-qtbuild 文件夹。(后来觉得还是 bulid 和 install 放到 vlc-qt 目录下好点)

 然后点击Configure试一下

 如果现在就点 Generate 的话是不行的,有些参数还得改一下:

CMAKE_INSTALL_PREFIX 可以改成自己创建的文件夹(我是 vlc-qtinstall )方便管理;

还有就是 LIBVLCCORE_LIBRARY 和 LIBVIC_LIBRARY 的链接是不正确的,分别改成:libvlccore.lib 和 libvlc.lib

然后是点击 Add Entry 添加一个变量,Name 填 CMAKE_DEBUG_POSTFIX,Type 选 String,Value 填 d,描述不用写,这样如果是 debug 版的可以带 d 后缀; 

然后是 vlc-qt\config\Dependencies.cmake 文件中的Qt版本改为自己的;

一顿瞎操作之后,终于可以点 ConfigureGenerate 生成 vs2015 工程了。

(如果路径不匹配才需要改这一步)Generate 成功之后再去改一下 build 文件夹下的 cmake_install.cmake 文件,不然编译会出错,如下图中红色圈出来的已经把目录的 msvc2015/include/ 换为了 msvc2015/bin/

改好之后用 vs2015 打开 build 文件夹下的 VLC-Qt.sln 工程文件,这时候还有一个要改的地方,分别修改 Core,PluginQml,Qml,Widgets 工程的属性>>配置>>链接器>>命令行>>其它选项下填入:

/SAFESEH:NO

关闭 SAFESEH 警告,不关闭会把这个警告认为错误。貌似有些人需要删掉已有的命令行内容,有的直接追加在后面就行,我是直接加在后面的。

修改好四个的属性后,直接在 ALL_BUILD 工程上右键菜单点生成,就可以生成动态库了,生成成功后再在 INSTALL 工程上右击生成,就可将库提取到安装目录里了,即在 CMake 的的时设置的那个目录(vlc-qtinstall)。我分别生成了 debug 和 release 的(切换后记得再改下属性>>命令行>>其他选项的内容)。

install 的时候可能会报 vlcqt not found(如下图),我是 debug 报的,我又去生成 release 没遇到,完了又回头再次点生成 debug 版的,那个提示莫名其妙消失了。这个问题目前还没彻底决绝,对 qml 有影响,因为没正常生成 qmltypes ,所以属性不能正常提示。

install 完成后,在对应目录(vlc-qtinstall)下应该已经有了四个文件,编译也就完成了。 

5.使用

如果图方便,可以把编译出来的文件放到 Qt 环境中,也可以在项目里设置依赖路径。

把 bin 目录下的所有 dll 文件拷贝到 Qt 的 bin 目录下(如:D:\Qt\Qt5.9.8\5.9.8\msvc2015\bin)

将 include 目录下的所有文件夹包括:VLCQtCore、VLCQtQml、VLCQtWidgets 拷贝到 Qt 的 include 目录下(如:D:\Qt\Qt5.9.8\5.9.8\msvc2015\include)

将 lib 目录下的所有文件包括 cmake 文件夹及所有的 lib 文件拷贝到 Qt 的 lib 目录下(如: D:\Qt\Qt5.9.8\5.9.8msvc2015\lib)

将 qml 目录下的文件夹 VLCQt 拷贝到 Qt 的 qml 目录下。

然后我们可以参考 vlc-qt/examples 里的例子。

widgets 的话,可以直接跑示例,pro 文件的 lib 配置可能要改一下:

//如果是qml就加lVLCQtQml,widgets就用lVLCQtWidgets
CONFIG(debug, debug|release) {
    LIBS += -lVLCQtCored -lVLCQtWidgetsd
} else {
    LIBS += -lVLCQtCore -lVLCQtWidgets
}

qml 的话,我把示例的代码 copy 的一部分然后放到自己的项目中:

先把 pro 改一下

//xxx.pro
CONFIG(debug, debug|release) {
    LIBS += -lVLCQtCored  -lVLCQtQmld
} else {
    LIBS += -lVLCQtCore  -lVLCQtQml
}

使用 VLCQt 组件

//Player.qml
import QtQuick 2.9
import QtQuick.Controls 2.2
import VLCQt 1.1

Rectangle {
    width: 640
    height: 480
    color: "black"

    VlcPlayer {
        id: player
        //logLevel: Vlc.DebugLevel
        //logLevel: Vlc.ErrorLevel
        //audioTrack:Vlc.MPEG2Audio
        //videoTrack: Vlc.MPEG4Video
        //网络视频流测试
        url: "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov"
        //本地文件测试
        //url:"file:///C:/Users/zhaozhao/Videos/Avicii.mp4"
    }
    VlcVideoOutput {
        id: video
        source: player
        anchors.fill: parent
        anchors.bottomMargin: 30
    }
    Row{
        x:2
        y:2
        spacing: 10
        Text {
            id: length
            color: "white"
            text: "length:"+player.length
        }
        Text {
            id: position
            color: "white"
            text: "position:"+player.position
        }
    }
    Slider{
        height: 30
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        from:0
        to:1
        value:0
        onValueChanged: {
            player.position=value;
        }
    }
}

 

//main.qml
import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Test VLCQt")

    color: "darkCyan"

    //只是一个简单的测试,具体功能可以参照示例和api
    Player{
          anchors.fill: parent
          anchors.margins: 10
    }
        
}

(程序发布的时候记得把相关依赖复制出来) 

这样简单的使用测试也就完成了 

(2020-01-01)在 MSVC2017+Qt5.12.6 下编译成功,但是运行报错::-1: error: LNK1181: 无法打开输入文件“VLCQtCore.lib”。

(2021-02-25)评论里有小伙伴改了配置文件可以正常运行了(qt5.13.0+msvc2017_64)。

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/lib/ -lVLCQtCore
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/lib/ -lVLCQtCored
else:unix: LIBS += -L$$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/lib/ -lVLCQtCore
 
INCLUDEPATH += $$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/include
DEPENDPATH += $$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/include
 
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/lib/ -lVLCQtQml
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/lib/ -lVLCQtQmld
else:unix: LIBS += -L$$PWD/../../../qt5.13.0/5.13.0/msvc2017_64/lib/ -lVLCQtQml

6.参考

博客-编译使用:https://blog.csdn.net/wj2itp08/article/details/78391261

博客-编译:https://blog.csdn.net/octdream/article/details/82079907

博客-使用:https://blog.csdn.net/octdream/article/details/82256113

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龚建波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值