

# IVS 流摄取 \$1 实时直播功能
<a name="rt-stream-ingest"></a>

作为使用 IVS 广播 SDK 的替代方案，您可以从 WHIP 或 RTMP 源将视频发布到 IVS 暂存区。这种方法为无法使用或不宜使用 SDK 的工作流程提供了灵活性，例如从 OBS Studio 或硬件编码器发布视频时。建议尽可能使用 IVS 广播 SDK，因为我们无法保证第三方解决方案与 IVS 的性能或兼容性。

下图说明使用 WHIP 和 RTMP 发布的工作原理：

![\[使用 WHIP 和 RTMP 发布。\]](http://docs.aws.amazon.com/zh_cn/ivs/latest/RealTimeUserGuide/images/Stream_Ingest.png)


## 支持的协议
<a name="supported-protocols"></a>

IVS 实时直播功能支持多种摄取协议：
+ RTMP 和 RTMPS — RTMP（实时消息协议）是一种用于通过网络传输视频的行业标准。RTMPS 是通过 TLS 运行的 RTMP 安全版本。

  IVS 支持 E-RTMP（增强型 RTMP）的多轨视频功能。请参阅 IVS RTMP 发布文档中的 [E-RTMP 多轨道视频](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-rtmp-publishing.html#rtmp-multitrack)。
+ WHIP（WebRTC-HTTP 摄取协议）：为标准化 WebRTC 摄取而开发的 IETF 草案。

 有关使用这些协议的详细指导，请参阅我们的 [RTMP](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-rtmp-publishing.html) 和 [WHIP](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/obs-whip-support.html) 文档。

## 支持的媒体规范
<a name="supported-media-specifications"></a>
+ 音频输入格式
  + 编解码器：AAC-LC（适用于 RTMP）和 Opus（适用于 WHIP）
  + 声道：2（立体声）或 1（单声道）
  + 采样率：44.1 kHz 或 48 kHz
  + 最大比特率：160 Kbps
+ 视频输入格式
  + 编解码器：H.264
  + H.264 配置文件：基准
  + IDR 间隔：1 到 2 秒
  + 帧速率：10 到 60 FPS
  + B 帧：0

    注意：IVS 广播 SDK 在默认状态下启用 B 帧，但自版本 1.25.0 开始，在向 IVS 暂存区广播时会自动禁用 B 帧。要使用其他 RTMP 编码器进行实时直播，开发人员就必须禁用 B 帧。*如果使用其他 RTMP 编码器的开发人员未禁用 B 帧，其流将断开连接。*
  + 分辨率：最大值：720p。最小值：160p
  + 最大比特率：8.5 Mbps

    注意：对于单轨道 RTMP 流，此限制适用于该轨道。对于使用增强型 RTMP 发布的多轨道视频，该限制适用于所有视频轨道的合并比特率。
  + 编码器配置：建议对 H.264 编码器使用 `veryfast` 和 `zerolatency` 设置。另外：`zerolatency` 预设中包含 `sliced_threads` x264 选项，建议您将其禁用。例如，使用 FFmpeg 时，您的命令应包含：`-preset:v veryfast -tune zerolatency -x264-params sliced-threads=0`

# IVS RTMP 发布 \$1 实时直播功能
<a name="rt-rtmp-publishing"></a>

本文档概述使用 RTMP 发布到 IVS 暂存区的过程。有关各种摄取选项的其他详细信息，请参阅[流摄取](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-stream-ingest.html)文档

## 先决条件
<a name="rtmp-prerequisites"></a>

### 创建舞台
<a name="rtmp-create-stage"></a>

要创建暂存区，请使用以下命令：

`aws ivs-realtime create-stage --name "test-stage"`

有关详细信息，包括响应，请参阅 [CreateStage](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/API_CreateStage.html)。

**重要提示：**请注意响应中的 `endpoints` 字段，其列出了 RTMP 和 RTMPS 端点。设置 RTMP 编码器时需要这些端点。

### 创建摄取配置
<a name="rtmp-create-an-ingest-configuration"></a>

要使用 RTMPS 发布到暂存区，必须先创建摄取配置并将其与您的暂存区相关联。当您发布到暂存区时（使用摄取配置中的流密钥和暂存区中的 RTMP 端点），媒体将以参与者身份发布到暂存区。您可以选择指定 `userId` 和自定义 `attributes`，其将与连接到暂存区的[参与者](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/API_Participant.html)相关联。

```
aws ivs-realtime create-ingest-configuration \
  --name 'test' \
  --stage-arn arn:aws:ivs:us-east-1:123456789012:stage/8faHz1SQp0ik \
  --user-id '123' \
  --ingest-protocol 'RTMPS'
```

有关详细信息，包括响应，请参阅 [CreateIngestConfiguration](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/API_CreateIngestConfiguration.html)。

创建摄取配置时，您可以预先将其与特定暂存区 ARN 相关联。如果没有此关联，则流密钥将无法使用。此外，摄取配置（包括 `stageArn` 字段）可以通过 [UpdateIngestConfiguration](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/API_UpdateIngestConfiguration.html) 操作进行更新，这样您就可以在不同的舞台重复使用相同的配置。

**注意：**摄取配置 `insecureIngest` 字段默认为 `false`，需要使用 RTMPS。RTMP 连接将被拒绝。如果必须使用 RTMP，则请将 `insecureIngest` 设置为 `true`。我们建议使用 RTMPS，除非是在需要 RTMP 的特定且经过验证的使用场景。

## RTMP 单轨道视频
<a name="rtmp-singletrack"></a>

下面我们介绍如何使用 OBS Studio；但是，您可以使用符合 IVS [媒体规范](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-stream-ingest.html#supported-media-specifications)的任何 RTMP 编码器。

### OBS 指南
<a name="rtmp-singletrack-obs"></a>

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

1. 单击**设置**。在**设置**面板的**流**部分，从**服务**下拉列表中选择**自定义**。

1. 对于**服务器**，请输入暂存区的 RTMP 或 RTMPS 端点。

1. 在**流密钥**中，输入来自摄取配置的 `streamKey`。

1. 如常配置视频设置，但有一些限制：

   1. IVS 实时直播功能支持高达 720p 的输入，速度为 8.5 Mbps。如果超出这些限制，则流将断开连接。

   1. 建议在**输出**面板中将**关键帧间隔**设置为 1s 或 2s。较低的关键帧间隔可以让观众更快地开始视频播放。还建议将 **CPU 使用率预设**设置为 **veryfast**，将**调谐**设置为 **zerolatency**，以实现最低延迟。

   1. 由于 OBS 不支持联播，因此建议将比特率保持在 2.5 Mbps 以下。这样，使用较低带宽连接的观众也能观看。

   1. 禁用 B 帧，因为带有 B 帧的流将自动断开连接。请执行以下操作之一：
      + 在 x264 选项中，输入 `bframes=0 sliced-threads=0`。
      + 如果可以选择 B 帧，则将其设置为 0（例如，对于 NVENC）。

   注意：RTMP 流必须同时包含音频和视频轨道，否则会被断开。

1. 选择**开始直播**

**重要提示：**如果编码器的最大比特率设置为 8.5 Mbps，则发布者偶尔会从会话中消失。这是因为最大比特率设置只是一个目标，而编码器偶尔会超出目标值。为防止这种情况，请将编码器的最大比特率设置得更低；例如设置为 6 Mbps。

## E-RTMP 多轨道视频
<a name="rtmp-multitrack"></a>

IVS 支持 E-RTMP（增强型实时消息协议）的多轨道视频功能，允许将单个 RTMP 流中多种质量的视频发布到 IVS 暂存区。这支持自适应比特率流，因此订阅用户可以自动以网络连接的最佳质量观看。

摄取后，不同质量的视频会作为联播层传送给订阅用户。要配置订阅用户接收的层，请参阅实时直播功能广播 SDK 指南中的“联播分层编码”部分：[Android](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/broadcast-android.html)、[iOS](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/broadcast-ios.html) 和 [Web](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/broadcast-web.html)。

有关示例代码，请参阅 GitHub 上的 [aws-samples/sample-amazon-ivs-multitrack-video](https://github.com/aws-samples/sample-amazon-ivs-multitrack-video)。

下图说明了多轨道视频发布的工作原理：

![\[将多轨道视频发布到暂存区。”\]](http://docs.aws.amazon.com/zh_cn/ivs/latest/RealTimeUserGuide/images/E-RTMP.png)


### OBS 指南
<a name="rtmp-multitrack-obs"></a>

1. 下载并安装 OBS Studio：

   1. Windows：从 OBS Studio 30.2 开始支持多轨道视频。

   1. macOS：从 OBS Studio 31.1 测试版（仅限 Apple Silicon）开始，支持多轨道视频。

   1. 下载地址：[https://obsproject.com/download](https://obsproject.com/download)。

1. 单击**设置**。在**设置**面板的**流**部分，从**服务**下拉列表中选择 **Amazon IVS**。

1. 对于**服务器**，将设置保留为**自动**。

1. 在**流密钥**中，输入来自摄取配置的 `streamKey`。

1. 在**多轨道视频**部分下，选中**启用多轨道视频**。

1. 在**视频**面板中，设置所需的**基础（画布分辨率）**和**输出（缩放）分辨率**。IVS 实时直播功能支持高达 720p 的输入。如果超出此限制，则流将断开连接。

   启用多轨道视频后，视频轨道数量、比特率和关键帧间隔等设置将根据设备的功能自动配置。

1. 选择**开始流式传输**。

### 使用 FFFmpeg 发布
<a name="rtmp-multitrack-ffmpeg"></a>

您可以使用 FFmpeg 将实时视频和音频发布到通过 RTMP 传输的 IVS 实时流媒体中。FFmpeg 是一个免费的开源项目，包括一个全面的软件库和工具，用于处理视频、音频以及其他多媒体内容。

以下示例命令发布包含颜色图案和色调的流：

```
ffmpeg \
 -re \
 -f lavfi -i testsrc=d=300:s=1280x720:r=60,format=yuv420p \
 -f lavfi -i sine=f=440:b=4:d=300 \
 -c:v libx264 \
 -b:v 2500k \
 -g 60 -bf 0 \
 -profile:v baseline \
 -preset veryfast \
 -tune zerolatency \
 -x264opts sliced-threads=0 \
 -c:a aac \
 -ac 2 \
 -b:a 160k \
 -ar 48000 \
 -f flv \
 rtmps://$INGEST_ENDPOINT/app/$STREAM_KEY
```

在示例中，用 IVS 控制台或 API 中您自己的值替换 `$INGEST_ENDPOINT` 和 `$STREAM_KEY`。

此配置符合 IVS 实时流媒体的[支持的媒体规范](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-stream-ingest.html#supported-media-specifications)，包括 H.264 视频（基准配置文件、无 B 帧、无切片线程）和 AAC 音频。

## 私有摄取到舞台
<a name="private-ingest-stages"></a>

您可以使用接口 VPC 端点将 RTMP(S) 和 E-RTMP(S) 流从 Amazon VPC 内的资源或从 Direct Connect 发布到舞台。这样就可以在您的 VPC 和 IVS 之间建立私有连接，确保摄取流量位于 AWS 网络内。要为 IVS 设置和配置接口 VPC 端点，请参阅《IVS 低延迟直播用户指南》中的 [IVS 私有摄取](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/private-ingest-ll.html)**。

# IVS WHIP 发布 \$1 实时直播功能
<a name="obs-whip-support"></a>

本文档说明如何使用与 WHIP 兼容的编码器（如 OBS）发布到 IVS 实时直播功能。[WHIP](https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html)（WebRTC-HTTP 摄取协议）是为标准化 WebRTC 摄取而开发的 IETF 草案。

WHIP 与 OBS 等软件兼容，为桌面发布提供了另一种选择（替代 IVS 广播 SDK）。熟悉 OBS 的更精密的流传输工具可能会更喜欢这种选择，因为其具有高级制作功能，例如场景过渡、音频混音和图形叠加。这为开发人员提供了一个多功能选项：使用 IVS Web 广播 SDK 直接在浏览器中发布，或者允许主播在桌面上使用 OBS 来获得更强大的工具。

此外，在无法使用或不宜使用 IVS 广播 SDK 的情况下，WHIP 也很有用。例如，在涉及硬件编码器的情况下，可能无法选择 IVS 广播 SDK。但是，如果编码器支持 WHIP，您仍然可以直接从编码器发布到 IVS。

**WHIP 要求：**
+ 即使您只发布音频，您的 SDP 提议也必须包含 H.264 视频轨道。如果提议中不包含视频轨道，则连接将被拒绝。
+ 全局 WHIP 端点 (https://global.whip.live-video.net) 会返回 307 临时重定向。WHIP 客户端必须正确处理 307 重定向并在重定向请求中保留标头，正如 WHIP 规范所要求的那样。

## OBS 指南
<a name="whip-support-obs-guide"></a>

OBS 从版本 30 开始支持 WHIP。首先，下载 OBS v30 或更高版本：[https://obsproject.com/](https://obsproject.com/)。

要通过 WHIP 使用 OBS 发布到 IVS 暂存区，请执行以下步骤：

1. [生成](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started-distribute-tokens.html)具有发布功能的参与者令牌。在 WHIP 术语中，参与者令牌是一种不记名令牌。默认情况下，参与者令牌将在 12 小时后过期，但您可以将有效期延长至 14 天。

1. 单击**设置**。在**设置**面板的**流**部分，从**服务**下拉列表中选择 **WHIP**。

1. 对于**服务器**，输入 https://global.whip.live-video.net。

1. 对于**持有者令牌**，输入在步骤 1 中生成的参与者令牌。

1. 如常配置视频设置，但有一些限制：

   1. IVS 实时直播功能支持高达 720p 的输入，速度为 8.5 Mbps。如果超出这些限制，则流将断开连接。

   1. 建议在**输出**面板中将**关键帧间隔**设置为 1s 或 2s。较低的关键帧间隔可以让观众更快地开始视频播放。还建议将 **CPU 使用率预设**设置为 **veryfast**，将**调谐**设置为 **zerolatency**，以实现最低延迟。

   1. 由于 OBS 不支持联播，因此建议将比特率保持在 2.5 Mbps 以下。这样，使用较低带宽连接的观众也能观看。

1. 按**开始直播**。

**注意**：我们知道在 OBS 中使用 WHIP 可能会出现质量问题（例如间歇性视频冻结）。这些情况通常发生在播送设备的网络不稳定时。建议在将 WHIP 用于生产实时直播之前，先在 OBS 中对其进行测试。降低广播比特率也可能有助于减少这些问题的发生。