使用CMake将FFmpeg与Qt6应用程序捆绑

f1tvaqid  于 2023-01-09  发布在  其他
关注(0)|答案(3)|浏览(288)

我尝试捆绑FFmpeg与我的Qt6应用程序,使用CMake作为Mac OS系统(苹果芯片)上的构建系统。

FetchContent_Declare(
    ffmpeg
    GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg.git
    GIT_TAG        n5.1.2
)

FetchContent_MakeAvailable(ffmpeg)

include_directories(
    "/Volumes/ieasybooks/taqtie/build-repo-Qt_6_4_0_for_macOS-Debug/_deps/ffmpeg-src/libavutil"
    "/Volumes/ieasybooks/taqtie/build-repo-Qt_6_4_0_for_macOS-Debug/_deps/ffmpeg-src/libavcodec"
    "/Volumes/ieasybooks/taqtie/build-repo-Qt_6_4_0_for_macOS-Debug/_deps/ffmpeg-src/libavformat"
)

target_link_libraries(
    taqtie
    PRIVATE
    "/Volumes/ieasybooks/taqtie/build-repo-Qt_6_4_0_for_macOS-Debug/_deps/ffmpeg-src/libavutil/libavutil.h"
    "/Volumes/ieasybooks/taqtie/build-repo-Qt_6_4_0_for_macOS-Debug/_deps/ffmpeg-src/libavcodec/libavcodec.h"
    "/Volumes/ieasybooks/taqtie/build-repo-Qt_6_4_0_for_macOS-Debug/_deps/ffmpeg-src/libavformat/libavformat.h"
)

但是当我包含像这样的FFmpeg库时:

extern "C" {
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
#include <avutil.h>
}

出现以下错误:

main.cpp:6:10: In included file: 'libavutil/avconfig.h' file not found

我在这个问题上花了一个月的时间,我找不到任何解决办法。我甚至问了ChatGPT:)
你知道吗?
该项目的代码可以在这里找到:https://github.com/ieasybooks/taqtie.

omqzjyyz

omqzjyyz1#

我发现这个FFmpeg设置:https://github.com/thomas-moulard/visp-deb/blob/master/CMakeModules/FindFFMPEG.cmake,我在我的项目中使用了它,现在它工作得很好。
我是这样使用它的:

FIND_PATH(FFMPEG_INCLUDE_DIR_AVUTIL NAMES libavutil/avutil.h)
FIND_PATH(FFMPEG_INCLUDE_DIR_AVCODEC NAMES libavcodec/avcodec.h)
FIND_PATH(FFMPEG_INCLUDE_DIR_AVFORMAT NAMES libavformat/avformat.h)
FIND_PATH(FFMPEG_INCLUDE_DIR_AVDEVICE NAMES libavdevice/avdevice.h)
FIND_PATH(FFMPEG_INCLUDE_DIR_AVFILTER NAMES libavfilter/avfilter.h)
FIND_PATH(FFMPEG_INCLUDE_DIR_SWSCALE NAMES libswscale/swscale.h)
FIND_PATH(FFMPEG_INCLUDE_DIR_SWRESAMPLE NAMES libswresample/swresample.h)
FIND_PATH(FFMPEG_INCLUDE_DIR_POSTPROC NAMES libpostproc/postprocess.h)

target_include_directories(taqtie PRIVATE
    ${FFMPEG_INCLUDE_DIR_AVUTIL}
    ${FFMPEG_INCLUDE_DIR_AVCODEC}
    ${FFMPEG_INCLUDE_DIR_AVFORMAT}
    ${FFMPEG_INCLUDE_DIR_AVDEVICE}
    ${FFMPEG_INCLUDE_DIR_AVFILTER}
    ${FFMPEG_INCLUDE_DIR_SWSCALE}
    ${FFMPEG_INCLUDE_DIR_SWRESAMPLE}
    ${FFMPEG_INCLUDE_DIR_POSTPROC}
)

FIND_LIBRARY(FFMPEG_AVUTIL_LIBRARY NAMES avutil)
FIND_LIBRARY(FFMPEG_AVCODEC_LIBRARY NAMES avcodec)
FIND_LIBRARY(FFMPEG_AVFORMAT_LIBRARY NAMES avformat)
FIND_LIBRARY(FFMPEG_AVDEVICE_LIBRARY NAMES avdevice)
FIND_LIBRARY(FFMPEG_AVFILTER_LIBRARY NAMES avfilter)
FIND_LIBRARY(FFMPEG_SWSCALE_LIBRARY NAMES swscale)
FIND_LIBRARY(FFMPEG_SWRESAMPLE_LIBRARY NAMES swresample)
FIND_LIBRARY(FFMPEG_POSTPROC_LIBRARY NAMES postproc)

target_link_libraries(taqtie PRIVATE
    ${FFMPEG_AVUTIL_LIBRARY}
    ${FFMPEG_AVCODEC_LIBRARY}
    ${FFMPEG_AVFORMAT_LIBRARY}
    ${FFMPEG_AVDEVICE_LIBRARY}
    ${FFMPEG_AVFILTER_LIBRARY}
    ${FFMPEG_SWSCALE_LIBRARY}
    ${FFMPEG_SWRESAMPLE_LIBRARY}
    ${FFMPEG_POSTPROC_LIBRARY}
)

最后,我可以像这样导入库:

#include <libavutil/avutil.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavdevice/avdevice.h>
#include <libavfilter/avfilter.h>
#include <libswscale/swscale.h>
#include <libswresample/swresample.h>
#include <libpostproc/postprocess.h>

谢谢你的帮助非常感谢。

mlnl4t2r

mlnl4t2r2#

好了,最后完成这个。我没有使用上面附加的cmake代码来链接FFmpeg库,而是使用了OBS Studio项目在GitHub上使用的相同的FindFFmpeg.cmake文件,它按预期工作!
我还不知道有什么不同,我需要仔细阅读并找出不同之处。

相关问题