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目錄下即可,如圖:
效果顯示: