9.下載ffmpeg、使QT支持同時編譯32位和64位

1.FFMPEG下載html

進入http://ffmpeg.org/download.html,若是下載源碼,則在右下方:linux

若是在linux中,直接輸入git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg下載便可
下載庫到windows中,則點擊:git

這裏咱們選擇下載最新版本20200831的shared和dev:windows

  • Static靜態庫 : 這個版本只包含了ffmpeg.exe、ffplay.exe、ffprobe.exe三個可執行程序,沒有頭文件和庫文件。
  • Shared動態庫 : 這個版本包含了ffmpeg.exe、ffplay.exe、ffprobe.exe三個可執行程序和相關dll、lib等動態庫文件。
  • Dev開發庫 : 這個包含了頭文件和庫文件。

因爲我使用的QT庫有MSVC2015_64bit版本和MSVC2015_32bit版本的,因此須要64bit和32bit的shared和dev庫,shared庫用來運行時調用的,而dev庫用來編譯時調用的.下載完成後,以下圖所示:app

 

2.建立vs q項目(兼容64位和32位FFmpeg)
2.1目的 post

  • 當咱們選擇32平臺編譯QT項目時,則加載32位的FFmpeg庫進行編譯.
  • 當咱們選擇64平臺編譯QT項目時,則加載64位的FFmpeg庫進行編譯.

2.2開始
首先建立4個目錄include、lib、bin,src,因爲咱們下載的64位和32位的ffmpeg版本是一致的,因此頭文件都是同樣,主要是lib和dll庫文件不一樣,因此在lib和bin目錄里加以區分,項目結構以下圖所示:學習

include、lib、bin,src4個目錄建立好,而且ffmpeg導入完成後,接下來開始進入VS建立項目:測試

這裏須要對"爲解決方案建立目錄「取消勾選,不然的話,會在當前項目目錄下再次建立子目錄來存放項目.
建立過程當中,遇到設置類名的時候,須要勾上全部文件小寫,類名開頭大寫,方便移植到linux平臺,以下圖所示:ui

建立完成,接下來配置debug win32,右擊項目->屬性,能夠看到當前編譯配置:spa

添加頭文件路徑:

添加庫路徑目錄:

添加庫文件,avcodec.lib;avformat.lib;avutil.lib; avdevice.lib; avfilter.lib;postproc.lib; swresample.lib; swscale.lib;複製到附加依賴項中,以下圖所示:

設置輸出路徑和調試路徑:
因爲生成的執行程序要和dll庫一塊兒,而dll庫能夠經過放入系統文件位置處、或者配置環境變量實現、或者將執行程序配置到dll庫所在位置,也就是..\..\bin\winXX\下面.(linux下,則只能配置環境變量)
因此,咱們須要設置項目輸出路徑和調試路徑和dll庫路徑一致,設置以下兩張圖所示:

 

 

最後點擊應用,配置好debug win32後,咱們還須要切換到release win32,以下圖所示:

而後再重複操做配置全部路徑,配置路徑和debug win32的配置一致便可.

配置好win32後,接下來,咱們便切換到x64平臺,以下圖所示:

而後再重複操做,不過庫目錄須要改成..\..\lib\win64,輸出目錄和調試工做目錄改成..\..\bin\win64.
最後修改main.cpp,來打印FFmpeg配置信息:

#include "ffmpegtest.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QPlainTextEdit>

extern "C" {

#include <libavcodec/avcodec.h>

}

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  FfmpegTest w;

  QPlainTextEdit text(&w);

  text.resize(400,300);
  text.move(0,0);

#ifdef _WIN64
  text.setPlainText("is Win64");
#elif defined(_WIN32)
  text.setPlainText("is Win32");
#endif

  text.appendPlainText(avcodec_configuration());
  w.show();
  return a.exec();
}

2.3 測試-經過Debug X86來編譯32位

2.4 測試-經過Debug X64來編譯64位


3.建立creator項目(支持win32和x64)
接下來咱們來建立creator項目,在源目錄裏,新建FfmpegTest.pro:

編輯FfmpegTest.pro,修改成以下所示,而後咱們就能夠打開直接進行編譯了:

# ----------------------------------------------------
# This file is generated by the Qt Visual Studio Tools.
# ------------------------------------------------------

TEMPLATE = app
TARGET = FfmpegTest


QT += core gui widgets

DEFINES += QT_DEPRECATED_WARNINGS

HEADERS += ./ffmpegtest.h
SOURCES += ./ffmpegtest.cpp \
./main.cpp

FORMS += ./ffmpegtest.ui
RESOURCES += ffmpegtest.qrc


# msvc編譯器(這裏是設置源碼爲utf-8(默認爲gbk))
msvc{
QMAKE_CFLAGS += -source-charset:utf-8
QMAKE_CXXFLAGS += -source-charset:utf-8
}

INCLUDEPATH += $$PWD/../../include


#WINDOWS平臺
win32 {
contains(QT_ARCH, x86_64) {
message("x64")
# 輸出目錄
DESTDIR = $$PWD/../../bin/win64/
# 依賴模塊
LIBS += \
-L$$PWD/../../lib/win64 -lavformat \
-L$$PWD/../../lib/win64 -lavcodec \
-L$$PWD/../../lib/win64 -lavutil \
-L$$PWD/../../lib/win64 -lswscale


} else {
message("win32")
# 輸出目錄
DESTDIR = $$PWD/../../bin/win32/
# 依賴模塊
LIBS += \
-L$$PWD/../../lib/win32 -lavformat \
-L$$PWD/../../lib/win32 -lavcodec \
-L$$PWD/../../lib/win32 -lavutil \
-L$$PWD/../../lib/win32 -lswscale
}
}

 

3.1 測試-編譯32位

3.2 測試-編譯64位

 

 未完待續,下章學習:11.QT-ffmpeg+QAudioOutput實現音頻播放器

相關文章
相關標籤/搜索