

# 步骤 5：设置流式传输软件
<a name="getting-started-set-up-streaming"></a>

您可以通过以下方式（低延迟）流式传输到 Amazon IVS：
+ 支持 RTMPS 的原生 [IVS 广播 SDK](#broadcast-sdk)。我们推荐采用此方法，尤其是在生产场景中。
+ [Amazon IVS 控制台](#ivs-console) — 适用于测试流。
+ 其他流媒体软件和硬件编码器：您可以使用任何支持 RTMP、RTMPS 或 SRT 协议的流媒体编码器。下面介绍了几个使用开放广播软件（OBS）和带有 RTMPS 和 SRT 的 FFmpeg 的示例。RTMPS 通过使用已加密 TLS 流实现高安全性。

键编码器设置为关键帧间隔（2 秒）和分辨率/比特率/帧速率（相互关联）。有关编码器设置的更多信息，请参阅：
+ *Amazon IVS 用户指南*中的 [流传输配置](streaming-config.md)。
+ 此博客文章：[使用 Amazon Interactive Video Service 设置流传输](https://aws.amazon.com/blogs/media/setting-up-for-streaming-with-amazon-ivs/)。

**备注**：
+ Amazon IVS 流的最长持续时间为 48 小时。之后，流将终止，流传输会话将断开连接。成功重新连接（自动或手动）将启动新流。
+ 如果您的编码器停止发送数据（例如，出现临时网络问题），Amazon IVS 将等待 30 秒钟。如果在此期间未收到直播数据，Amazon IVS 将断开连接。

## 使用 Amazon IVS 广播开发工具包进行流传输
<a name="broadcast-sdk"></a>

要从 iOS 或 Android 应用程序中进行广播，您可以使用 Amazon IVS 广播开发工具包。广播开发工具包利用 Amazon IVS 架构，并将实现 Amazon IVS 的持续改进和新功能。作为本机移动广播开发工具包，它旨在最大限度地减少对应用程序以及用户有权访问应用程序所在设备的性能影响。


| 要从 … 广播 | 您可以使用 … | 备注 | 
| --- | --- | --- | 
| 您的 Android 或 iOS 应用程序 | Amazon IVS Android 或 iOS 广播 SDK | 作为本机移动广播开发工具包，它旨在最大限度地减少对应用程序以及用户有权访问应用程序所在设备的性能影响。 | 
| 一个 Web 环境 | Amazon IVS Web 广播 SDK | 作为一种 Web 广播 SDK，Amazon IVS Web 广播 SDK 让您能够使用 WebRTC 从 Web 环境进行广播。它提供跨浏览器和跨平台支持。 | 

有关更多信息，请参阅 [IVS 广播 SDK \| 低延迟直播功能](broadcast.md)。

## 使用 Amazon IVS 控制台进行流式传输
<a name="ivs-console"></a>

1. 打开 [Amazon IVS 控制台](https://console.aws.amazon.com/ivs)。

   （您还可通过 [Amazon 管理控制台](https://console.aws.amazon.com/)访问 Amazon IVS 控制台。）

1. 在导航窗格中，选择**通道**。（如果导航窗格已折叠，请选择汉堡图标以将其展开。）

1. 选择您要广播的通道，以转至该通道的详细信息页面。

1. 选择**广播**选项卡。（这些选项卡在**常规配置**部分下。）

1. 系统将提示您授予 IVS 控制台访问您摄像头和麦克风的权限；**允许**这些权限。

1. 在**广播**选项卡的底部，使用下拉框为麦克风和摄像头选择输入设备。

1. 要开始流式传输，请选择**开始广播**。

1. 要查看实时流，请转至**播放**选项卡。

   **注意**：启动流后，预计会有短暂的延迟（通常不到 30 秒），然后才能在“播放”选项卡中查看。

您可以使用此功能同时向多个通道广播。

**注意**：从控制台进行流式传输会消耗资源，并且您将产生实时视频输入费用。要了解更多信息，请参阅 IVS 定价页面上的[实时视频输入费用](https://aws.amazon.com/ivs/pricing/#Low-Latency_Streaming)。

## 使用 RTMPS 通过 OBS Studio 进行直播
<a name="obs-rtmps"></a>

([OBS Studio](https://obsproject.com/)) 是一个免费的开源软件套件，用于录制和实时流传输。OBS 提供实时源和设备捕获、场景合成、编码、录制和流传输。

按照以下步骤快速设置并运行 OBS Studio v30.2 或更高版本：

1. 下载并安装此软件：[https://obsproject.com/download](https://obsproject.com/download)。

1. 运行 OBS Studio **自动配置向导**，其在首次加载 OBS Studio 时会显示。执行以下步骤并接受默认值。

1. 在**直播信息**中，从**服务**下拉列表中选择 **Amazon IVS**，然后输入**直播密钥**。

   如果您使用了 Amazon IVS 控制台创建通道，则您在 OBS 中输入的**直播密钥**是控制台中的**直播密钥**：`sk_us-west-2_abcd1234efgh5678ijkl`

   如果您使用了 AWS CLI 创建通道，则您在 OBS 中输入的**直播密钥**是 CLI 响应中的 **streamKey 值**：`sk_us-west-2_abcd1234efgh5678ijkl`

   如果您的 IVS 通道配置为多轨道视频输入，请选择**启用多轨道视频**。（可选）配置**最大视频轨道**和**最大直播带宽**设置，这些设置用于限制自动配置的直播设置。

1. 有关**视频输出分辨率**和**比特率**的信息，请参阅《Amazon IVS 直播功能配置》**中的[通道类型](streaming-config.md#streaming-config-settings-channel-types)。如果 OBS 向导选择的任一值超过了 Amazon IVS 允许的值，则应手动调整这些值以避免与 Amazon IVS 连接失败。向导完成后：

   1. 要调整视频分辨率，请使用 **Settings > Video > Output (Scaled) Resolution** [设置 > 视频 > 输出（缩放）分辨率]。

   1. 要调整视频比特率，请使用 **Settings > Output > Streaming > Video Bitrate**（设置 > 输出 > 流传输 > 视频比特率）。

      **注意：**如果您之前勾选了**启用多轨道视频**，这不会影响直播。

1. 我们建议使用 2 秒的 **Keyframe Interval**（关键帧间隔），以提高流稳定性并避免查看者播放时缓冲。向导完成后，转到**设置 > 输出 > 输出模式**，选择**高级**，然后在**直播功能**选项卡上，确保**关键帧间隔**为 2。

   **注意：**如果您之前勾选了**启用多轨道视频**，则会自动配置关键帧间隔。

1. 在 OBS Studio 主窗口中，选择 **Start Streaming**（开始流传输）。

有关使用 OBS Studio 进行流传输的更多信息，请参阅 [OBS Studio 快速入门](https://obsproject.com/wiki/OBS-Studio-Quickstart)。

稍后，您可以手动修改 OBS 设置：

1. 选择 **Settings (设置) > Stream (流)**。

1. 从下拉列表中选择 **Amazon IVS**。

1. 粘贴**直播密钥**。

您可以随时再次运行向导：选择 **Tools (工具) > Auto-Configuration Wizard (自动配置向导)**。

（可选）在 **Settings (设置) > General (常规)** 中，启用本地录制以保存实时流以供日后使用。如前所述，广播与亚马逊云科技之间或亚马逊云科技内部出现网络问题可能会在录制流时导致一些数据丢失。在这些情况下，Amazon IVS 将实时流优先于录制。通过流传输工具进行本地录制可提供冗余。

建议定期检查 OBS Studio 更新，并更新到最新版本。（例如，如果出现“无法连接到服务器”错误，则可能是使用了不支持 RTMPS 的旧版 OBS Studio。）

## 使用 SRT 通过 OBS Studio 进行直播
<a name="obs-srt"></a>

按照以下步骤快速设置并运行安全可靠传输协议：

1. 下载并安装此软件：[https://obsproject.com/download](https://obsproject.com/download)。

1. 运行 OBS Studio **自动配置向导**，其在首次加载 OBS Studio 时会显示。执行以下步骤并接受默认值。

1. 在 **Stream Information**（流信息）中，从 **Service**（服务）下拉列表中选择 **Custom...**（自定义……），然后输入 **Server（Ingest server）** [服务器（提取服务器）] 和 **Stream Key**（流密钥）。

   如果您使用 Amazon CLI 创建了通道：
   + 您在 OBS 中输入的**服务器**是以下五个选项的组合：
     + 提取协议：`srt://`
     + CLI 响应中来自 `srt` 结构的**端点**：

       `a1b2c3d4e5f6.srt.live-video.net`
     + 端口：`9000`
     + 一个 streamid，是 CLI 响应中的 **streamKey 值**：

       `sk_us-west-2_abcd1234efgh5678ijkl`
     + 密码，用于加密内容。仅在未启用**不安全摄取**时才使用此选项。

       `ZU5A3yrjGAkghUNDr0c5NXBhsPrjlmtcKMNBluh7oImwJQ3ijeyClvMKxlpPcGAMziICJ`

     完整条目为：

     `srt://a1b2c3d4e5f6.srt.live-video.net:9000?streamid=sk_us-west-2_abcd1234efgh5678ijkl&passphrase=ZU5A3yrjGAkghUNDr0c5NXBhsPrjlmtcKMNBluh7oImwJQ3ijeyClvMKxlpPcGAMziICJ`
   + 您在 OBS 中输入的**直播密钥**对于 SRT 协议将保持为空。

1. 有关**视频输出分辨率**和**比特率**的信息，请参阅《Amazon IVS 直播功能配置》**中的[通道类型](streaming-config.md#streaming-config-settings-channel-types)。如果 OBS 向导选择的任一值超过了 Amazon IVS 允许的值，则应手动调整这些值以避免与 Amazon IVS 连接失败。向导完成后：

   1. 要调整视频分辨率，请使用 **Settings > Video > Output (Scaled) Resolution** [设置 > 视频 > 输出（缩放）分辨率]。

   1. 要调整视频比特率，请使用 **Settings > Output > Streaming > Video Bitrate**（设置 > 输出 > 流传输 > 视频比特率）。

1. 我们建议使用 2 秒的 **Keyframe Interval**（关键帧间隔），以提高流稳定性并避免查看者播放时缓冲。向导完成后，转到**设置 > 输出 > 输出模式**，选择**高级**，然后在**直播功能**选项卡上，确保**关键帧间隔**为 2。

1. 在 OBS Studio 主窗口中，选择 **Start Streaming**（开始流传输）。

稍后，您可以手动修改 OBS 设置：

1. 选择 **Settings (设置) > Stream (流)**。

1. 从下拉列表中选择 **Custom (自定义)**。

1. 粘贴至 **Server (服务器)** 和/或 **Stream Key (流密钥)**。

您可以随时再次运行向导：选择 **Tools (工具) > Auto-Configuration Wizard (自动配置向导)**。

（可选）在 **Settings (设置) > General (常规)** 中，启用本地录制以保存实时流以供日后使用。如前所述，广播与亚马逊云科技之间或亚马逊云科技内部出现网络问题可能会在录制流时导致一些数据丢失。在这些情况下，Amazon IVS 将实时流优先于录制。通过流传输工具进行本地录制可提供冗余。

建议定期检查 OBS Studio 更新，并更新到最新版本。（例如，如果出现“无法连接到服务器”错误，则可能是使用了不支持 RTMPS 的旧版 OBS Studio。）

## 使用 RTMPS 通过 FFmpeg 直播录制的视频
<a name="ffmpeg-rtmps"></a>

按照以下步骤进行操作：

1. 下载并安装 FFmpeg：[https://www.ffmpeg.org/download.html](https://www.ffmpeg.org/download.html)。

1. 将 `$VIDEO_FILEPATH` 设置为要进行流传输的 MP4 视频的位置：

   ```
   VIDEO_FILEPATH=/home/test/my_video.mp4
   ```

1. 将 `STREAM_KEY` 设置为您的流密钥**值**：

   ```
   STREAM_KEY=sk_us-west-2_abcd1234efgh5678ijkl
   ```

1. 将 `INGEST_ENDPOINT` 设置为您的 **ingestEndpoint**（Amazon CLI 中）：

   ```
   INGEST_ENDPOINT=a1b2c3d4e5f6.global-contribute.live-video.net
   ```

1. 使用以下终端命令开始流传输（显示在一行中）：

   ```
   ffmpeg -re -stream_loop -1 -i $VIDEO_FILEPATH -r 30 -c:v libx264 -pix_fmt yuv420p -profile:v main -preset veryfast -x264opts "nal-hrd=cbr:no-scenecut" -minrate 3000 -maxrate 3000 -g 60 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmps://$INGEST_ENDPOINT:443/app/$STREAM_KEY
   ```

   *请注意，以上命令是一个示例。对于生产流传输，请根据您的需求调整参数。*

## 使用 SRT 通过 FFmpeg 直播录制的视频
<a name="ffmpeg-srt"></a>

1. 下载并安装 FFmpeg：[https://www.ffmpeg.org/download.html](https://www.ffmpeg.org/download.html)。如果您使用的是旧版/编译版本的 FFmpeg，请使用 `--enable-libsrt` 标志构建一个新版本。

1. 验证 SRT 是否可以在 FFmpeg 中使用：运行以下命令并确保输出中包含 `libsrt`。如果输出中没有 `libsrt`，请重建或获取支持 SRT 的较新版本的 FFmpeg。

   ```
   ffmpeg -version | grep enable-libsrt
   ```

1. 将 `$VIDEO_FILEPATH` 设置为要进行流传输的 MP4 视频的位置：

   ```
   VIDEO_FILEPATH=/home/test/my_video.mp4
   ```

1. 将 `STREAM_KEY` 设置为您的流密钥**值**：

   ```
   STREAM_KEY=sk_us-west-2_abcd1234efgh5678ijkl
   ```

1. 将 `INGEST_ENDPOINT` 设置为您的**端点**（从 `srt` 对象下的 Amazon CLI 中）：

   ```
   INGEST_ENDPOINT=a1b2c3d4e5f6.srt.live-video.net
   ```

1. 将 `PASSPHRASE` 设置为您的**密码**（从 `srt` 对象下的 Amazon CLI 中）。仅当通道未启用不安全摄取时，才使用密码。

   ```
   PASSPHRASE=ZU5A3yrjGAkghUNDr0c5NXBhsPrjlmtcKMNBluh7oImwJQ3ijeyClvMKxlpPcGAMziICJ
   ```

1. 使用以下终端命令开始流传输（显示在一行中）：

   ```
   ffmpeg -re -i $VIDEO_FILEPATH -c copy -f mpegts "srt://$INGEST_ENDPOINT:9000?streamid=$STREAM_KEY&passphrase=$PASSPHRASE”
   ```