【ffplay】QT环境配置

150 阅读2分钟

环境配置

FFmpeg 工程用了大量的 linux 系统的函数,所以 在Window10 需要用 MSYS2 来编译。简单来说,MSYS2 就是一个软件套件,他可以把linux的软件转成 window的软件,编译打包成 exe文件在 window 运行。

MSVC 的编译器跟 MinGW 编译器的区别:如果你Qt项目里的 C 文件,里面用了linux 的api,那只能用MinGW来编译,用MSVC编译会报错。如果没用到 linux的api函数,用MSVC 还是 MinGW 都能编译成功。

1 选择编译器和debugger

ffplay源码中调用linuxAPI,因此本项目kits选择MinGW32bit,调试器选择gdb,具体如下:

image-20231213155501962.png

eg:本项目中所使用的ffmpeg库和SDL库均为32bit,具体配置需要结合自己所编译的库类型

2 导入库

导入ffplay源码和编译好的ffmpg、SDL库

具体参考:juejin.cn/post/705220…

image-20231213160128002.png

将两个库目录下的ddl动态库复制到QT文件的执行目录下

image-20231213160201173.png

3 配置pro文件

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
    cmdutils.c \
    ffplay.c

win32 {
INCLUDEPATH += $$PWD/ffmpeg-4.2.1-win32-dev/include
INCLUDEPATH += $$PWD/SDL2/include

LIBS += $$PWD/ffmpeg-4.2.1-win32-dev/lib/avformat.lib   \
        $$PWD/ffmpeg-4.2.1-win32-dev/lib/avcodec.lib    \
        $$PWD/ffmpeg-4.2.1-win32-dev/lib/avdevice.lib   \
        $$PWD/ffmpeg-4.2.1-win32-dev/lib/avfilter.lib   \
        $$PWD/ffmpeg-4.2.1-win32-dev/lib/avutil.lib     \
        $$PWD/ffmpeg-4.2.1-win32-dev/lib/postproc.lib   \
        $$PWD/ffmpeg-4.2.1-win32-dev/lib/swresample.lib \
        $$PWD/ffmpeg-4.2.1-win32-dev/lib/swscale.lib    \
        $$PWD/SDL2/lib/x86/SDL2.lib
}

HEADERS += \
    cmdutils.h \
    config.h

4 检查环境

分别检查 ffmpeg 和 SDL库是否配置成功

#if 0  // ffmpeg
#include <stdio.h>

int main()
{

    printf("Hello World!\n");
    return 0;
}
#endif
#if 0  // SDL
#include <stdio.h>

#include "libavutil/avutil.h"

int main()
{
    printf("Hello FFMPEG, version is %s\n", av_version_info());
    return 0;
 }
#endif
#if 1
#include <stdio.h>
#include <SDL.h>

#undef main
int main()
{
    printf("Hello World!\n");

    SDL_Window *window = NULL;

    SDL_Init(SDL_INIT_VIDEO);

    window = SDL_CreateWindow("Basic Window",
                              SDL_WINDOWPOS_UNDEFINED, // 默认生成窗口位置:中心
                              SDL_WINDOWPOS_UNDEFINED,
                              640,						// 窗口大小
                              480,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if(!window){
        printf("can't create window:%s\n", SDL_GetError());
        return 1;

    }

    SDL_Delay(10000); // 延迟10s

    // 释放资源
    SDL_DestroyWindow(window);
    SDL_Quit();


    return 0;
}
#endif

5 加载源码文件

将ffplay.c及其依赖文件导入项目,媒体文件放入执行目录下

输入参数,执行

image-20231213160643236.png

6 执行成功

image-20231213160746758.png