QT5.14.2编译部署QTAV播放器环境

2022-01-12 13:48:03 浏览数 (1)

一、编译环境与QTAV介绍

QTAV是开源的跨平台的播放器框架,框架是基于QT开发的,可以在Android、IOS、WINDOWS、Linux各个平台编译部署运行。

QTAV官网介绍: http://www.qtav.org/

QTAV源码下载地址GitHub: https://github.com/wang-bin/QtAV

直接在GitHub上下载最新的源码就行。

我当前使用的QT环境是QT5.14.2,编译器是minGW和VS2017 都采用的是32位的编译器。

QT的下载地址:https://download.qt.io/archive/qt/5.14/5.14.2/

当前编译时,我使用的ffmpeg的版本是4.2.2 ,也可以使用最新的版本,QTAV的说明里就介绍,最好使用最新的ffmpeg版本。

ffmpeg4.2.2的库地址:https://download.csdn.net/download/xiaolong1126626497/13328939

也可以直接去ffmpeg的官方下载:http://www.ffmpeg.org/download.html

二、编译QTAV源码

在GitHub上作者也介绍过,如何编译部署QTAV。 地址: https://github.com/wang-bin/QtAV/wiki/Build-QtAV

在windows下编译,作者推荐了2种方法:

第一种: 直接把ffmpeg的头文件和库文件拷贝到QT安装目录下的编译器目录里,这样做简单粗暴。

第二种: 打开QTAV源码工程,修改qmake.conf文件,指定ffmpeg的头文件和库文件路径 让QT编译器能找到ffmpeg库和头文件在哪里。

我这里就是采用的第二种方法,直接指定路径,不污染QT安装目录下的文件。

代码语言:javascript复制
INCLUDEPATH  = C:/FFMPEG/ffmpeg_x86_4.2.2/include
LIBS  = -LC:/FFMPEG/ffmpeg_x86_4.2.2/lib

设置好路径之后,直接点击构建即可。

构建如果没有问题的话,在生成的目录下就会有一个自动安装脚本,双击运行即可自动拷贝文件到QT的安装目录下。

可以分别使用VS2017编译器、minGW编译器构建一遍QTAV源码,这样两个编译器都可以引用QTAV进行开发播放器。

编译完成之后,接下来就可以使用QTAV了。

在使用QTAV框架时,如果使用的是VS2017编译器,编译可能会报错,提示max函数不能识别。

解决办法如下:

在QT的pro工程文件里需要引用QTAV的框架库:

代码语言:javascript复制
#LIBS      = -L$$quote(C:QtQt5.14.25.14.2mingw73_32lib) -lQtAV1 -lQtAVWidgets1
LIBS      = -L$$quote(C:QtQt5.14.25.14.2msvc2017lib) -lQtAV1 -lQtAVWidgets1
LIBS  = -lopengl32 -lglu32

三、使用QTAV开发播放器

3.1 mainwindow.cpp 源码

代码语言:javascript复制
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    Widgets::registerRenderers();
    VideoOutput *m_vo;
    AVPlayer *m_player;
    m_player = new AVPlayer(this);
    m_vo = new VideoOutput(this);
    m_player->setRenderer(m_vo);
    setCentralWidget(m_vo->widget());
    m_player->play("D:/test1080.flv");
}

MainWindow::~MainWindow()
{
    delete ui;
}

3.2 mainwindow.h 源码

代码语言:javascript复制
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QtAV>
#include <QtAVWidgets>

using namespace QtAV;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

3.3 运行效果

0 人点赞