本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Streams 中的自定义 GameLift 直播分辨率
默认情况下,Amazon GameLift Streams以1920×1080像素的行业标准全高清分辨率和标准的16×9宽高比提供交互式直播。您可以为每个会话设置自定义分辨率,以匹配玩家设备的屏幕形状或纵横比。自定义分辨率支持横向、纵向和正方形纵横比。
使用自定义分辨率可以:
-
以原生设备宽高比将全屏体验流式传输到手机和平板电脑,无需填充或裁剪。
-
匹配超宽显示器宽高比,获得原生宽屏体验。
-
Support 支持任意尺寸的游戏流,以便嵌入到非全屏网页体验中。
您可以对所有 Amazon GameLift Streams 服务配置使用自定义分辨率,无论流类或运行时环境如何。
分辨率的工作原理
当您设置自定义分辨率时,Amazon GameLift Streams 会将会话的虚拟显示器配置为所需的分辨率。这将成为会话的显示器分辨率。为了获得最佳视觉质量,应用程序必须按照配置的显示器分辨率进行渲染。
显示器分辨率决定了虚拟显示器的尺寸和捕获帧的分辨率。另外两个 Web SDK 设置会影响传送给播放器的直播的分辨率:
-
最大分辨率:限制直播分辨率的 Web SDK 设置。如果未指定,则不应用上限,并且会流式传输显示器的完整分辨率。请参阅以最大分辨率进行交互。
-
动态分辨率:自动调整直播分辨率,以提供观众网络连接所能维持的最佳视觉质量。请参阅与动态分辨率的交互。
这两个设置都不会更改会话的显示器分辨率。
自定义分辨率限制
您指定的分辨率必须满足以下要求:
| 约束 | 值 |
|---|---|
| 最大总像素 | 2,073,600 (1920 × 1080) |
| 宽度和高度范围 | 320 — 4096 像素 |
| 维度奇偶性 | 宽度和高度都必须是偶数 |
当您启动会话时,该服务会验证这些限制。如果分辨率不符合要求,则请求会因验证错误而失败。
设置自定义分辨率
您可以使用控制台、CLI 或 AP AWS I 在启动直播会话时设置自定义分辨率。
使用 Amazon GameLift Streams 控制台
要使用自定义分辨率测试直播,请执行以下操作:
-
打开 Amazon GameLift Streams 控制台
并导航到您的直播组。 -
选择 “测试直播”。
-
在 “分辨率” 下拉列表中,为台式机、平板电脑或移动设备选择分辨率。
-
选择 “测试直播” 以启动会话。
直播激活后,您可以在实时统计信息叠加层中查看当前分辨率。
使用 AWS CLI
将 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
在 StartStreamSessionAPI 请求中,包含以下DisplayConfiguration参数:
{ "ApplicationIdentifier": "a-ExampleApp", "Protocol": "WebRTC", "SignalRequest": "your-signal-request", "DisplayConfiguration": { "Resolution": { "Width": 1920, "Height": 1080 } } }
计算设备的最佳分辨率
您可以使用任何满足分辨率限制的分辨率。以下公式是找到特定纵横比的最大分辨率的一种推荐方法。它最大限度地提高了可用像素以获得最佳视觉质量:
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)舍入到最接近的偶数整数。
例 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)
对于纵向分辨率,计算横向分辨率并交换宽度和高度值。
设备的常用分辨率值
以下值使用涵盖常见设备类别的通用标准比率。个别设备的原生宽高比可能略有不同,这导致黑条在视觉上可以忽略不计。要获得完美的像素填充,请使用设备的原始纵横比和上面的公式。
| 类别 | 纵横比 | 景观 | 肖像 | 匹配的设备 |
|---|---|---|---|---|
| 桌面 | 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 | 不适用 | 方形显示器 |
以最大分辨率进行交互
自定义分辨率和最大分辨率有不同的用途:
-
自定义分辨率:设置自定义分辨率时,它将成为会话的显示器分辨率。这是服务器渲染的内容,包括捕获帧的纵横比和像素尺寸。
-
最大分辨率:限制直播分辨率的 Web SDK 设置。上限位于所选层的定向边界框内(例如,720p 为 1280 × 720)。使用此设置瞄准无法解码全分辨率图像的低端设备。
有关最大分辨率参数的更多信息,请参阅 Amazon Streams 文档页面上的 Amazon GameLift Stre GameLift am s Web SDK API 参考。
与动态分辨率的交互
动态分辨率可自动调整直播分辨率,以提供观众网络连接所能维持的最佳视觉质量。此功能在 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 s Web SDK API 参考。
最佳实践
在 Amazon GameLift Streams 中使用自定义分辨率时,请遵循以下最佳实践:
-
匹配玩家的设备纵横比以填满屏幕,而无需使用信箱或柱装箱。使用常用的分辨率值或计算公式来找到给定纵横比的最佳分辨率。对于以人像为导向的手机游戏,请使用人像分辨率来提供原生的垂直体验。
-
优化您的前端以获得流媒体体验。在流式传输到移动设备或平板电脑时,请确保您的网络客户端正确处理直播的宽高比。
-
在部署到玩家之前,请使用自定义分辨率测试您的应用程序。大多数应用程序在全屏模式下运行时会自动适应显示器的分辨率。但是,某些应用程序可能无法优雅地处理非 16:9 的分辨率。
-
确保你的游戏内镜头和用户界面适应宽高比。调整游戏摄像机的视野以显示适当的场景量,而不是裁剪视口。重排或重新定位用户界面元素以适应新的宽高比。
-
避免在运行时在应用程序中更改虚拟显示器的分辨率。Amazon GameLift Streams 会在会话开始时设置显示器分辨率。在游戏过程中对其进行修改的应用程序可能会产生意想不到的结果。
-
在应用程序和前端处理设备旋转。显示器分辨率在会话期间是固定的。为了支持中流设备旋转,我们建议将旋转信号发送应用程序和 Web 客户端之间的数据通道通信到应用程序。让应用程序旋转其渲染,并相应地更新你的前端。
问题排查
下表描述了常见问题、其原因和建议的解决方案。
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 会话无法启动,出现验证错误 | 分辨率不符合限制 | 验证您的分辨率是否符合中列出的所有限制自定义分辨率限制。 |
| 应用程序以错误的分辨率呈现 | 应用程序未在全屏模式下运行,或者在窗口模式下以不同的分辨率呈现 | 将应用程序配置为全屏运行。应用程序可以向系统查询配置的分辨率。 |
| 直播分辨率低于预期(宽高比相同) | 最大分辨率上限或动态分辨率处于活动状态 | 当最大分辨率或动态分辨率处于活动状态时,这是预期的行为。这两个功能都可以在保持纵横比的同时缩小直播分辨率。检查 Web SDK 中的最大分辨率或动态分辨率设置。 |
| 直播分辨率与自定义分辨率不同(宽高比不同) | 应用程序在启动期间或直播中途更改显示器分辨率 | 最大分辨率和动态分辨率不会导致此问题。对于某些会覆盖显示器分辨率的应用程序来说,这是一种已知的行为。考虑使用不覆盖显示器分辨率的应用程序,或者将应用程序配置为以显示器分辨率全屏呈现。 |
| 玩家屏幕上会出现黑条 | 直播和设备之间的纵横比不匹配,或者应用程序内部呈现黑条 | 检查黑条是来自客户端(纵横比不匹配)还是来自应用程序本身。使用与玩家设备宽高比相匹配的分辨率值,或者使用中的公式计算最佳分辨率计算设备的最佳分辨率。 |