本页面介绍了OBS Studio中窗口和显示器捕获功能的实现。这些功能允许用户捕获特定的窗口或整个显示器作为其直播或录制源。关于游戏特定捕获,请参阅游戏捕获。
OBS中的窗口和显示器捕获主要作为win-capture模块中的源插件来实现。它们提供了捕获以下内容的方法:
两种捕获类型都支持多种捕获方法,这些方法具有不同的性能特征、兼容性和功能集。
来源:plugins/win-capture/window-capture.c66-70 plugins/win-capture/duplicator-monitor-capture.c65-69 plugins/win-capture/monitor-capture.c14-22
OBS实现了多种捕获窗口和显示器的方法,每种方法都有不同的能力
最古老且兼容性最好的捕获方法,使用Windows GDI API
dc-capture.cWindows 10 1803+ 引入的现代捕获方法
winrt-capture.cpp主要用于显示器捕获
捕获方法的选择是自动的(基于窗口类或显示器配置)或由用户手动指定。
来源:plugins/win-capture/window-capture.c138-167 plugins/win-capture/duplicator-monitor-capture.c247-275
窗口捕获通过window_capture结构体和window-capture.c中的相应函数实现。
来源:plugins/win-capture/window-capture.c76-111 plugins/win-capture/window-capture.c66-70
窗口选择过程如下
这种方法允许OBS在窗口句柄发生变化时(例如,如果应用程序被关闭并重新打开)继续捕获。
来源:plugins/win-capture/window-capture.c589-773
BitBlt 方法使用以下方法:
BitBlt 捕获会处理不同窗口的 DPI 感知,以确保正确的缩放。
来源:plugins/win-capture/dc-capture.c151-181 plugins/win-capture/window-capture.c676-736
WGC 实现
GraphicsCaptureItem源帧被处理并转换为具有适当颜色空间处理的OBS纹理。
来源:libobs-winrt/winrt-capture.cpp338-422 libobs-winrt/winrt-capture.cpp126-193
OBS中有两种独立的显示器捕获实现
monitor-capture.c)duplicator-monitor-capture.c)——这是默认选项较新的实现使用DXGI桌面复制或Windows图形捕获(WGC),具体取决于系统支持和用户选择。
来源:plugins/win-capture/duplicator-monitor-capture.c71-99 plugins/win-capture/duplicator-monitor-capture.c65-69
显示器通过以下方式识别:
OBS显示可用显示器列表,包含其分辨率和位置,允许用户选择要捕获的显示器。
使用DXGI时
gs_duplicatorgs_duplicator_update_frame更新帧来源:plugins/win-capture/duplicator-monitor-capture.c511-593 libobs-d3d11/d3d11-duplicator.cpp199-289
与窗口捕获类似,但为显示器初始化WGC捕获
winrt_capture_init_monitor初始化WGC捕获来源:plugins/win-capture/duplicator-monitor-capture.c511-593 libobs-winrt/winrt-capture.cpp424-433
通过WGC和DXGI方法,窗口和显示器捕获都支持HDR内容
来源:plugins/win-capture/window-capture.c798-816 plugins/win-capture/duplicator-monitor-capture.c823-846 libobs-winrt/winrt-capture.cpp511-514
HDR处理的关键方面
窗口捕获通过以下方式处理不同的DPI感知模式:
来源:plugins/win-capture/window-capture.c676-736
窗口列表通过以下方式填充:
EnumWindows枚举所有顶层窗口来源:plugins/win-capture/window-capture.c514-565
显示器列表显示
每个监视器都通过设备 ID 进行标识,以便可靠跟踪。
来源: plugins/win-capture/duplicator-monitor-capture.c724-760