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 运行。
正在收集日志文件
要收集流式处理日志文件:
- 开始运行游戏
- 开始流式传输并连接到其中一个“内容测试应用(CTA)”
- 玩一小段游戏
- 终止游戏
- 断开 CTA 连接
- 等待 30 秒,以便日志完成写入
- 将日志复制到 C:\temp 等本地目录
xbcp xt:\XStreamLogs\XStreamManagementService.etl c:\temp
xbcp xt:\XStreamLogs\nanotrace.etl c:\temp
正在查看转换消息
- 使用 Windows Performance Analyzer 打开 XStreamManagementService.etl
- 右击左窗格中的“系统活动”,然后选择“将图形添加到分析视图”
- 在下窗格中,展开 Microsoft.Xbox.StreamManagementService
- 查找 Microsoft.Xbox.HostStreamingAgent 提供程序,并在必要时将其展开。 如果缺少此项,请重复上面的“收集日志文件”步骤。
- 选择 DirectCaptureLog 任务,并在必要时展开“未知进程”
- 向右滚动并查找名为 0_Message、1_Message 等的列。每列都是来自 DirectCapture 的消息(按顺序排列)。 如果存在多行,则按时间排序。
- 有关每条消息的含义,请参阅下表。 这些消息将提供 DirectCapture 的转换顺序,以及任何禁用 DirectCapture 情况的原因。
消息 ID | 消息 |
---|---|
1 | 切换到 DirectCapture |
2 | 切换到 DWB (DirectCapture 已禁用) |
3 | 渲染平面配置不受支持。 这可能是因游戏内渲染平面造成,也可能是因为系统在游戏上渲染覆盖层(例如系统通知) |
4 | 像素格式不受支持。 查看关联的 PixelFormat,了解当时的游戏像素格式 |
5 | 磁贴模式不受支持。 查看关联的 TileMode,了解当时的游戏磁贴模式 |
6 | 游戏分辨率不受支持。 查看关联的 GameResolutionWidth 和 GameResolutionHeight,了解当时的游戏渲染分辨率。 |
8 | 屏幕上有一个非游戏帧 |
12 | DirectCapture 未启用(可能是由于主机模式不受支持) |
18 | 源矩形大小不受支持 |
19 | “演示”参数标志不受支持 |
21 | 目标矩形大小不受支持 |
帧详细信息
- 使用 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 游戏流式处理: 降低延迟并优化最佳移动体验。