游戏采集 & 窗口采集
本文目录
1.1 图形 API
Windows 系统的图形 API(Graphics Application Programming Interface)是软件接口,用于开发者创建和管理图形内容。相当于桥接层,在应用程序与底层硬件之间提供了一层抽象,开发者无需操作硬件接口即可进行图形绘制。
GDI (Graphics Device Interface):Windows 最基础的 2D 绘图接口,依赖
CPU渲染,性能有限,主要供传统桌面应用使用。GDI+:GDI 的增强版,支持抗锯齿、透明度、复杂几何与高级文本渲染,仍以软件为主。
Direct2D:面向 2D 的硬件加速 API,性能优于 GDI/GDI+,适合高性能绘图场景。
Direct3D:DirectX 3D 渲染接口,广泛应用于游戏与高性能多媒体。
OpenGL:跨平台的 2D/3D API,在 Windows 上通过驱动支持,多用于专业图形与部分游戏。
WPF (Windows Presentation Foundation):.NET 框架基于矢量的 UI 子系统,内置动画、样式与硬件加速,适合快速构建现代桌面应用。
Vulkan:Khronos Group 提供的低开销、跨平台图形/计算 API,面向极致性能和细粒度控制。
2. 游戏进程采集
原理:通过 DLL 注入到目标进程,拦截 DirectX/OpenGL/Vulkan 图形调用,获取 GPU 帧缓冲数据并共享给采集软件。
优点:
- 高性能、低延迟:可直接拦截 GPU 渲染调用,无需往返 CPU,帧率与 GPU 渲染同步。
- 专门针对游戏优化:支持全屏独占模式和硬件加速特性,兼容 DX9/10/11/12、OpenGL、Vulkan 主流游戏。
缺点:
- 兼容性差:对普通桌面应用(GDI/GDI+ 渲染)无法工作,对 Electron(Chromium/Skia 多进程沙箱)也难以插入钩子。
- 安全与稳定风险:注入机制可能被杀软、反作弊系统拦截,甚至引发目标程序崩溃。
- 维护成本:需不断适配新游戏引擎、API 版本与系统安全策略。
3. 窗口采集
WinRT 原生捕获
原理:基于 Windows.Graphics.Capture API,通过 DWM(桌面窗口管理器)与 DXGI Desktop Duplication,共享 GPU 纹理捕获特定窗口或屏幕。
优点:
- 跨 GPU:即使 OBS 与目标窗口处于不同 GPU,仍能捕获。
- 低延迟、高性能:直接共享 GPU 纹理,无需拷贝到 CPU,适合动态内容。
缺点:
- 仅支持 Win10 1803+ 以上系统:旧版 Windows 10 或 Win7 无法使用。
- 部分 Vulkan/DX12 游戏兼容性不足:部分全屏专属渲染可能无法捕获。
GDI BitBlt
原理:使用 GDI BitBlt 函数将源 DC 像素块拷贝到目标 DC,兼容旧版 Windows。
优点:
- 兼容性好:Win7 及更早版本皆支持;无需额外权限或用户交互。
- 实现简单:仅依赖 GDI 接口,易于移植。
缺点:
- 无法捕获硬件加速窗口:GPU 绘制绕过 GDI 管道,导致黑屏或花屏。
- 高 CPU 开销、延迟大:需将 GPU 数据同步拷贝到 CPU,帧率 & 性能受限。
Magnification API
原理:创建放大镜窗口,通过 MagSetWindowFilterList 筛选目标窗口,再从放大镜 DC 读取画面。
优点:
- 可捕获后台或被遮挡窗口:绕过 Z 顺序限制,适合隐藏窗口录制。
- 支持硬件加速内容:DWM 合成后仍可读取渲染结果。
缺点:
- 帧率 & 性能开销高:放大镜合成与回读频繁,CPU/GPU 占用率高。
- 依赖 Aero/DWM:在禁用 Aero 或使用第三方主题时可能失效。
4. 使用建议
高性能游戏场景,优先选用
游戏进程采集,其次WGC,二者性能相差不大;WGC 无注入,安全性更好。若有支持老系统和兼容性的需求,再考虑使用
BitBlt与Magnification API。