项目中要用到视频播放,Qt封装的视频库里用得多的就是QtAV和vlc-qt了(其他的主要是自己去封装FFmpeg,不过用现成的话相对简单点,如果应用不是很复杂的话直接用别人封装好的就行),具体的可以百度或者github上去了解,本文主要是记录vlc-qt的编译和使用过程。
《错过》----顾城
隔膜的薄冰溶化了,湖水是那样透彻,被雪和谜掩埋的生命,都在春光中复活。
一切都明明白白,但我们仍匆匆错过,因为你相信命运,因为我怀疑生活……
本文目录
1.准备工作-vlc库
2.准备工作-CMake
3.准备工作-vlc-qt
4.编译
5.使用
6.参考
下载链接: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的环境中去了,这样可以不用去设置环境变量之类的。
把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
下载链接: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)
下载链接: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
准备好需要的东西之后就可以编译了,作者有个简易的编译说明: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文件夹。
然后点击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版本改为自己的;
一顿瞎操作之后,终于可以点 Configure和Generate生成vs2015工程了。
成功之后再去改一下build文件夹下的cmake_install.cmake文件,不然编译会出错,如下图中红色圈出来的已经把目录的msvc2015/include/换为了msvc2015/bin/
改好之后用vs2015打开build文件夹下的VLC-Qt.sln工程文件,这时候还有一个要改的地方,分别修改Core,PluginQml,Qml,Widgets工程的属性>>配置>>链接器>>命令行>>其它选项下填入:
/SAFESEH:NO
貌似有些人需要删掉已有的内容,有的直接追加在后面就行
修改好四个的属性后,直接在ALL_BUILD工程上右键菜单点生成,就可以生成动态库了,生成成功后再在INSTALL工程上右击生成,就可将库提取到安装目录里了,即在CMake的的时设置的那个目录(vlc-qtinstall)。我分别生成了debug和release的(切换后记得再改下属性>>命令行>>其他选项的内容)。
install的时候可能会报vlcqt not found,我是debug报的,我又去生成release没遇到,完了又回头再次点生成debug版的,那个提示莫名其妙消失了。
install完成后,在对应目录(vlc-qtinstall)下应该已经有了四个文件,编译也就完成了。
先把编译出来的文件放到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”
博客-编译使用:https://blog.csdn.net/wj2itp08/article/details/78391261
博客-编译:https://blog.csdn.net/octdream/article/details/82079907
博客-使用:https://blog.csdn.net/octdream/article/details/82256113