9.下载ffmpeg、使QT支持同时编译32位和64位

2020-09-14 13:52:55 浏览数 (1)

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库所在位置,也就是....binwinXX下面.(linux下,则只能配置环境变量) 所以,我们需要设置项目输出路径和调试路径和dll库路径一致,设置如下两张图所示:

最后点击应用,配置好debug win32后,我们还需要切换到release win32,如下图所示:

然后再重复操作配置所有路径,配置路径和debug win32的配置一致即可.

配置好win32后,接下来,我们便切换到x64平台,如下图所示:

然后再重复操作,不过库目录需要改为....libwin64,输出目录和调试工作目录改为....binwin64. 最后修改main.cpp,来打印FFmpeg配置信息:

代码语言:javascript复制
#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,修改为如下所示,然后我们就可以打开直接进行编译了:

代码语言:javascript复制
# ----------------------------------------------------
# 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位

0 人点赞