

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

# 使用 Amazon Streams 开始 GameLift 直播会话
<a name="stream-sessions"></a>

本节介绍直播会话，即最终用户或玩家可以与您的应用程序交互或玩游戏的直播的实际实例。您将学习如何测试自己的直播会话并了解直播会话的生命周期。

 要启动面向最终用户的直播会话，您必须将 Amazon GameLift Streams 集成到您自己的服务中。有关更多信息，请参阅[Amazon GameLift Streams 后端服务和网络客户端](sdk.md)。

## 关于直播会话
<a name="stream-sessions-about"></a>

 启动直播会话的先决条件是处于 “**就绪**” 状态的应用程序、在要流式传输的位置具有可用容量的流组，以及复制到要进行流式传输的位置的应用程序。流会话在流组分配的计算资源之一上运行。启动直播时，必须使用直播组和应用的 ARN 或 ID 值指定要进行流式传输的应用程序。

 成功启动直播会话后，您将收到该直播会话的唯一标识符。然后，使用该 ID 将直播会话连接到最终用户。有关更多信息，请参阅 *Amazon GameLift Streams API 参考[StartStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html)*中的。

## 在控制台中测试直播
<a name="stream-sessions-testing"></a>

 测试应用程序流传输方式的最直接方法是通过 Amazon GameLift Streams 控制台。当您启动直播时，Amazon Stre GameLift ams 会使用您的直播组分配的计算资源之一。因此，您的直播组中必须有可用容量。

**在 Amazon Stream GameLift s 控制台中测试您的直播**

1.  登录 AWS 管理控制台 并打开 [Amazon GameLift Streams 控制台](https://console.aws.amazon.com/gameliftstreams/)。

1. 您可以通过多种方式测试直播。从**直播群组**页面或**测试直播**页面开始，然后按照以下步骤操作：

   1. 选择要用于直播的直播组。

   1. 如果您从**直播组**页面开始，请选择**测试直播**。如果您从 “**测试直播**” 页面开始，请选择 “**选择**”。这将打开所选**直播组的测试**直播配置页面。

   1. 在**关联的应用程序**中，选择一个应用程序。

   1. 在**位置**中，选择具有可用容量的位置。

   1. （可选）在**程序配置**中，输入要在应用程序启动时传递给应用程序的命令行参数或环境变量。

   1. 确认您的选择，然后选择**测试直播**。

1. 直播加载后，你可以在直播中执行以下操作：

   1. **要连接输入，例如鼠标、键盘和游戏手柄（**测试直播**中不支持麦克风），请选择连接输入。**当你将光标移到直播窗口时，你会自动连接鼠标。

   1. 要在会话结束时将流式传输会话期间创建的文件导出到 Amazon S3 存储桶，请选择**导出文件**并指定存储桶的详细信息。导出的文件可以在 “**会话**” 页面上找到。

   1. 要以全屏模式观看直播，请选择**全**屏。按下 E **scap** e 可撤消此操作。

1. 要结束直播，请选择**终止会话**。当直播断开连接时，直播容量将可用于启动另一个直播。

**注意**  
Amazon **Stream GameLift s 控制台中的测试**直播功能不支持麦克风。

## 直播会话生命周期
<a name="stream-sessions-lifecycle"></a>

在 Amazon Streams 中处理 GameLift 直播会话时，此图表可以帮助您了解直播会话在其整个生命周期中过渡到的不同状态。
+ [StartStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html)创建新的直播会话，该会话以`ACTIVATING`状态开始。当 Amazon GameLift Streams 找到可用资源来托管直播时，直播会话将转换为`ACTIVE`。当客户端连接到活动直播时，直播会话将转换为`CONNECTED`。
+ 当客户端断开与直播的连接时，直播会话将转换为`PENDING_CLIENT_RECONNECTION`状态。 [CreateStreamSessionConnection](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_CreateStreamSessionConnection.html)将直播会话转换为`RECONNECTING`，并将启动客户端以重新连接到直播或创建新的直播会话。当直播会话准备好让客户端重新连接时，它会过渡到。`ACTIVE`当客户端重新连接时，它会转换回到。`CONNECTED`如果客户端断开连接的时间超过`ConnectionTimeoutSeconds`，则直播会话结束。
+ 当客户端在指定的时间段内未连接到处于`ACTIVE`或`PENDING_CLIENT_RECONNECTION`状态的直播会话时`ConnectionTimeoutSeconds`，它将转换为`TERMINATED`。
+ [TerminateStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TerminateStreamSession.html)启动直播的终止，并且直播会话转换到`TERMINATING`状态。当直播会话成功终止时，它会转换为。`TERMINATED`
+ 处于任何状态（除外`TERMINATED`）的直播会话都可以转换为`ERROR`。当 API 调用`ERROR`以状态值返回时，请检查的值 StatusReason 以获取错误原因的简短描述。您也可以致电[GetStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html)查看这些值。

![\[此图显示了直播会话在其整个生命周期中过渡到的不同状态。\]](http://docs.aws.amazon.com/zh_cn/gameliftstreams/latest/developerguide/images/stream_session_lifecycle.png)


## 影响直播会话的超时值
<a name="stream-sessions-lifecycle-timeouts"></a>

直播会话受多个超时值控制，这些超时值控制会话生命周期的不同方面。按照你通常在直播会话生命周期中遇到它们的时间顺序大致排列，它们包括以下内容：

**放置超时**  
Amazon GameLift Streams 查找计算资源以使用可用容量托管直播会话的时间限制。放置超时因用于满足直播请求的容量类型而异：  
+ 永远在线的容量：75 秒
+ 按需容量：
  + Linux/Proton 运行时间：90 秒
  + Windows 运行时间：10 分钟
+ 行为：如果 Amazon GameLift Streams 无法在这段时间内识别出可用资源，则直播会话将`Status`变为，`ERROR`且为`StatusReason``placementTimeout`。

**连接超时**  
Amazon GameLift Streams 等待客户端连接或重新连接到直播会话的时间长度。  
+ 参数：`ConnectionTimeoutSeconds`在 [StartStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html)
+ 射程：1-3600 秒（1 小时）
+ 默认值：120 秒（2 分钟）
+ 行为：当直播会话达到`ACTIVE`或`PENDING_CLIENT_RECONNECTION`状态时，计时器启动。如果在超时之前没有客户端连接，则会话将`Status`转换为`TERMINATED`。

**会话时长超时**  
Amazon GameLift Streams 保持直播会话打开的最长持续时间。  
+ 参数：`SessionLengthSeconds`在 [StartStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html)
+ 射程：1-86400 秒（24 小时）
+ 默认值：43200 秒（12 小时）
+ 行为：达到时限后，无论是否存在任何现有客户端连接，都将终止直播会话。

## 终止直播会话
<a name="stream-sessions-terminate"></a>

如果您需要强制终止直播会话，则有以下选择：
+ **使用 TerminateStreamSession API：**要使用 [TerminateStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TerminateStreamSession.html)，您需要直播组 ID 和直播会话 ID。您可以将[ListStreamSessions](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_ListStreamSessions.html)或[ListStreamSessionsByAccount](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_ListStreamSessionsByAccount.html)与`--status CONNECTED`参数一起使用来获取已连接客户端的直播会话列表。
+ 将@@ **会话的位置从其直播组中移除：**从直播组中移除直播会话的位置将终止该位置的所有活动直播会话。您可以通过控制台或使用 [RemoveStreamGroupLocations](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_RemoveStreamGroupLocations.html)API 删除直播群组中的某个位置。
+ **删除会话的直播组：**删除直播组将终止该直播组所有位置的所有活动直播会话。您可以从控制台或使用 [DeleteStreamGroup](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_DeleteStreamGroup.html)API 删除直播组。请谨慎使用，因为您将突然终止客户端连接。

## 正在重新连接到直播会话
<a name="stream-sessions-reconnection"></a>

如果客户端在没有结束会话的情况下与流媒体会话断开连接，则它可以在直播会话启动`ConnectionTimeoutSeconds`时指定的时间内重新连接到该会话。要重新连接到会话，您需要直播会话的 ID。有关详情，请参阅 *Amazon GameLift Streams API 参考[CreateStreamSessionConnection](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_CreateStreamSessionConnection.html)*中的。你可以在 React St [arter 示例中看到重新连接直播会话的示例](https://github.com/aws-samples/sample-amazon-gamelift-streams-react-app)。