> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 游戏串流自定义分辨率最佳实践

> 游戏串流自定义分辨率最佳实践

自定义分辨率允许游戏在串流时以广泛的分辨率和纵横比进行渲染。本文档概述了 Microsoft 关于如何最佳使用它的建议。

## 选择最佳分辨率

玩家将游戏串流到各种各样的设备，包括手机、平板电脑、PC 和电视。这些设备涵盖低到高分辨率显示器，从超宽屏 32:9 显示器到方形平板电脑，以及高高的竖屏设备。玩家倾向于让游戏填满整个屏幕或窗口，且无黑边。在可能的情况下，如果画面无需缩放即可与客户端显示器匹配，画质也会更清晰。最后，客户端的理想分辨率可能取决于硬件和网络条件。

[XGameStreamingGetDisplayDetails](/reference/system/xgamestreaming/functions/xgamestreaminggetdisplaydetails) API 会考虑所有这些因素，并返回 “首选” 宽度和高度。在理想条件下，“首选” 分辨率就是客户端屏幕的分辨率和纵横比，但如果无法达到该分辨率，则将返回符合串流约束和传递给 `XGameStreamingGetDisplayDetails` 参数的最接近分辨率和纵横比。

如果您的游戏可以渲染任何分辨率，只需调用 [XGameStreamingSetResolution](/reference/system/xgamestreaming/functions/xgamestreamingsetresolution) 并将渲染分辨率设置为首选分辨率，即可获得最佳效果。

许多游戏是为一组固定的分辨率设计的。例如，您的游戏可能有一个支持多种分辨率的 PC 版本，即使这些分辨率在 XBOX 上通常缩窄为一种。在这种情况下，Microsoft 建议将首选分辨率作为指南，选择您的游戏支持的最接近的分辨率。一个好方法是找到与首选纵横比最接近的匹配，以便游戏尽可能多地填满客户端屏幕。请注意，[XGameStreamingDisplayDetails](/reference/system/xgamestreaming/structs/xgamestreamingdisplaydetails) 结构包含您可以设置的分辨率限制。它还包含标志，告知您当前串流是否支持非标准分辨率和呈现缩放。

如果自动选择分辨率不可行，但您的游戏 PC 版本包含分辨率选择器，只要这些分辨率符合 `XGameStreamingDisplayDetails` 的约束，您也可以允许玩家选择分辨率。

## 监听更新

在串流期间，最佳分辨率可能会因多种原因发生变化：

1. 在云服务器上，游戏在串流客户端连接之前启动，因此首选分辨率不能立即获得。
2. 使用手机或平板电脑的玩家可能会在竖屏与横屏之间旋转设备。
3. PC 上的玩家可能会调整串流客户端窗口的大小或切换全屏。
4. 网络条件可能发生变化，需要不同的串流分辨率。

为了在发生变化时提供最佳的串流体验，请使用 [XGameStreamingRegisterConnectionStateChanged](/reference/system/xgamestreaming/functions/xgamestreamingregisterconnectionstatechanged) 来检测新客户端，并使用 [XGameStreamingRegisterClientPropertiesChanged](/reference/system/xgamestreaming/functions/xgamestreamingregisterclientpropertieschanged)（检查 `XGameStreamingClientProperty::DisplayDetails` 属性）来检测客户端首选分辨率何时更改。这些事件发生时，请更改分辨率以匹配新的 `XGameStreamingDisplayDetails`。

<Note>至少，对于在云服务器上的玩家，处理初始客户端连接事件以获得匹配的分辨率是非常重要的。</Note>

## 变更的限制

更改串流分辨率对玩家来说会呈现为短暂的闪烁（类似在 PC 上更改游戏分辨率的效果）。为最大限度地减少干扰，Microsoft 建议仅在响应上述事件时才更改分辨率。

除玩家体验外，不建议在 200 毫秒内多次更改串流分辨率，因为视频编码器可能没有足够时间匹配游戏分辨率，从而导致短暂的画面拉伸。上述事件在 200 毫秒内不会触发超过一次。

## 设置 XGameStreamingGetDisplayDetails 的参数

`XGameStreamingGetDisplayDetails` API 包含描述您游戏约束的参数。如果这些参数设置正确，API 将计算出符合这些约束的最佳分辨率。参数如下：

`maxSupportedPixels`：这是您的游戏不应超过的总像素数。为保持性能，一个好的经验法则是将您的游戏在当前系统设备类型上通常渲染的宽度和高度相乘。例如，如果您的游戏在 XBOX Series S 上通常以 1440p 渲染，则在该设备类型上，传递 maxSupportedPixels=2560\*1440=3686400。

`widestSupportedAspectRatio` 和 `tallestSupportedAspectRatio`：这些是您游戏的纵横比限制。将这些设置为您测试过的最宽和最高的纵横比，可确保您的游戏在所有设备上都能获得良好的显示效果。

## 触控输入与自定义分辨率

通过 `XGameStreamingSetResolution` 更改分辨率会同步更改触控输入的坐标空间以匹配新的纵横比。`GameInputTouchState` 中的触控坐标使用归一化的 0-1 范围。更改分辨率时，该范围保持不变，但现在代表新的分辨率。例如，在没有自定义分辨率的 1920x1080 游戏中，(0.5, 0.5) 处的触控代表 (960, 540)，但如果调用 `XGameStreamingSetResolution` 将其更改为 1600x800，则 (0.5, 0.5) 处的触控代表 (800, 400)。请注意，`GameInputTouchSensorInfo` 中的分辨率和纵横比值在您更改分辨率时不会更新；请使用您传递给 `XGameStreamingSetResolution` 的值，而不是 `GameInputTouchSensorInfo` 的值来计算触控位置。

## 安全区域

许多设备的屏幕部分被遮挡，如凹口、圆角以及叠加的滑动栏。`XGameStreamingDisplayDetails` 包含一个 `safeArea` 矩形，描述了屏幕中心未被遮挡的矩形区域。为确保重要内容可见，请将此矩形视为标题安全空间的边界。此区域之外可能仍然可见并应包含内容，但不应包含重要的 UI 元素。

## DirectCapture

最佳的串流视频体验是当游戏结合使用自定义分辨率和 DirectCapture 时，这可以降低串流延迟。有关如何确保您的游戏受益于 DirectCapture 的信息，请参阅 [DirectCapture 概述](/build/core-features/common/game-streaming/game-streaming-directcapture-overview)。

## 另请参阅

[自定义分辨率概述](/build/core-features/common/game-streaming/game-streaming-custom-resolution-overview)

[使用自定义分辨率进行测试（NDA 主题）](/build/core-features/common/game-streaming/game-streaming-testing-custom-resolution)

[DirectCapture 概述](/build/core-features/common/game-streaming/game-streaming-directcapture-overview)


## Related topics

- [自定义分辨率概述](/zh-CN/build/core-features/common/game-streaming/game-streaming-custom-resolution-overview.md)
- [使用自定义分辨率进行测试](/zh-CN/build/core-features/common/game-streaming/game-streaming-testing-custom-resolution.md)
- [针对 XBOX 游戏串流优化您的游戏](/zh-CN/build/core-features/common/game-streaming/game-streaming-optimizing-your-game.md)
- [XBOX Cloud Gaming 触控与流式传输支持](/zh-CN/build/core-features/common/game-streaming/index.md)
- [游戏串流简介](/zh-CN/build/core-features/common/game-streaming/game-streaming-overview.md)
