• 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位

     

  • 相关阅读:
    ES6你不知道的let关键字及变量的提升
    [ts] Property 'aaa' does not exist on type 'Window' 解决办法
    EXPRESS项目PM2启动NODE_ENV传参数不生效问题解决方法
    react组件开发规范总结
    JavaScript heap out of memory解决方法
    移动端响应式布局--你不知道的CSS3.0媒体查询,解决rem部分情况下无法适配的场景
    在nodeJs的Express框架下用TypeScript编写router路由出现import关键字错误的解决方案
    Zepto的天坑汇总
    mac下CornerstoneSVN出错 Description : The working copy is locked due to a previous error
    bootstrap的popover插件在focus模式时在Safari浏览器无法使用的bug解决方案
  • 原文地址:https://www.cnblogs.com/lidabo/p/15825799.html
Copyright © 2020-2023  润新知