DirectCapture 概述

DirectCapture

DirectCapture 是一项 Xbox 游戏流式处理平台功能,可自动最大程度降低兼容帧的服务器延迟。 XGameStreamingGetDisplayDetails API 允许查询兼容帧的要求,以便确保游戏可以利用 DirectCapture。 下面介绍了兼容帧的要求。

Xbox 游戏流式传输会捕获(复制)演示的帧,然后对用于流式处理的帧进行编码,从而流式传输游戏。 如果没有 DirectCapture,帧会从输入演示参数转换为使用显示硬件进行编码的格式。 该帧在“演示队列”中具有 0-66 毫秒的延迟,然后在通过“显示写回(DWB)”捕获帧时,会增加 8.3 毫秒的延迟。 “演示队列”中的时间量取决于游戏的帧速率等,以及是使用双重缓冲还是三重缓冲。 由于 8.3 毫秒绑定到 HDMI 时钟,因此其“显示写回”时间固定在 8.3 毫秒。

但是,不存在连接到 Xbox 游戏流式处理服务器的 HDMI 显示器,因此 DirectCapture 这次使用软件实现(而非显示硬件)来实现短路。 DirectCapture 可消除等待 VSync 和等待双重缓冲或三重缓冲翻转等操作,从而捕获帧以在大约 2-12 毫秒内进行编码。 这将延迟减少了多达 72 毫秒。

为了降低延迟,游戏必须具有与 DirectCapture 兼容的参数。

  • 受支持的主机模式
    • Lockhart 分析模式
  • 受支持的游戏渲染分辨率
  • 受支持的交换链格式
    • 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

DirectCapture 当前不支持上面未列出的演示参数。 例如,不支持以下各项:

  • 游戏呈现分辨率:XDK 游戏的 3840x2160
  • HDR
  • 多个演示平面

XGameStreamingGetDisplayDetails 可用于帮助确定要演示的与 DirectCapture 兼容的内容,且我们计划在未来发布 PIX 支持。

验证游戏是否正在使用 DirectCapture 进行流式传输

可以检查流式处理日志文件,从而验证游戏是否正在使用 DirectCapture 运行。

正在收集日志文件

要收集流式处理日志文件:

  1. 开始运行游戏
  2. 开始流式传输并连接到其中一个“内容测试应用(CTA)”
  3. 玩一小段游戏
  4. 终止游戏
  5. 断开 CTA 连接
  6. 等待 30 秒,以便日志完成写入
  7. 将日志复制到 C:\temp 等本地目录
    1. xbcp xt:\XStreamLogs\XStreamManagementService.etl c:\temp
    2. xbcp xt:\XStreamLogs\nanotrace.etl c:\temp

正在查看转换消息

  1. 使用 Windows Performance Analyzer 打开 XStreamManagementService.etl
  2. 右击左窗格中的“系统活动”,然后选择“将图形添加到分析视图”
  3. 在下窗格中,展开 Microsoft.Xbox.StreamManagementService
  4. 查找 Microsoft.Xbox.HostStreamingAgent 提供程序,并在必要时将其展开。 如果缺少此项,请重复上面的“收集日志文件”步骤。
  5. 选择 DirectCaptureLog 任务,并在必要时展开“未知进程”
  6. 向右滚动并查找名为 0_Message、1_Message 等的列。每列都是来自 DirectCapture 的消息(按顺序排列)。 如果存在多行,则按时间排序。
  7. 有关每条消息的含义,请参阅下表。 这些消息将提供 DirectCapture 的转换顺序,以及任何禁用 DirectCapture 情况的原因。
消息 ID 消息
1 切换到 DirectCapture
2 切换到 DWB (DirectCapture 已禁用)
3 渲染平面配置不受支持。 这可能是因游戏内渲染平面造成,也可能是因为系统在游戏上渲染覆盖层(例如系统通知)
4 像素格式不受支持。 查看关联的 PixelFormat,了解当时的游戏像素格式
5 磁贴模式不受支持。 查看关联的 TileMode,了解当时的游戏磁贴模式
6 游戏分辨率不受支持。 查看关联的 GameResolutionWidth 和 GameResolutionHeight,了解当时的游戏渲染分辨率。
8 屏幕上有一个非游戏帧
12 DirectCapture 未启用(可能是由于主机模式不受支持)
18 源矩形大小不受支持
19 “演示”参数标志不受支持
21 目标矩形大小不受支持

帧详细信息

  1. 使用 Windows Performance Analyzer 打开 nanotrace.etl
  2. 导航到 "Microsoft.Xbox.CloudStreaming" 提供程序并选择 "VideoFrameCaptureSourceChanged" 任务,然后展开 "ApplicationClipService.exe" 进程以查看所有 "VideoFrameCaptureSourceChanged" 事件。
  3. 检查 "NewCaptureSource" 领域
    • 当值为 "DCap" 时,游戏会开始使用 DirectCapture 的较低延迟进行流式传输
    • "DWB" 值表示不使用 DirectCapture 并使用默认的捕获机制。 这将在以下情况下发生:
      • 游戏输出与 DirectCapture 不兼容的帧
      • 系统在游戏上渲染覆盖层(例如系统通知)

说明

  • nanotrace.etl 的历史记录有限,因此,如果看不到 "VideoFrameCaptureSourceChanged",则表示会话可能太长。 要验证,请运行较短的会话并检查 ETL。
  • 对开发工具包的 DirectCapture 支持仅限于 Xbox Series X 开发工具包
  • 有关详细信息,请观看 Xbox 游戏流式处理: 降低延迟并优化最佳移动体验

另请参阅

自定义分辨率概述