-- FFmpeg库路径配置 - 支持环境变量和默认路径 local ffmpeg_path = os.getenv("FFMPEG_PATH") or "E:/AAA/ffmpeg-7.0.2-full_build-shared" local ffmpeg_include = ffmpeg_path .. "/include" local ffmpeg_lib = ffmpeg_path .. "/lib" -- 检查FFmpeg路径是否存在 if not os.isdir(ffmpeg_include) then print("Warning: FFmpeg include directory not found: " .. ffmpeg_include) print("Please set FFMPEG_PATH environment variable or update the path in xmake.lua") end -- 基础库 target("av_base") set_kind("static") add_files("code/base/*.cpp") add_headerfiles("code/base/*.h") add_includedirs(".", {public = true}) -- Windows特定设置 if is_plat("windows") then add_syslinks("ws2_32", "winmm") -- FFmpeg库链接 add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") else add_syslinks("pthread") end -- 编解码库 target("av_codec") set_kind("static") add_files("code/codec/*.cpp") add_headerfiles("code/codec/*.h") add_includedirs(".", {public = true}) add_deps("av_base") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") else add_links("avcodec", "avformat", "avutil", "swscale", "swresample") end -- 捕获库 target("av_capture") set_kind("static") add_files("code/capture/*.cpp") add_headerfiles("code/capture/*.h") add_includedirs(".", {public = true}) add_deps("av_base") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 混流库 target("av_muxer") set_kind("static") add_files("code/muxer/*.cpp") add_headerfiles("code/muxer/*.h") add_includedirs(".", {public = true}) add_deps("av_base") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 工具库 target("av_utils") set_kind("static") add_files("code/utils/*.cpp") add_headerfiles("code/utils/*.h") add_includedirs(".", {public = true}) add_deps("av_base") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- -- 完整的AV框架库 -- target("av_framework") -- set_kind("static") -- add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils") -- add_includedirs(".", {public = true}) set_runtimes("MD") target("player") add_rules("qt.widgetapp") set_targetdir("$(buildir)/bin") add_files("integration_example.cpp", {rules = "qt.moc"}) add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils") add_includedirs(".", {public = true}) add_files("code/player/*.cpp") add_headerfiles("code/player/*.h") add_files("code/player/*.h", {rules = "qt.moc"}) add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 基础测试程序 target("test_basic") set_kind("binary") add_files("test_basic.cpp") add_deps("av_base") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 编解码测试程序 target("test_codec") set_kind("binary") add_files("test_codec.cpp") add_deps("av_codec") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 解码器测试程序 target("test_decoder") set_kind("binary") add_files("test_decoder.cpp") add_deps("av_codec") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 音频编码器测试程序 target("test_audio_encoder") set_kind("binary") add_files("test_audio_encoder.cpp") add_deps("av_codec") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 窗口采集测试程序 target("test_window_capture") set_kind("binary") add_files("test_window_capture.cpp") add_deps("av_capture") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 工具类测试程序 target("test_utils") set_kind("binary") add_files("test_utils.cpp") add_deps("av_utils") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 混流器测试程序 target("test_muxer") set_kind("binary") add_files("test_muxer.cpp") add_deps("av_muxer") set_targetdir("$(buildir)/bin") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 音频调试测试程序 target("test_audio_debug") set_kind("binary") add_files("test_audio_debug.cpp") add_deps("av_base", "av_codec", "av_utils") add_files("code/player/player_core_v2.cpp") add_files("code/player/audio_output.cpp") add_files("code/player/thread_manager.cpp") add_headerfiles("code/player/*.h") set_targetdir("$(buildir)/bin") add_rules("qt.widgetapp") add_frameworks("QtCore", "QtWidgets", "QtMultimedia") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 带UI的播放器测试程序 target("test_player_with_ui") add_rules("qt.widgetapp") set_targetdir("$(buildir)/bin") add_files("test_player_with_ui.cpp", {rules = "qt.moc"}) add_deps("av_base", "av_codec", "av_utils") add_files("code/player/*.cpp") add_headerfiles("code/player/*.h") add_files("code/player/*.h", {rules = "qt.moc"}) add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end -- 混流器测试程序 target("test_seek_pause_fixed") set_kind("binary") add_rules("qt.widgetapp") add_files("test_seek_pause_fixed.cpp") add_deps("av_base", "av_codec", "av_utils") add_includedirs(".", {public = true}) set_targetdir("$(buildir)/bin") add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL") -- FFmpeg库链接 if is_plat("windows") then add_includedirs(ffmpeg_include) add_linkdirs(ffmpeg_lib) add_links("avcodec", "avformat", "avutil", "swscale", "swresample") add_links("avdevice", "avfilter", "postproc") end