View a markdown version of this page

Amazon Streams 中的自定义 GameLift 直播分辨率 - 亚马逊 GameLift 直播

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

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 控制台

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

  1. 打开 Amazon GameLift Streams 控制台并导航到您的直播组。

  2. 选择 “测试直播”。

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

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

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

使用 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 中的最大分辨率或动态分辨率设置。
直播分辨率与自定义分辨率不同(宽高比不同) 应用程序在启动期间或直播中途更改显示器分辨率 最大分辨率和动态分辨率不会导致此问题。对于某些会覆盖显示器分辨率的应用程序来说,这是一种已知的行为。考虑使用不覆盖显示器分辨率的应用程序,或者将应用程序配置为以显示器分辨率全屏呈现。
玩家屏幕上会出现黑条 直播和设备之间的纵横比不匹配,或者应用程序内部呈现黑条 检查黑条是来自客户端(纵横比不匹配)还是来自应用程序本身。使用与玩家设备宽高比相匹配的分辨率值,或者使用中的公式计算最佳分辨率计算设备的最佳分辨率