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


1.FFMPEG下載

進入http://ffmpeg.org/download.html,如果下載源碼,則在右下方:

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

這里我們選擇下載最新版本20200831的shared和dev:

  • 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庫用來編譯時調用的.下載完成后,如下圖所示:

 

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

  • 當我們選擇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平台,如下圖所示:

創建完成,接下來配置debug win32,右擊項目->屬性,可以看到當前編譯配置:

添加頭文件路徑:

添加庫路徑目錄:

添加庫文件,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實現音頻播放器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM