游戏捕捉是 OBS Studio 中一种特殊的捕捉方法,它直接挂钩游戏的图形渲染管线,以最小的性能影响高效捕捉画面。与使用标准 Windows API 的窗口捕捉(窗口与显示器捕捉)不同,游戏捕捉会将图形钩子库注入目标游戏进程,直接从图形 API 拦截渲染的画面。
游戏捕捉通过将钩子库注入目标游戏进程,并拦截对 Direct3D (8/9/10/11/12)、OpenGL 和 Vulkan 等图形 API 的调用来工作。这使得 OBS 能够在画面呈现到屏幕之前直接从图形渲染管线捕捉画面,从而与其他捕捉方法相比开销更低。
该系统由两个主要组件组成
来源:plugins/win-capture/game-capture.c plugins/win-capture/graphics-hook/graphics-hook.c
游戏捕捉支持两种主要方法,用于将捕捉到的画面从游戏进程传输到 OBS
方法选择基于硬件支持,在可用时优先使用共享纹理,除非通过配置强制使用共享内存。
来源:plugins/win-capture/game-capture.c425-448 plugins/win-capture/graphics-hook/graphics-hook.c542-573
游戏捕捉提供三种不同的捕捉模式
| 模式 | 描述 | 配置 |
|---|---|---|
| 任意全屏 | 捕捉当前处于焦点状态的任意全屏应用程序 | 默认模式,自动检测全屏应用程序 |
| 指定窗口 | 按标题、类或可执行文件捕捉指定窗口 | 用户从下拉菜单或窗口选择器中选择窗口 |
| 热键 | 仅在通过热键激活时捕捉 | 需要用户按下热键才能开始/停止捕捉 |
来源:plugins/win-capture/game-capture.c91-92 plugins/win-capture/game-capture.c423-437
挂钩过程是游戏捕捉的关键部分,涉及多个步骤
来源:plugins/win-capture/game-capture.c1004-1061 plugins/win-capture/game-capture.c878-898 plugins/win-capture/graphics-hook/graphics-hook.c402-417
钩子库尝试检测并挂钩目标进程中的多个图形 API
来源:plugins/win-capture/graphics-hook/graphics-hook.c302-401 plugins/win-capture/graphics-hook/d3d9-capture.cpp plugins/win-capture/graphics-hook/dxgi-capture.cpp plugins/win-capture/graphics-hook/gl-capture.c plugins/win-capture/graphics-hook/vulkan-capture.c
游戏捕捉提供多种配置选项以自定义捕捉行为
| 选项 | 描述 | 默认 |
|---|---|---|
| 模式 | 捕捉模式(任意全屏、指定窗口、热键) | 任意全屏 |
| 窗口 | 在使用指定窗口模式时指定目标窗口 | - |
| SLI/Crossfire 兼容性 | 强制共享内存捕捉 | 关闭 |
| 捕捉鼠标光标 | 捕捉鼠标光标 | 开 |
| 允许透明度 | 允许捕捉到的画面具有透明度 | 关闭 |
| 限制捕捉帧率 | 限制捕捉速率以减少资源占用 | 关闭 |
| 捕捉叠加层 | 捕捉第三方叠加层(Steam、Discord 等) | 关闭 |
| 反作弊兼容性挂钩 | 使用侵入性较低但兼容性更好的挂钩方法 | 开 |
| 挂钩速率 | 搜索游戏进程的积极程度 | 普通用户 |
来源:plugins/win-capture/game-capture.c30-44 plugins/win-capture/game-capture.c98-114
游戏捕捉使用两种不同的方法将捕捉到的画面从游戏进程传输到 OBS
来源:plugins/win-capture/game-capture.c776-807 plugins/win-capture/graphics-hook/graphics-hook.c520-570 plugins/win-capture/graphics-hook/graphics-hook.c709-763
游戏捕捉对于带有反作弊系统的游戏有特殊考虑
代码中包含安全措施,以防止挂钩不兼容的应用程序,这可能导致带有严格反作弊系统的游戏崩溃或封号。
来源:plugins/win-capture/game-capture.c956-996 plugins/win-capture/game-capture.c942-947 plugins/win-capture/game-capture.c200-201
游戏捕捉使用多种机制在 OBS 和被挂钩的游戏进程之间进行通信
该系统依赖于 Windows 特定的 IPC 机制来建立和维护独立进程之间的通信。
来源:plugins/win-capture/game-capture.c195-213 plugins/win-capture/graphics-hook/graphics-hook.c99-129 plugins/win-capture/graphics-hook/graphics-hook.c520-570
游戏捕捉具有一定的限制和兼容性考量
来源:plugins/win-capture/game-capture.c956-996 plugins/win-capture/game-capture.c436-447
当游戏捕捉无法挂钩或捕捉游戏时,系统提供多种备用机制
性能考量包括
来源:plugins/win-capture/game-capture.c296-310 plugins/win-capture/game-capture.c757-774