vlc-qt的编译与使用(MSVC2015+Qt5.9.8)

0.前言

项目中要用到视频播放,Qt封装的视频库里用得多的就是QtAV和vlc-qt了(其他的主要是自己去封装FFmpeg,不过用现成的话相对简单点,如果应用不是很复杂的话直接用别人封装好的就行),具体的可以百度或者github上去了解,本文主要是记录vlc-qt的编译和使用过程。

《错过》----顾城

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

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

本文目录

1.准备工作-vlc库

2.准备工作-CMake

3.准备工作-vlc-qt

4.编译

5.使用

6.参考


1.准备工作-vlc库

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

经过我无数次的错误尝试,至少版本2.2.4和2.2.6都是能用的。我编译器是mscv2015-32bit,所以选的win32那个链接http://download.videolan.org/vlc/2.2.6/win32/vlc-2.2.6-win32.7z  貌似需要下7z这个才有sdk?

下载并解压之后就可以把我们需要的文件复制到qt的环境中去了,这样可以不用去设置环境变量之类的。

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第1张图片

把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  

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)

3.准备工作-vlc-qt

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

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第2张图片

版本的原因我下的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-qtbuildvlc-qtinstall),打开CMake的gui程序,选择source即vlc-qt源码文件夹,选择build即新建的vlc-qtbuild文件夹。

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第3张图片

 然后点击Configure试一下

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第4张图片

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

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

还有就是LIBVLCCORE_LIBRARYLIBVIC_LIBRARY的链接是不正确的,分别改成:libvlccore.liblibvlc.lib

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第5张图片

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

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第6张图片

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

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第7张图片

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

成功之后再去改一下build文件夹下的cmake_install.cmake文件,不然编译会出错,如下图中红色圈出来的已经把目录的msvc2015/include/换为了msvc2015/bin/

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第8张图片

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

/SAFESEH:NO

貌似有些人需要删掉已有的内容,有的直接追加在后面就行

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第9张图片

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第10张图片

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

install的时候可能会报vlcqt not found,我是debug报的,我又去生成release没遇到,完了又回头再次点生成debug版的,那个提示莫名其妙消失了。

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第11张图片

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

vlc-qt的编译与使用(MSVC2015+Qt5.9.8)_第12张图片

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”

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

你可能感兴趣的:(Qt,略知一二)