1. 程式人生 > >QtAV編譯配置和入門使用(Qt5.11.1+VS2017)

QtAV編譯配置和入門使用(Qt5.11.1+VS2017)

參考文件:https://github.com/wang-bin/QtAV/wiki/Build-QtAV

為Qt的音視訊開發儲備

一、編譯準備

我的編譯環境:Qt5.11.1-msvc2017-64bit

二、編譯配置

1.把下載好的ffmpeg-4.0.2-win64-dev.zip的include裡面的資料夾複製到D:\Qt\Qt5.11.1\5.11.1\msvc2017_64\include

2.把下載好的ffmpeg-4.0.2-win64-dev.zip的lib裡面的資料夾複製到D:\Qt\Qt5.11.1\5.11.1\msvc2017_64\lib

如圖:

三、編譯完成

配置好後開始編譯,本次測試大概出了60個編譯警告,忽略即可。

編譯完成後,找到輸出路勁下的lib_win_x86_64資料夾並開啟,可以看到生成的dll和lib,那麼就可以開始玩耍了。

四、測試編譯

進入編譯輸出路勁的bin目錄下,開啟Player.exe,隨便扔一個視訊進去播放。

如果不行先試試把ffmpeg-4.0.2-win64-shared.zip裡面的bin目錄下的*.dll都複製到player.exe的目錄下再試試。

五、簡單入門

測試編譯都沒有問題了以後,試試在自己的程式碼裡面實現播放視訊。

1.新建Qt Desktop工程qav

例如我的工程建在D:\Qt\Qpro\qav\qav.pro

把之前生成的QtAV1.lib、QtAVWidgets1.lib、QmlAV.lib放到D:\Qt\Qpro\qav\qtav\lib目錄下。

然後開啟qav.pro檔案增加如下幾行:

PROJECT_DIRECTORY = ../qav
QTAV_LIB = $${PROJECT_DIRECTORY}/qtav/lib
QTAV_HEADER = $${PROJECT_DIRECTORY}/qtav/include

INCLUDEPATH += $${QTAV_HEADER}
INCLUDEPATH += $${QTAV_HEADER}/QtAV
INCLUDEPATH += $${QTAV_HEADER}/QtAVWidgets
LIBS += -L$${QTAV_LIB} -lQtAV1
LIBS += -L$${QTAV_LIB} -lQtAVWidgets1

然後根據作者官網給出的最簡單的播放視訊例子:

Write a media player using QtAV is quite easy.

GLWidgetRenderer2 renderer;
renderer.show();
AVPlayer player;
player.setRenderer(&renderer);
player.play("test.avi");

因為需要在自己的視窗顯示視訊,所以稍作修改:

1.mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QtAV>
#include <QtAVWidgets>

using namespace QtAV;

namespace Ui {
class MainWindow;
}

class MainWindow : public QWidget
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    GLWidgetRenderer2 m_renderer;
    AVPlayer m_player;
};

#endif // MAINWINDOW_H

 2.mainwindow.ui

增加一個QWidget,ObjectName命名為widgetPlayer。

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QWidget" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>795</width>
    <height>528</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
   <item>
    <widget class="QWidget" name="widgetPlayer" native="true"/>
   </item>
  </layout>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

3.mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    m_renderer.setParent(this);
    ui->widgetPlayer->hide();
    ui->verticalLayout->addWidget(&m_renderer);
    m_renderer.show();
    m_player.setRenderer(&m_renderer);
    m_player.play("C:\\Users\\ema\\Desktop\\example.mp4");
}

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

編譯成功但發現執行不了:

把需要的dll都放到exe目錄下即可,如圖:

效果顯示: