

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Streams 中的自定义 GameLift 直播分辨率
<a name="custom-stream-resolution"></a>

默认情况下，Amazon GameLift Streams以1920×1080像素的行业标准全高清分辨率和标准的16×9宽高比提供交互式直播。您可以为每个会话设置自定义分辨率，以匹配玩家设备的屏幕形状或纵横比。自定义分辨率支持横向、纵向和正方形纵横比。

使用自定义分辨率可以：
+ 以原生设备宽高比将全屏体验流式传输到手机和平板电脑，无需填充或裁剪。
+ 匹配超宽显示器宽高比，获得原生宽屏体验。
+ Support 支持任意尺寸的游戏流，以便嵌入到非全屏网页体验中。

您可以对所有 Amazon GameLift Streams 服务配置使用自定义分辨率，无论流类或运行时环境如何。

## 分辨率的工作原理
<a name="custom-stream-resolution-how-it-works"></a>

当您设置自定义分辨率时，Amazon GameLift Streams 会将会话的虚拟显示器配置为所需的分辨率。这将成为会话的**显示器分辨率**。为了获得最佳视觉质量，应用程序必须按照配置的显示器分辨率进行渲染。

显示器分辨率决定了虚拟显示器的尺寸和捕获帧的分辨率。另外两个 Web SDK 设置会影响传送给播放器的直播的分辨率：
+ **最大分辨率：**限制直播分辨率的 Web SDK 设置。如果未指定，则不应用上限，并且会流式传输显示器的完整分辨率。请参阅[以最大分辨率进行交互](#custom-stream-resolution-max-resolution)。
+ **动态分辨率：**自动调整直播分辨率，以提供观众网络连接所能维持的最佳视觉质量。请参阅[与动态分辨率的交互](#custom-stream-resolution-dynamic-resolution)。

这两个设置都不会更改会话的显示器分辨率。

## 自定义分辨率限制
<a name="custom-stream-resolution-constraints"></a>

您指定的分辨率必须满足以下要求：


| 约束 | 值 | 
| --- | --- | 
| 最大总像素 | 2,073,600 (1920 × 1080) | 
| 宽度和高度范围 | 320 — 4096 像素 | 
| 维度奇偶性 | 宽度和高度都必须是偶数 | 

当您启动会话时，该服务会验证这些限制。如果分辨率不符合要求，则请求会因验证错误而失败。

## 设置自定义分辨率
<a name="custom-stream-resolution-set"></a>

您可以使用控制台、CLI 或 AP AWS I 在启动直播会话时设置自定义分辨率。

### 使用 Amazon GameLift Streams 控制台
<a name="custom-stream-resolution-set-console"></a>

要使用自定义分辨率测试直播，请执行以下操作：

1. 打开 [Amazon GameLift Streams 控制台](https://console.aws.amazon.com/gameliftstreams/)并导航到您的直播组。

1. 选择 “**测试直播**”。

1. 在 “**分辨率**” 下拉列表中，为台式机、平板电脑或移动设备选择分辨率。

1. 选择 “**测试直播**” 以启动会话。

直播激活后，您可以在实时统计信息叠加层中查看当前分辨率。

### 使用 AWS CLI
<a name="custom-stream-resolution-set-cli"></a>

将 `start-stream-session` 命令与 `--display-configuration` 参数一起使用：

```
aws gameliftstreams start-stream-session \
  --identifier sg-ExampleStreamGroup \
  --application-identifier a-ExampleApp \
  --protocol WebRTC \
  --signal-request "your-signal-request" \
  --display-configuration '{"Resolution":{"Width":1920,"Height":1080}}'
```

### 使用 API
<a name="custom-stream-resolution-set-api"></a>

在 [StartStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html)API 请求中，包含以下`DisplayConfiguration`参数：

```
{
  "ApplicationIdentifier": "a-ExampleApp",
  "Protocol": "WebRTC",
  "SignalRequest": "your-signal-request",
  "DisplayConfiguration": {
    "Resolution": {
      "Width": 1920,
      "Height": 1080
    }
  }
}
```

## 计算设备的最佳分辨率
<a name="custom-stream-resolution-calculate"></a>

您可以使用任何满足分辨率限制的分辨率。以下公式是找到特定纵横比的最大分辨率的一种推荐方法。它最大限度地提高了可用像素以获得最佳视觉质量：

```
height = floor_to_even( sqrt(2,073,600 * H / W) )
width  = floor_to_even( height * W / H )
```

在此公式中，`W:H`是目标纵横比，`2,073,600`也是最大总像素数（1920 × 1080）。该函数向下`floor_to_even(x)`舍入到最接近的偶数整数。

**Example 19. 5:9（手机）**  

```
height = floor_to_even( sqrt(2,073,600 * 9 / 19.5) ) = floor_to_even(978.2) = 978
width  = floor_to_even( 978 * 19.5 / 9 )             = floor_to_even(2118.3) = 2118
→  Resolution: 2118 × 978  (2,071,404 pixels, 99.9% utilization)
```

对于纵向分辨率，计算横向分辨率并交换宽度和高度值。

## 设备的常用分辨率值
<a name="custom-stream-resolution-presets"></a>

以下值使用涵盖常见设备类别的通用标准比率。个别设备的原生宽高比可能略有不同，这导致黑条在视觉上可以忽略不计。要获得完美的像素填充，请使用设备的原始纵横比和上面的公式。


| 类别 | 纵横比 | 景观 | 肖像 | 匹配的设备 | 
| --- | --- | --- | --- | --- | 
| 桌面 | 16:9 | 1920 × 1080 | 1080 × 1920 | 台式机显示器、电视、高清手机 | 
| 桌面 | 16:10 | 1820 × 1138 | 1138 × 1820 | 宽屏显示器、Amazon Fire 平板电脑 | 
| 桌面 | 21:9 | 2198 × 942 | 不适用 | 超宽显示器 | 
| 平板电脑 | 3:2 | 1760 × 1174 | 1174 × 1760 | 各种各样的 iPad | 
| 平板电脑 | 4:3 | 1660 × 1246 | 1246 × 1660 | iPad、安卓平板电脑 | 
| 移动 | 20:9 | 2142 × 964 | 964 × 2142 | 谷歌 Pixel、三星银河 | 
| 移动 | 19. 5:9 | 2118 × 978 | 978 × 2118 | iPhone、三星 Galax | 
| 移动 | 18:9 | 2036 × 1018 | 1018 × 2036 | 其他安卓手机 | 
| 其他 | 1:1 | 1440 × 1440 | 不适用 | 方形显示器 | 

## 以最大分辨率进行交互
<a name="custom-stream-resolution-max-resolution"></a>

自定义分辨率和最大分辨率有不同的用途：
+ **自定义分辨率：**设置自定义分辨率时，它将成为会话的显示器分辨率。这是服务器渲染的内容，包括捕获帧的纵横比和像素尺寸。
+ **最大分辨率：**限制直播分辨率的 Web SDK 设置。上限位于所选层的定向边界框内（例如，720p 为 1280 × 720）。使用此设置瞄准无法解码全分辨率图像的低端设备。

有关最大分辨率参数的更多信息，请参阅 Amazon Streams [文档页面上的 Amazon GameLift Stre GameLift am](https://docs.aws.amazon.com/gameliftstreams/) s Web SDK API 参考。

## 与动态分辨率的交互
<a name="custom-stream-resolution-dynamic-resolution"></a>

动态分辨率可自动调整直播分辨率，以提供观众网络连接所能维持的最佳视觉质量。此功能在 Amazon GameLift Streams Web SDK 版本 1.3.0 及更高版本中可用。

动态分辨率不会影响会话的显示器分辨率。Amazon GameLift Streams 仅调整传送给玩家的直播分辨率。当带宽有限时，流媒体分辨率会缩小，同时保持纵横比。当带宽恢复时，它会向上扩展到显示器的完整分辨率或最大分辨率上限。

例如，如果您将自定义分辨率设置为 1080 × 1920（移动画像，9:16），则播放器将在正常带宽下接收完整的 1080 × 1920 直播。如果播放器的网络受到限制，动态分辨率可能会将直播缩小到较低的分辨率（例如 720 × 1280），同时保持 9:16 的宽高比。服务器上的显示器分辨率始终保持在 1080 × 1920。

有关动态解析参数的更多信息，请参阅 Amazon Streams [文档页面上的 Amazon GameLift Stre GameLift am](https://docs.aws.amazon.com/gameliftstreams/) s Web SDK API 参考。

## 最佳实践
<a name="custom-stream-resolution-best-practices"></a>

在 Amazon GameLift Streams 中使用自定义分辨率时，请遵循以下最佳实践：
+ **匹配玩家的设备纵横比以填满屏幕，而无需使用信箱或柱装箱。**使用常用的分辨率值或计算公式来找到给定纵横比的最佳分辨率。对于以人像为导向的手机游戏，请使用人像分辨率来提供原生的垂直体验。
+ **优化您的前端以获得流媒体体验。**在流式传输到移动设备或平板电脑时，请确保您的网络客户端正确处理直播的宽高比。
+ **在部署到玩家之前，请使用自定义分辨率测试您的应用程序。**大多数应用程序在全屏模式下运行时会自动适应显示器的分辨率。但是，某些应用程序可能无法优雅地处理非 16:9 的分辨率。
+ **确保你的游戏内镜头和用户界面适应宽高比。**调整游戏摄像机的视野以显示适当的场景量，而不是裁剪视口。重排或重新定位用户界面元素以适应新的宽高比。
+ **避免在运行时在应用程序中更改虚拟显示器的分辨率。**Amazon GameLift Streams 会在会话开始时设置显示器分辨率。在游戏过程中对其进行修改的应用程序可能会产生意想不到的结果。
+ **在应用程序和前端处理设备旋转。**显示器分辨率在会话期间是固定的。为了支持中流设备旋转，我们建议将旋转信号发送[应用程序和 Web 客户端之间的数据通道通信](data-channels.md)到应用程序。让应用程序旋转其渲染，并相应地更新你的前端。

## 问题排查
<a name="custom-stream-resolution-troubleshooting"></a>

下表描述了常见问题、其原因和建议的解决方案。


| 问题 | 原因 | 解决方案 | 
| --- | --- | --- | 
| 会话无法启动，出现验证错误 | 分辨率不符合限制 | 验证您的分辨率是否符合中列出的所有限制[自定义分辨率限制](#custom-stream-resolution-constraints)。 | 
| 应用程序以错误的分辨率呈现 | 应用程序未在全屏模式下运行，或者在窗口模式下以不同的分辨率呈现 | 将应用程序配置为全屏运行。应用程序可以向系统查询配置的分辨率。 | 
| 直播分辨率低于预期（宽高比相同） | 最大分辨率上限或动态分辨率处于活动状态 | 当最大分辨率或动态分辨率处于活动状态时，这是预期的行为。这两个功能都可以在保持纵横比的同时缩小直播分辨率。检查 Web SDK 中的最大分辨率或动态分辨率设置。 | 
| 直播分辨率与自定义分辨率不同（宽高比不同） | 应用程序在启动期间或直播中途更改显示器分辨率 | 最大分辨率和动态分辨率不会导致此问题。对于某些会覆盖显示器分辨率的应用程序来说，这是一种已知的行为。考虑使用不覆盖显示器分辨率的应用程序，或者将应用程序配置为以显示器分辨率全屏呈现。 | 
| 玩家屏幕上会出现黑条 | 直播和设备之间的纵横比不匹配，或者应用程序内部呈现黑条 | 检查黑条是来自客户端（纵横比不匹配）还是来自应用程序本身。使用与玩家设备宽高比相匹配的分辨率值，或者使用中的公式计算最佳分辨率[计算设备的最佳分辨率](#custom-stream-resolution-calculate)。 | 