音视频直播图形学【免费下载链接】obs-StreamFXStreamFX is a plugin for OBS® Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custom shaders, youll find it all here.项目地址https://gitcode.com/gh_mirrors/ob/obs-StreamFX点击查看免费下载StreamFX 是为 OBS® Studio 提供大量新特效、滤镜、来源、转场与编码器的开源插件本文围绕其官方构建文档 BUILDING.md系统讲解两种官方构建方式Bundled 集成构建与 CI-Style 独立构建、完整的环境依赖清单、CMake 配置流程以及全部 CMake 选项的含义与适用场景。读完本文你将能够在 Windows / macOS / Linux 上独立完成 StreamFX 的编译、配置、安装与打包并理解其组件化构建系统的工作原理。一、构建方式总览Bundled 与 CI-StyleStreamFX 的构建文档明确提供了两种官方支持的构建路径二者面向不同使用场景构建方式适用场景复杂度维护保障Bundled集成构建普通开发者、日常开发调试较低跟随 OBS Studio 构建流程官方推荐的主要方法CI-Style持续集成构建持续集成、发布版本产出较高需要深谙 CMake / OBS / 各类工具链仅为 CI 设计不保证在每台机器上可用文档明确指出Bundled 方式要求读者具备所用构建工具的基础知识且该指南面向开发者和贡献者——如果你只打算使用 StreamFX 的现成二进制直接安装官方发行版即可无需走完整构建流程。从根目录 CMakeLists.txt 的源码可以印证两种模式的实际判定逻辑当CMAKE_SOURCE_DIR与CMAKE_CURRENT_LIST_DIR相等时即把 StreamFX 作为顶层工程单独配置项目以STANDALONE独立模式构建反之当 StreamFX 作为add_subdirectory被并入 OBS Studio 构建流时进入GROUPED集成模式同时所有 CMake 选项会自动加上StreamFX_前缀以避免与宿主工程发生命名冲突。二、Bundled 集成构建把 StreamFX 并入 OBS Studio 构建流这是官方标注的主要构建方法核心思路是先搭建好一份 OBS Studio 源码副本再把 StreamFX 仓库作为 git 子模块集成进去最后随 OBS Studio 一起编译。2.1 操作步骤卸载旧版本先卸载任何已安装的 StreamFX 版本防止构建产物或运行时插件与旧版本产生冲突。搭建 OBS Studio按照 OBS Studio 官方安装构建指南在你选择的平台上完成 OBS Studio 的自动化构建环境搭建。macOS 特别注意必须使用Xcode 生成器Xcode generator来构建 StreamFX因为 Ninja 生成器不支持 StreamFX 所需的编译标志。集成 StreamFX 到 OBS Studio 构建流进入obs studio source/UI/frontend-plugins目录打开支持 git 的 shellWindows 上为 git-bash添加子模块git submodule add https://github.com/Xaymar/obs-StreamFX.git streamfx初始化并递归更新子模块git submodule update --init --recursive在同目录的CMakeLists.txt文件末尾追加一行add_subdirectory(streamfx)。重新执行第 2 步的构建步骤StreamFX 即作为 OBS Studio 构建的一部分被编译。构建完成StreamFX 已成为构建产物的一部分。2.2 子模块为何如此重要文档强调必须使用--recursive递归克隆子模块这与源码实现直接对应根目录 CMakeLists.txt 在配置阶段就强制检查版本模块是否存在if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake/version/version.cmake) include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/version/version.cmake) else() message(FATAL_ERROR Please ensure youve cloned recursively and try again. Thank you!) endif()同样的硬性检查还出现在 nlohmann-json 第三方依赖上——CMakeLists.txt 要求third-party/nlohmann-json/single_include目录必须存在否则直接FATAL_ERROR终止配置。因此任何跳过递归子模块更新的克隆方式都会在 CMake 配置阶段立即失败。三、CI-Style 独立构建面向持续集成与发布这种构建方式把 StreamFX 作为独立工程直接编译专为持续集成CI和发布流程设计。文档明确给出了风险提示它要求对 CMake、OBS 及各类工具有较深理解不保证在每台机器上都能成功且可能随时停止维护——选择此路径需要自行承担全部责任。3.1 依赖清单按平台通用依赖Git版本控制与版本号生成Debian / Ubuntusudo apt install gitCMake 3.20 或更新版本Debian / Ubuntusudo apt install cmake注当前仓库的根 CMakeLists.txt 已将cmake_minimum_required提升至3.26各组件目录的 CMakeLists.txt 同样声明 3.26因此实际构建请使用 3.26 及以上版本文档中的 3.20 为最低书面要求。编译器三选一按平台WindowsVisual Studio 2019 或更新版本macOSx86_64 架构Xcode 11.x 或更新版本arm64 架构Xcode 12.x 或更新版本Debian / Ubuntu基础构建工具sudo apt install build-essential pkg-config checkinstall make ninja-build编译器二选一GCC 11 或更新版本sudo apt install gcc-11 g-11LLVM Clang 14 或更新版本sudo bash -c $(wget -O - https://apt.llvm.org/llvm.sh)链接器三选一ld 或 goldsudo apt install binutilsLLVM lldsudo bash -c $(wget -O - https://apt.llvm.org/llvm.sh)moldsudo apt install moldQt 6Windows / macOS官方提供了一个基于 Node.JS 的工具用于读取和解析/third-party/obs-studio/buildspec.json文件具体用法和输出解析可参考.github/workflows/main.yml中的 CI 工作流配置。Debian / Ubuntusudo apt install qt6-base-dev qt6-base-private-dev libqt6svg6-dev从源码看Qt 是 StreamFX 的硬依赖核心库StreamFX_Core强制链接Qt6::Core、Qt6::Gui、Qt6::Widgets见 CMakeLists.txt且 UI 相关文件通过 AUTOMOC / AUTOUIC / AUTORCC 自动生成处理见 cmake/util.cmake 中组件的注册逻辑。CURLWindows / macOS同样通过 Node.JS 工具解析buildspec.json。Debian / Ubuntusudo apt install libcurl4-openssl-devFFmpeg可选仅 FFmpeg 组件需要Windows / macOS通过 Node.JS 工具解析buildspec.json。Debian / Ubuntusudo apt install libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libswresample-dev libswscale-devLLVM可选仅用于 clang-format 和 clang-tidy 集成Debian / Ubuntusudo bash -c $(wget -O - https://apt.llvm.org/llvm.sh) allInnoSetup可选仅 Windows 安装包需要用于生成 Windows 安装程序。3.2 克隆项目使用你习惯的 git 工具连同所有子模块递归克隆到目标目录。直接使用 git 的完整命令为git clone --recursive https://github.com/Xaymar/obs-StreamFX.git streamfx如 2.2 节所述--recursive必不可少——仓库依赖 third-party/nlohmann-json、third-party/obs-studio、third-party/khronos 等第三方源码其中 nlohmann-json 在配置阶段被硬性检查。3.3 使用 CMake-GUI 配置文档提供了 GUI 与命令行两种方式官方指南以 GUI 为主但所有步骤均可用命令行等价完成启动 CMake-GUI 并等待其打开。点击Browse Build按钮指向一个空文件夹例如在项目内新建build目录并选中它。点击Browse Source按钮指向项目本身。点击Configure按钮选择你偏好的生成器默认通常即可等待配置完成。这一步大概率会报错属于正常现象——因为依赖路径尚未指定。按需调整变量列表中的各项变量各选项含义见下文“CMake Options”一节。点击Generate按钮它会顺带再次执行 Configure若一切配置正确两步应同时成功。若可用点击Open Project按钮即可直接跳入你选择的 IDE。命令行等价流程可参考以 Linux Ninja 为例cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPERelease cmake --build build注意在STANDALONE 独立模式下选项名不带前缀在GROUPED 集成模式下选项名需加StreamFX_前缀如-DStreamFX_ENABLE_LTOON。四、CMake Options全部可配置项详解项目设计目标就是“尽可能把一切配置项都暴露在 CMake 中”官方文档将其分为六大类。若 StreamFX 检测到正在与其他工程共同构建GROUPED 模式所有选项会自动加上StreamFX_前缀以避免碰撞源码依据见 CMakeLists.txt 的 PREFIX 逻辑。4.1 Generic通用选项说明GIT无前缀系统中git二进制文件的路径供配置与生成阶段需要 git 的功能使用。该选项与版本号自动生成机制强相关根 CMakeLists.txt 会在存在.git目录时调用git describe --tags --long --abbrev8 HEAD解析出MAJOR.MINOR.PATCH-TWEAK-gHASH形式的版本号若 tag 解析失败则退化为git rev-list --count HEAD统计提交数作为 TWEAK并附上git log的短哈希作为 BUILD 标识找不到 git 时会打印警告并禁用自动版本检测。选项说明VERSION覆盖或设置项目版本号允许格式为 SemVer 2.0.0 与 CMake 版本格式。源码中对应StreamFX_Version缓存变量CMakeLists.txt在自动检测后允许手动覆盖CMakeLists.txt。4.2 Code代码质量工具选项说明ENABLE_CLANG启用clang-format与clang-tidy的集成。CLANG_PATH无前缀仅在启用ENABLE_CLANG时指向包含clang-format与clang-tidy的 clang 安装路径仅作提示使用。CLANG_FORMAT_PATH/CLANG_TIDY_PATH无前缀实际使用的clang-format与clang-tidy可执行文件路径。源码侧由可选的 cmake/clang/Clang.cmake 模块提供支持——根 CMakeLists.txt 在检测到该文件存在时才加载它CMakeLists.txt。4.3 Dependencies依赖路径选项说明LibObs_DIRobs-studio 库的路径libobs 与 obs-frontend-api。Qt5_DIR、Qt6_DIR或Qt_DIR自动检测Qt5OBS Studio 27.x 及更低版本或 Qt6OBS Studio 28.x 及更高版本的路径。FFmpeg_DIR兼容的 FFmpeg 库与头文件路径。CURL_DIR兼容的 CURL 库与头文件路径。AOM_DIR兼容的 AOM 库与头文件路径。这些路径会被并入CMAKE_PREFIX_PATH供各find_package调用检索CMakeLists.txt。FFmpeg 的检索逻辑见 cmake/modules/FindFFmpeg.cmake它支持按组件avcodec / avdevice / avfilter / avformat / avutil / swresample / swscale 等分别定位头文件与库并会从version.h中解析出版本字符串AOM 的检索逻辑见 cmake/modules/FindAOM.cmake同时支持静态库与 Windows 下的 DLL 动态库。依赖可选的实现依据FFmpeg 组件components/ffmpeg/CMakeLists.txt要求avutil、avcodec、swscale三个组件找不到时通过streamfx_disable_component()自动禁用该组件而不是中断整个构建NVIDIA 组件components/nvidia/CMakeLists.txt同样在非 Windows 平台上非 Direct3D11 环境被自动禁用。这正是文档中 FFmpeg 被标注为“可选”的原因。4.4 Compiling编译与优化选项说明ENABLE_FASTMATH启用编译器支持的快速数学优化。以牺牲精度换取性能对大多数场景通常足够。ENABLE_LTO启用链接时优化LTO换取更快的二进制代价是更长的构建时间。ENABLE_PROFILING启用 CPU 与 GPU 性能分析代码会大幅降低运行性能。TARGET_*指定生成二进制使用的目标架构。TARGET_架构族详解*以 x86 平台为例源码见 CMakeLists.txt选项指令集范围TARGET_X86_64_V4x86-64-v4包含 v3、AVX512F、AVX512BW、AVX512CD、AVX512DQ、AVX512VLTARGET_X86_64_V3x86-64-v3包含 v2、AVX、AVX2、BMI1、BMI2、F16C、FMA、LZCNT、MOVBE、OSXSAVETARGET_X86_64_V2_EX扩展 x86-64-v2包含 v2、AVX、BMI1、BMI2、F16C、FMA、MOVBE默认开启TARGET_X86_64_V2x86-64-v2x86-64、CMPXCHG16B、LAHF-SAHF、POPCNT、SSE3、SSE4.1、SSE4.2、SSSE3默认开启TARGET_X86_64x86-64CMOV、CX8、FPU、FXSR、MMX、OSFXSR、SCE、SSE、SSE2默认开启TARGET_NATIVE面向本机 CPU 架构编译-marchnative非 MSVC 平台可用仅建议开发或个人构建使用分发构建务必关闭macOS 下开启会打印“二进制将不可分发”的警告编译层面cmake/util.cmake 中streamfx_add_library统一为所有库设置了C/C 17 标准CXX_STANDARD 17、强制开启位置无关代码POSITION_INDEPENDENT_CODE ON在 MSVC 下启用/Wall后又显式/WX-关闭“警告即错误”并逐项屏蔽无价值警告、/fp:fast或/fp:precise、/MP多核编译在 GCC/Clang 下启用-Wall -Wextra及对应-Wno-*屏蔽项。该函数同时通过check_ipo_supported探测 LTO 支持能力。4.5 Components组件开关选项说明COMPONENT_NAME按名称启用对应组件。组件化的实现机制在 cmake/util.cmake 的streamfx_add_component()中每个组件是一个StreamFX_Name静态库目标别名StreamFX::Name并注册COMPONENT_NAME缓存选项默认 ON。根 CMakeLists.txt 会遍历 components 目录下所有含 CMakeLists.txt 的子目录CMakeLists.txt随后在依赖解析循环中依次处理用户显式关闭、构建脚本禁用、必需依赖被禁用都会导致组件被禁用解析完成后所有启用的组件通过$LINK_LIBRARY:WHOLE_ARCHIVE,...以整体归档方式链接进主模块CMakeLists.txt。当前仓库实际包含的组件均为 components 下的独立目录为autoframing自动构图blur多种模糊滤镜box、box-linear、dual-filtering、gaussian、gaussian-linearcolor-grade色彩分级LUTdenoising降噪dynamic-mask动态遮罩ffmpegFFmpeg 编码器依赖 FFmpeg可选mirror镜像源nvidiaNVIDIA 集成依赖 NVIDIA Maxine SDK仅 Windows / Direct3D11sdf-effectsSDF 特效shader自定义着色器滤镜、源、转场transform3D 变换upscaling超分辨率virtual-greenscreen虚拟绿幕4.6 Installing Packaging安装与打包注意以下选项仅在 CI-Style独立模式下可用。选项说明CMAKE_INSTALL_PREFIX构建install目标时安装内容的目标路径。STRUCTURE_PACKAGEMANAGER启用后按包管理器兼容布局安装文件。STRUCTURE_UNIFIED启用后按OBS Studio 插件管理器兼容布局安装文件。PACKAGE_NAME打包归档的名称不含前缀、后缀与扩展名。PACKAGE_PREFIX包产物的存放路径。PACKAGE_SUFFIX名称后、文件扩展名前附加的后缀留空时自动附加当前版本字符串。这些选项与安装逻辑的源码对应关系CMakeLists.txtWindows插件 DLL 安装到obs-plugins/位数bit/数据安装到data/obs-plugins/StreamFX/MSVC 构建可选安装 PDB 调试符号打包使用 InnoSetup模板为 templates/windows/installer.iss.in。LinuxSTRUCTURE_PACKAGEMANAGER开启时安装到lib/obs-plugins/与share/obs/obs-plugins/StreamFX系统级包管理器布局关闭时安装到plugins/StreamFX/bin/位数bit/与plugins/StreamFX/data/OBS 插件目录布局打包目标PACKAGE通过cmake -E tar生成 7z 归档。macOS以.pluginbundle 形式安装BUNDLE ON、BUNDLE_EXTENSION pluginInfo.plist 模板见 templates/macos/Info.plist.in打包使用 Packagespkgproj工程模板 templates/macos/installer.pkgproj.in。注意BUILDING.md 中第 4.6 节原文档在PACKAGE_SUFFIX之后重复列出了STRUCTURE_UNIFIED从上下文看后者实际描述的是“以单一.obs文件替代 PACKAGE_ZIP 目标”的打包行为当前仓库源码中未发现PACKAGE_ZIP目标的实现请以实际生成的 CMake 缓存变量为准。五、构建时的编译细节与跨平台行为5.1 平台识别与部署目标根 CMakeLists.txt 通过CMAKE_SYSTEM_NAME区分 Windows / Linux / DarwinmacOS三个平台并定义D_PLATFORM_*宏macOS 下会强制要求部署目标不低于10.15为 C17 支持所需见 CMakeLists.txt。同时按CMAKE_SYSTEM_PROCESSOR与指针宽度识别 32/64 位与 x86/ARM/Itanium 指令集。5.2 主模块与核心库主模块StreamFX以MODULE类型构建即 OBS 插件动态库Windows 下额外包含 source/windll.cpp 并生成version.rc版本资源模板 templates/windows/version.rc.in。核心库StreamFX_Core为静态库负责聚合 source 下的公共实现、ui 下的 Qt 界面文件以及由 templates/config.hpp.in、templates/version.hpp.in、templates/module.cpp.in 生成的头文件与入口代码。OpenGL 支持通过仓库自带的 GLADthird-party/khronos/glad静态库提供Windows / Linux 下分别编译 wgl.c / glx.c 平台适配层。5.3 版本号与发行标识项目版本号默认由 git 自动推导见 4.1 节发布前的预发布阶段alpha会默认开启FEATURE_DEPRECATED、FEATURE_EXPERIMENTAL、FEATURE_UNSTABLE、FEATURE_STABLE等特性开关稳定版本则关闭实验与不稳定特性CMakeLists.txt。项目标识符为com.xaymar.StreamFX.obs版权归属与商标信息亦在根 CMakeLists.txt 中声明。六、常见问题与排查建议CMake 配置阶段报FATAL_ERROR提示“ensure youve cloned recursively”说明未递归克隆子模块重新执行git submodule update --init --recursive即可。Configure 首次必然报错这是文档明确提示的正常现象只需按 3.3 节补齐依赖路径变量后重新 Configure Generate。FFmpeg / NVIDIA 组件缺失这是“依赖可选”的正常结果——找不到对应依赖时构建脚本会打印“Disabled due to ...”日志并自动跳过该组件不影响主插件构建。macOS 构建失败确认使用了 Xcode 生成器而非 Ninja并检查部署目标是否满足 10.15。分发二进制兼容性除非是个人自用构建否则不要开启TARGET_NATIVE并建议保持默认的TARGET_X86_64_V2/TARGET_X86_64_V2_EX以覆盖主流 CPU。版本号不符合预期检查.git目录存在性、git 是否在 PATH 中以及VERSION缓存变量是否被手动覆盖。七、进一步阅读构建文档原文BUILDING.md根构建脚本选项定义、组件注册、安装打包CMakeLists.txt公共 CMake 工具函数组件注册、编译标志cmake/util.cmakeFFmpeg 查找模块cmake/modules/FindFFmpeg.cmakeAOM 查找模块cmake/modules/FindAOM.cmake组件目录13 个功能组件components安装/打包模板templates/windows、templates/macos赞分享音视频直播图形学【免费下载链接】obs-StreamFXStreamFX is a plugin for OBS® Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custom shaders, youll find it all here.项目地址https://gitcode.com/gh_mirrors/ob/obs-StreamFX点击查看免费下载相关推荐Frida编译构建指南从源码到二进制完整流程Frida编译构建指南从源码到二进制完整流程 引言 你是否在尝试从源码构建Frida时遇到各种依赖问题是否对复杂的配置选项感到困惑本文将带你一步步完成从源逆向工程应用安全网络安全TinyXML2 CMake构建配置终极指南从源码到可执行文件的完整流程TinyXML2 CMake构建配置终极指南从源码到可执行文件的完整流程 TinyXML2是一个简单、小巧、高效的C XML解析器可以轻松集成到其他程序序列化如何从源码构建OBS Studio2024最新完整指南如何从源码构建OBS Studio2024最新完整指南 OBS Studio是一款免费开源的直播和屏幕录制软件本文将带你一步步从源码构建OBS Studio上一篇OpenVR终极配置指南5步快速搭建VR开发环境下一篇CodeGeeX4仓库级代码生成如何让AI帮你重构整个项目的秘密技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考