DirectCapture
DirectCapture 是一项 XBOX 游戏串流平台功能,可自动为兼容帧最小化服务器延迟。XGameStreamingGetDisplayDetails API 允许您查询兼容帧的要求,以便确保您的游戏能够利用 DirectCapture。兼容帧的要求解释如下。 XBOX 游戏串流通过捕获(复制)呈现的帧然后为串流编码帧来串流游戏。没有 DirectCapture 时,帧使用显示硬件从输入呈现参数转换为编码格式。帧在 Present Queue 中有 0-66ms 的延迟,然后帧经过 Display Writeback (DWB) 又增加 8.3ms 的延迟以进行帧捕获。在 Present Queue 中的时间取决于诸如游戏帧率以及是否使用双缓冲或三缓冲等因素。8.3ms 的 Display Writeback 时间固定为 8.3ms,因为它绑定到 HDMI 时钟。 然而,XBOX 游戏串流服务器上没有连接 HDMI 显示器,因此 DirectCapture 通过软件实现绕过该时间,而不是使用显示硬件。DirectCapture 通过消除等待 VSync 以及等待双缓冲或三缓冲翻转的时间,在大约 2-12ms 内为编码捕获帧。这可将延迟最多减少 72ms。 为了获得更低的延迟,游戏必须使用与 DirectCapture 兼容的参数进行呈现。- 支持的主机模式
- Lockhart Profiling Mode
- 支持的游戏渲染分辨率
- 任何,包括自定义分辨率
- 支持的交换链格式
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R9G9B9E5_SHAREDEXP
- 支持的颜色空间
- DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
- 游戏渲染分辨率:XDK 游戏使用的 3840x2160
- HDR
- 多个呈现平面
验证您的游戏正在使用 DirectCapture 串流
您可以通过检查串流日志文件来验证您的游戏是否使用 DirectCapture 运行。收集日志文件
要收集串流日志文件:- 开始运行游戏
- 开始串流并使用其中一个内容测试应用 (CTA) 连接
- 玩您游戏的一小段
- 终止游戏
- 断开 CTA
- 等待 30 秒以完成日志写入
- 将日志复制到本地目录,如 C:\temp
xbcp xt:\XStreamLogs\XStreamManagementService.etl c:\tempxbcp xt:\XStreamLogs\nanotrace.etl c:\temp
查看转换消息
- 使用 Windows Performance Analyzer 打开 XStreamManagementService.etl
- 右键点击左侧窗格中的 System Activity 并选择 “Add graph to Analysis View”
- 在下窗格中展开 Microsoft.Xbox.StreamManagementService
- 查找 Microsoft.Xbox.HostStreamingAgent 提供程序并根据需要展开它。如果缺少,请重复上述收集日志文件的步骤。
- 选择 DirectCaptureLog 任务,如有必要,展开 Unknown Process
- 向右滚动并查找名为 0_Message、1_Message 等的列。每一列都是来自 DirectCapture 的一个连续消息。如果有多行,它们按时间排序。
- 请参见下表了解每条消息的含义。这些消息将为您提供 DirectCapture 转换的顺序,并说明 DirectCapture 被禁用的原因。
详细帧信息
- 使用 Windows Performance Analyzer 打开 nanotrace.etl
- 导航到 “Microsoft.Xbox.CloudStreaming” 提供程序并选择 “VideoFrameCaptureSourceChanged” 任务,然后展开进程 “ApplicationClipService.exe” 以查看所有 “VideoFrameCaptureSourceChanged” 事件。
- 检查 “NewCaptureSource” 字段
- 当值为 “DCap” 时,您的游戏开始使用 DirectCapture 的更低延迟进行串流
- 值为 “DWB” 表示不使用 DirectCapture,而使用默认的捕获机制。这会在以下情况下发生:
- 游戏输出与 DirectCapture 不兼容的帧
- 系统在游戏上渲染叠加层(例如系统通知)
注意事项
- nanotrace.etl 具有有限的历史记录,因此如果您没有看到 “VideoFrameCaptureSourceChanged”,则可能是您的会话过长。为了验证,请运行较短的会话并检查 ETL。
- 开发套件上对 DirectCapture 的支持仅限于 XBOX Series X 开发套件
- 有关更多信息,请观看 XBOX 游戏串流:降低延迟并为最佳移动体验进行优化。
