

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

# 使用带有 WebRTC 的 Amazon Kinesis Video Streams 来摄取和存储媒体
<a name="webrtc-ingestion"></a>

Amazon Kinesis Video Streams 支持通过 WebRTC 将视频和音频实时传输到云端进行存储、播放和分析处理。客户可以使用我们增强的WebRTC SDK和 APIs 云来实现实时流媒体以及向云端提取媒体。

首先，您可以在任何安全摄像头 AWS IoT 或带有视频传感器的设备上安装带有 [WebRTC SDK 的 Amazon Kinesis Vide](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c/tree/Release-WebRTC-Streams-Ingestion-Public-Preview) o Streams，然后使用[APIs](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams.html)我们的来启用延迟低于 1 秒的媒体流以及云端的摄取和存储。摄取后，您可以通过我们的 easy-to-use APIs网站访问您的数据。Amazon Kinesis Video Streams 使您能够播放用于直播和点播观看的视频，并通过与亚马逊 Rekognition Video 和 AI 集成，快速构建利用计算机视觉和视频 SageMaker 分析的应用程序。

**Topics**
+ [API 操作](#ingestion-apis)
+ [什么是带有 WebRTC 摄取和存储功能的 Amazon Kinesis Video Streams？](getting-started-ingestion.md)
+ [创建信令通道](ingestion-create-channel.md)
+ [创建视频流](ingestion-create-stream.md)
+ [授予权限](ingestion-grant-permission.md)
+ [配置目的地](configure-ingestion.md)
+ [提取媒体](ingest-media.md)
+ [播放摄取的媒体](ingestion-view-media.md)
+ [Connect 到存储会话](ingestion-initiate.md)
+ [解决与存储会话连接的问题](troubleshoot-establish-storage.md)

## API 操作
<a name="ingestion-apis"></a>

使用以下 API 操作配置 Amazon Kinesis Video Streams WebRTC 提取：
+ [DescribeMappedResourceConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMappedResourceConfiguration.html)
+ [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html)
+ [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)
+ [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)
+ [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html)

# 什么是带有 WebRTC 摄取和存储功能的 Amazon Kinesis Video Streams？
<a name="getting-started-ingestion"></a>

Amazon Kinesis Video Streams 支持通过 WebRTC 将视频和音频实时传输到云端进行存储、播放和分析处理。本主题将提供设置和使用我们的 WebRTC SDK 和 APIs 云端的 step-by-step说明，以实现云端的实时流媒体和媒体摄取。这些说明包括使用 AWS Command Line Interface 和 Kinesis Video Streams 控制台的指南。

首次使用 Amazon Kinesis Video Streams with WebRTC 前，请参阅 [设置一个 AWS 账户](set-up-account.md)。

## 了解 WebRTC 的摄取和存储
<a name="understanding-ingestion"></a>

以下各节说明了带有 WebRTC 的 Kinesis Video Streams 中可用的不同摄取和存储选项。

**Topics**
+ [仅限主参与者](#master-ptp-only)
+ [主人和观众参与者在一起](#master-viewer-ptp-together)

### 仅限主参与者
<a name="master-ptp-only"></a>

主学员首先通过 WebRTC 信令连接到 Kinesis Video Streams。[ConnectAsMaster](ConnectAsMaster.md)接下来，他们调用 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)API 让存储会话启动 WebRTC 连接。建立 WebRTC 连接后，媒体将被提取到配置的 Kinesis 视频流中。

![\[该图显示了主参与者、存储会话和直播之间的 WebRTC 摄取流程。\]](http://docs.aws.amazon.com/zh_cn/kinesisvideostreams-webrtc-dg/latest/devguide/images/ingestion-flow.png)


### 主人和观众参与者在一起
<a name="master-viewer-ptp-together"></a>

观众参与者首先通过 WebRTC 信令连接到 Kinesis Video Streams。[ConnectAsViewer](ConnectAsViewer.md)接下来，他们调用 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)API 让存储会话启动 WebRTC 连接。建立 WebRTC 连接后，只要主参与者在场，来自主参与者和所有观众参与者的组合媒体就会被收录到配置的 Kinesis 视频流中。

存储会话合并所有观看者参与者的音频并将其转发给主参与者。查看者参与者接收来自主参与者的组合媒体以及存储会话中来自任何其他查看者参与者的音频。

![\[该图显示了主参与者、存储会话、查看者参与者和直播之间的 WebRTC 摄取流程。\]](http://docs.aws.amazon.com/zh_cn/kinesisvideostreams-webrtc-dg/latest/devguide/images/ingestion-flow-with-viewer.png)


## 与存储会话建立 WebRTC 连接
<a name="ingestion-establish-connection"></a>

由于存储会话位于 Amazon 网络内，因此存储会话只会向参与者发送 `relay` (`TURN`) 候选会话。如果参与者的网络允许，则可以使用 `srflx` (`STUN`) 候选项连接到存储会话。换句话说，从参与者的角度来看，当地提名的移民局候选人可以是`srflx`或`relay`，而远程移民局候选人始终是`relay`。

要优化连接时间，请勿将`host`候选人发送到存储会话。还需要`Trickle ICE`使用存储会话。

[解决与存储会话连接的问题](troubleshoot-establish-storage.md)要解决与存储会话的连接问题，请参阅。

# 创建信令通道
<a name="ingestion-create-channel"></a>

带有 WebRTC 信令通道的 Kinesis Video Streams 可促进在 WebRTC 客户端之间建立和维护连接所需的信令消息交换。 peer-to-peer它处理会话描述协议 (SDP) 报价和会话参数答案的协商，以及交互式连接建立 (ICE) 候选网络信息的交换。

要创建信令通道，请调用 [CreateSignalingChannel](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_CreateSignalingChannel.html)API。本页将向您展示如何使用 AWS 管理控制台 AWS CLI、和其中一个来调用该 API AWS SDKs。

**重要**  
记下频道 ARN，稍后你会用到的。

------
#### [ AWS 管理控制台 ]

执行以下操作：

1. [在 HOME/\$1/Signal **ingChannels 上打开 Kinesis Video Streams 信令**频道控制台https://console.aws.amazon.com/kinesisvideo/。](https://console.aws.amazon.com//kinesisvideo/home/#/signalingChannels)

1. 选择 **Create signaling channel (创建信令通道)**。

1. 在**创建新的信令通道**页面上，输入信令通道的名称。

   将默认 **Time-to-live (Ttl)** 值保留为 60 秒。

   选择 **Create signaling channel (创建信令通道)**。

1. 一旦创建信令通道，在通道的详细信息页面上查看其详细信息。

------
#### [ AWS CLI ]

确认您已 AWS CLI 安装并配置了。有关更多信息，请参阅 [AWS Command Line Interface 《用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/)。

有关安装说明，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安装完成后， AWS CLI使用凭据和区域进行[配置](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

使用以下命令运行以下 [Create-Signaling-Channel](https://docs.aws.amazon.com//cli/latest/reference/kinesisvideo/create-signaling-channel.html) 命令： AWS CLI

```
aws kinesisvideo create-signaling-channel \
  --channel-name "YourChannelName" \
  --region "us-west-2"
```

响应看起来与以下内容类似：

```
{ 
    "ChannelARN": "arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123"
}
```

------
#### [ AWS SDK ]

此代码片段向您展示了如何使用适用于 v2 的 SDK 创建带有 WebRTC 信令通道的 Kinesis Video Streams。 AWS JavaScript 语法将与其他语法不同 AWS SDKs，但一般流程将相同。在上查看完整的代码示例[GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/createSignalingChannel.js)。

创建 Kinesis Video Streams 客户端。这是用于调用 `CreateSignalingChannel` API 的客户端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用客户端调用 `CreateSignalingChannel` API。

```
const createSignalingChannelResponse = await kinesisVideoClient
    .createSignalingChannel({
        ChannelName: 'YourChannelName',
    })
    .promise();
```

打印响应。

```
console.log(createSignalingChannelResponse.ChannelARN);
```

包含此代码示例的实时网页可在上使用[GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)。输入您的区域、 AWS 凭证和信令频道的名称。

选择**创建频道**。

------

# 创建视频流
<a name="ingestion-create-stream"></a>

按照以下步骤创建要接收媒体的流。如果您已经创建了目标流，请跳过此步骤。

**重要**  
WebRTC Ingestion 需要数据保留率大于 0 的 Kinesis 视频流。最短为 1 小时。

要创建直播，请使用 AWS 管理控制台 AWS CLI、或其中一个 AWS SDK 调用 [CreateStream](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_CreateStream.html)API。

**重要**  
记下直播 ARN，稍后你会用到的。

------
#### [ AWS 管理控制台 ]

执行以下操作：

1. 在家中打开 **Kinesis Video** Streams 控制[https://console.aws.amazon.com/kinesisvideo/台/。](https://console.aws.amazon.com//kinesisvideo/home/)

1. 在 **Video streams (视频流)** 页面上，选择 **Create video stream (创建视频流)**。

1. 在 “**创建新的视频流**” 页面上`YourStreamName`，输入直播名称。保持 “**默认配置**” 按钮处于选中状态。

   这将创建一个数据保留率大于 0 的流。

   选择 **Create video stream (创建视频流)**。

1. Kinesis Video Streams 创建直播后，请查看页面`YourStreamName`上的详细信息。

------
#### [ AWS CLI ]

确认您已 AWS CLI 安装并配置了。有关更多信息，请参阅 [AWS Command Line Interface 《用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/)。

有关安装说明，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安装完成后， AWS CLI使用凭据和区域进行[配置](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

使用以下`Create-Stream`命令运行以下命令 AWS CLI：

```
aws kinesisvideo create-stream \
  --stream-name "YourStreamName" \
  --data-retention-in-hours 24 \
  --region "us-west-2"
```

响应看起来与以下内容类似：

```
{
    "StreamARN": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/YourStreamName/1234567890123"
}
```

------
#### [ AWS SDK ]

此代码片段向您展示了如何使用 AWS 适用 JavaScript 于 v2 的软件开发工具包创建 Kinesis 视频流。语法将与其他语法不同 AWS SDKs，但一般流程将相同。在上查看完整的代码示例[GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/createStream.js)。

创建 Kinesis Video Streams 客户端。这是用于调用 [CreateStream](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_CreateStream.html)API 的客户端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用客户端调用 `CreateStream` API。

```
const createStreamResponse = await kinesisVideoClient
    .createStream({
        StreamName: 'YourStreamName',
        DataRetentionInHours: 48,
    })
    .promise();
```

打印响应。

```
console.log(createStreamResponse.StreamARN);
```

包含此代码示例的实时网页可在上使用[GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)。输入您的区域、 AWS 凭证和信令频道的名称。

**展开 **WebRTC 摄取和**存储节点，键入直播名称，然后选择创建流。**弹出窗口会询问您想要保留直播数据的小时数。输入一个大于 0 的值，然后选择**创建流**。

------

# 授予权限
<a name="ingestion-grant-permission"></a>

你必须向你的 IAM 角色授予直播权限才能通过 WebRTC 在 Amazon Kinesis Video Streams 中推送直播。

**注意**  
 服务角色是由一项服务担任、代表您执行操作的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

主角色和查看者角色还必须具有`DescribeStream``GetDataEndpoint`、以及向 Kinesis Video Streams 收录媒体的`PutMedia`权限。

请参阅下面针对主参与者的示例 IAM 政策：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesisvideo:DescribeSignalingChannel",
        "kinesisvideo:DescribeMediaStorageConfiguration",
        "kinesisvideo:GetSignalingChannelEndpoint",
        "kinesisvideo:GetIceServerConfig",
        "kinesisvideo:ConnectAsMaster",
        "kinesisvideo:JoinStorageSession"
      ],
      "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:channel/SignalingChannelName/1234567890123"
    },
    {
      "Effect": "Allow",
      "Action": [
        "kinesisvideo:GetDataEndpoint",
        "kinesisvideo:DescribeStream",
        "kinesisvideo:PutMedia"
      ],
      "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/VideoStreamName/1234567890123"
    }
  ]
}
```

------

# 配置目的地
<a name="configure-ingestion"></a>

创建 Kinesis Video Streams 资源后，你需要告诉信令频道将其保存到哪个直播中。

如果要删除信令频道或视频流，必须先将其取消关联。请参阅[取消信令频道和直播的关联](#ingest-unlink)。

## 链接信令频道和直播
<a name="ingestion-link"></a>

使用 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html)API 并输入要关联 ARNs 的 Kinesis Video Streams 资源。

**重要**  
启用后`StorageStatus`，将不再存在直接 peer-to-peer（主查看器）连接。对等方直接连接到存储会话。您必须调用 `JoinStorageSession` API 才能触发 SDP 报价发送并在对等方和存储会话之间建立连接。

------
#### [ AWS 管理控制台 ]

**注意**  
Kinesis Vid AWS 管理控制台 eo Streams 目前不支持此操作。

打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

按照 AWS CLI 选项卡中的说明进行操作。

------
#### [ AWS CLI ]

确认您已 AWS CLI 安装并配置了。有关更多信息，请参阅[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/) 文档。

有关安装说明，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安装完成后， AWS CLI使用凭据和区域进行[配置](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

在`Update-Media-Storage-Configuration`以下位置运行命令 AWS CLI：

```
aws kinesisvideo update-media-storage-configuration \
  --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
  --media-storage-configuration \
    StreamARN="arn:aws:kinesisvideo:us-west-2:123456789012:stream/YourStreamName/1234567890123",Status="ENABLED" \
  --region "us-west-2"
```

------
#### [ AWS SDK ]

此代码片段向您展示如何使用适用于 v2 的 SDK 配置信令通道以将媒体推送到指定的 Kinesis 视频流。 AWS JavaScript语法将与其他语法不同 AWS SDKs，但一般流程将相同。在上查看完整的代码示例[GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/updateMediaStorageConfiguration.js)。

创建 Kinesis Video Streams 客户端。这是用于调用 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html)API 的客户端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用客户端调用 `UpdateMediaStorageConfiguration` API。

```
await kinesisVideoClient
    .updateMediaStorageConfiguration({
        ChannelARN: 'YourChannelARN',
        MediaStorageConfiguration: {
            Status: 'ENABLED',
            StreamARN: 'YourStreamARN',
        },
    })
    .promise();
```

包含此代码示例的实时网页可在上使用[GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)。输入您的区域、 AWS 凭证和信令频道的名称。

**展开 **WebRTC 摄取和**存储节点，键入直播名称，然后选择更新媒体存储配置。**该频道将被配置为将媒体推送到指定流。

------

## 取消信令频道和直播的关联
<a name="ingest-unlink"></a>

**重要**  
只有取消信令频道或直播之间的关联，才能将其删除。

如果您不希望将信令频道的媒体提取到直播中，请使用 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html)API 取消关联 Kinesis Video Streams 资源。取消频道链接后，可以恢复直接 peer-to-peer连接。

------
#### [ AWS 管理控制台 ]

**注意**  
Kinesis Vid AWS 管理控制台 eo Streams 目前不支持此操作。

打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

按照 AWS CLI 选项卡中的说明进行操作。

------
#### [ AWS CLI ]

确认您已 AWS CLI 安装并配置了。有关更多信息，请参阅[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/) 文档。

有关安装说明，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安装完成后， AWS CLI使用凭据和区域进行[配置](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

或者，打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

在`Update-Media-Storage-Configuration`以下位置运行命令 AWS CLI：

```
aws kinesisvideo update-media-storage-configuration \
  --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
  --media-storage-configuration \
    StreamARN="null",Status="DISABLED" \
  --region "us-west-2"
```

------
#### [ AWS SDK ]

此代码片段向您展示如何使用适用于 v2 的 SDK 配置信令通道以将媒体推送到指定的 Kinesis 视频流。 AWS JavaScript语法将与其他语法不同 AWS SDKs，但一般流程将相同。在上查看完整的代码示例[GitHub](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/updateMediaStorageConfiguration.js)。

创建 Kinesis Video Streams 客户端。这是用于调用 [UpdateMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateMediaStorageConfiguration.html)API 的客户端。

```
const clientConfig = {
    accessKeyId: 'YourAccessKey',
    secretAccessKey: 'YourSecretKey',
    region: 'us-west-2'
};
const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
```

使用客户端调用 `UpdateMediaStorageConfiguration` API。

```
await kinesisVideoClient
    .updateMediaStorageConfiguration({
        ChannelARN: 'YourChannelARN',
        MediaStorageConfiguration: {
            Status: 'DISABLED',
            StreamARN: 'null',
        },
    })
    .promise();
```

包含此代码示例的实时网页可在上使用[GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)。输入您的区域、 AWS 凭证和信令频道的名称。

**展开 **WebRTC 摄取和**存储节点，验证 “**流名称” 字段是否为空，然后选择 “**更新媒体存储配置”。**该频道将不再配置为向指定直播推送媒体。

------

# 提取媒体
<a name="ingest-media"></a>

以下限制已到位：
+ **会话时长：**一小时，最大值
+ **信令通道：**启用存储配置后，每个账户最多 100 个

**Topics**
+ [从浏览器提取媒体](#ingest-browser)
+ [从 WebRTC C SDK 中提取媒体](#ingest-webrtc-sdk)
+ [将观众添加到摄取会话中](#ingest-add-viewers)

## 从浏览器提取媒体
<a name="ingest-browser"></a>

**重要**  
Chrome 是目前唯一支持的浏览器。

1. [在示例页面中打开带有 WebRTC SDK 的亚马逊 Kinesis Video Streams。 JavaScript ](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)

1. 完成以下信息：
   + **KVS 终端节点**-在 “**区域**” 字段中，选择您的区域。

     例如 `us-west-2`。
   + **AWS 凭据**

     填写以下字段：
     + **访问密钥 ID**
     + **秘密访问密钥**
     + **会话令牌**-示例应用程序支持临时和长期证书。如果您使用的是长期 IAM 凭证，请将此字段留空。有关更多信息，请参阅 [IAM 中的临时安全证书](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_temp.html)。
   + **信令信道**-在 “**信道名称**” 字段中，键入您之前配置的信令信道的名称。有关更多信息，请参阅 [配置目的地](configure-ingestion.md)。
   + **曲目**-选择 “**发送视频**” 和 “**发送音频**”。
   + **WebRTC 摄取和存储-展开节点并****选择 “自动确定摄取模式”。**此选项使示例应用程序调用 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html)API 以确定在哪种模式下运行。

1. 选择**启动主设备**。

   如果使用 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html)API 将信令通道配置为摄取，则示例应用程序将在连接到信令通道后立即自动调用 [JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)API 以启动 WebRTC 摄取工作流程。

## 从 WebRTC C SDK 中提取媒体
<a name="ingest-webrtc-sdk"></a>

按照 [亚马逊 Kinesis Video Streams 带有 WebRTC 开发工具包的 C 语言版本，适用于嵌入式设备](kvswebrtc-sdk-c.md) 过程生成示例应用程序。

1. 使用您的 AWS 账户 凭据设置您的环境：

   ```
   export AWS_ACCESS_KEY_ID=YourAccessKey
   export AWS_SECRET_ACCESS_KEY=YourSecretKey
   export AWS_DEFAULT_REGION=YourAWSRegion
   ```

   如果您使用的是临时 AWS 证书，请同时导出您的会话令牌：

   ```
   export AWS_SESSION_TOKEN=YourSessionToken
   ```

1. 运行示例：

   **主示例**

   导航到该`build`文件夹，并使用 “1” 作为第二个参数。类型：

   ```
   ./samples/kvsWebrtcClientMaster channel-name 1
   ```

   **GStreamer 主样本**

   导航到该`build`文件夹，然后使用 audio-video-storage “” 作为第二个参数。类型：

   ```
   ./samples/kvsWebrtcClientMasterGstSample channel-name audio-video-storage testsrc
   ```

这将启动 WebRTC 提取。

**注意**  
您提供的信令通道必须配置为用于存储。使用 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html)API 进行确认。

## 将观众添加到摄取会话中
<a name="ingest-add-viewers"></a>

信号通道进入WebRTC摄取模式后，观看者参与者将不再直接连接到主参与者。查看者参与者直接连接到存储会话。查看者参与者接收主参与者发送的媒体，观看者参与者可以向主参与者发送可选音频。只要主参与者已连接到存储会话，观众发回的任何音频都将发送给连接到存储会话并收录到 Kinesis Video Stream 的所有其他对等方。

以下限制已到位：
+ **最大观看人数：**3 
+ 在没有@@ **主参与者在场的情况下，查看者参与者可以连接到存储会话的最长时间：**3 分钟 

**重要**  
如果查看者断开与存储会话的连接（关闭对等连接），则其配额（查看者限制）将在 1 分钟内保持消耗。在这个 1 分钟内，查看者可以使用相同的客户端 ID 调用此 API 以重新加入会话，而无需消耗额外的观看者配额。1 分钟后，观众配额已释放，可供其他观众加入。

**浏览器**

**重要**  
Chrome 是唯一支持的浏览器。

1. [在示例页面中打开带有 WebRTC SDK 的亚马逊 Kinesis Video Streams 中的另一个选项卡。 JavaScript ](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)上一页的所有信息都将自动填充。如果不是，请填写以下信息：
   + **KVS 终端节点**-在 “**区域**” 字段中，选择您的区域。

     例如 `us-west-2`。
   + **AWS 凭据**

     填写以下字段：
     + **访问密钥 ID**
     + **秘密访问密钥**
     + **会话令牌**-示例应用程序支持临时和长期证书。如果您使用的是长期 IAM 凭证，请将此字段留空。有关更多信息，请参阅 [IAM 中的临时安全证书](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_temp.html)。
   + **信令信道**-在 “**信道名称**” 字段中，键入您之前配置的信令信道的名称。有关更多信息，请参阅 [配置目的地](configure-ingestion.md)。
   + **曲目**-选择 “**发送音频**”。请注意，如果选中 “**发送视频**”，则在选择 “**启动查看器**” 时将自动取消选中。
   + **WebRTC 摄取和存储-展开节点并****选择 “自动确定摄取模式”。**此选项使示例应用程序调用 [DescribeMediaStorageConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeMediaStorageConfiguration.html)API 以确定在哪种模式下运行。

1. 选择 “**启动查看器**”。

   应用程序在连接到信令通道后立即自动调用 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)API，以触发会话向查看者发送的 SDP 报价。

**注意**  
在 peer-to-peer WebRTC中，查看者参与者是控制对等方，主参与者是受控对等方。在 WebRTC 摄取模式下，存储会话现在是控制对等体。连接到信令并调用后 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)，查看者需要响应SDP报价，并通过WebRTC建立与存储会话的连接。

**注意**  
存储会话只会发送`TURN`候选人。从参与者的角度提名一对ICE候选人时，远程候选人将始终是类型`relay`的。

# 播放摄取的媒体
<a name="ingestion-view-media"></a>

您可以通过在控制台中查看媒体数据来使用媒体数据，也可以创建使用超文本直播 (HLS) 从流中读取媒体数据的应用程序。

## 在控制台中查看媒体
<a name="ingestion-view-media-console"></a>

在另一个浏览器选项卡中，打开 AWS 管理控制台。在 Kinesis Video Streams 控制面板[中，选择视频](https://us-west-2.console.aws.amazon.com/kinesisvideo/home?region=us-west-2#/streams)流。

在直播列表中选择您的直播名称。如有必要，请使用搜索栏。

展开 “**媒体播放**” 部分。如果视频仍在上传，则会显示。如果上传已完成，请选择左双箭头。

## 使用 HLS 使用媒体数据
<a name="ingestion-consume-hls"></a>

您可以使用 HLS 创建使用来自 Kinesis 视频流的数据的客户端应用程序。有关创建使用 HLS 消耗媒体数据的应用程序的信息，请参阅 [Kinesis Video Streams](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/how-playback.html) 播放。

## 使用示例媒体查看器应用程序查看媒体
<a name="ingestion-view-application"></a>

亚马逊 Kinesis Video Streams 创建了一个能够在 HLS 或 DASH 中播放 Kinesis Video Streams 的媒体查看器的示例网页实现。您可以查看源代码[GitHub](https://github.com/aws-samples/amazon-kinesis-video-streams-media-viewer)并尝试使用[托管网页](https://aws-samples.github.io/amazon-kinesis-video-streams-media-viewer/)。

1. 打开 [Amazon Kinesis Video Streams 媒体查看器](https://aws-samples.github.io/amazon-kinesis-video-streams-media-viewer/)。

1. 填写以下字段：
   + **区域**-选择 **us-west-2**。
   + **AWS 访问密钥**
   + **AWS 密钥**
   + **流名称**
   + **回放模式**-选择**直播**。

1. 选择**开始播放**。

# Connect 到存储会话
<a name="ingestion-initiate"></a>

按照以下步骤创建存储会话并启动 WebRTC 连接过程。主参与者应致电[JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)。观众参与者应致电[JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)。

这将使存储会话通过信号向通过连接的主参与者或通过连接的指定查看者参与者发送信号[ConnectAsMaster](ConnectAsMaster.md)，发送SDP报价和ICE候选人。[ConnectAsViewer](ConnectAsViewer.md)

1. 获取信令信道的 ARN，因为它是下一步的必填输入。如果您已经知道 ARN，请继续下一步。

------
#### [ AWS 管理控制台 ]

   1. 打开 [Kinesis Video Streams 信令频道控制台](https://console.aws.amazon.com//kinesisvideo/home/#/signalingChannels)。

   1. 选择您的信令频道的名称。

   1. 在**信令频道信息**选项卡下，找到您的信令频道的 ARN。

------
#### [ AWS CLI ]

   确认您已 AWS CLI 安装并配置了。有关更多信息，请参阅 [AWS Command Line Interface 《用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/)。

   有关安装说明，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安装完成后， AWS CLI使用凭据和区域进行[配置](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

   或者，打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   使用以下命令运行以下 D [escribe-Signaling-Channel](https://docs.aws.amazon.com//cli/latest/reference/kinesisvideo/describe-signaling-channel.html) 命令： AWS CLI

   ```
   aws kinesisvideo describe-signaling-channel \
     --channel-name "YourChannelName" \
   ```

   响应看起来与以下内容类似：

   ```
   {
       "ChannelInfo": {
           "ChannelName": "YourChannelName",
           "ChannelARN": "arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123",
           "ChannelType": "SINGLE_MASTER", 
           "ChannelStatus": "ACTIVE",
           "CreationTime": "2024-07-07T23:28:24.941000-07:00",
           "SingleMasterConfiguration": {
           "MessageTtlSeconds": 60
       },
       "Version": "Ws0fZvFGXzEpuZ2CE1s9"
       }
   }
   ```

   您将在对象中找到信令通道 ARN。`ChannelInfo`

------
#### [ AWS SDK ]

   此代码片段向您展示了如何使用适用于 v2 的 SDK 创建带有 WebRTC 信令通道的 Kinesis Video Streams。 AWS JavaScript 语法将与其他语法不同 AWS SDKs，但一般流程将相同。

   您可以查看[JoinStorageSession](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSession.js)或的完整代码示例[JoinStorageSessionAsViewer](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSessionAsViewer.js)。

   创建 Kinesis Video Streams 客户端。这用于调用 [DescribeSignalingChannel API](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeSignalingChannel.html)。

   ```
   const clientConfig = {
       accessKeyId: 'YourAccessKey',
       secretAccessKey: 'YourSecretKey',
       region: 'us-west-2'
   };
   const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
   ```

   使用客户端调用 `DescribeSignalingChannel` API。

   ```
   const describeSignalingChannelResponse = await kinesisVideoClient
       .describeSignalingChannel({
           ChannelName: 'YourChannelName',
       })
       .promise();
   ```

   保存响应。

   ```
   const channelARN =
       describeSignalingChannelResponse.ChannelInfo.ChannelARN;
   ```

------

1. 获取 WEBRTC 终端节点。必须向其指定端点发出[JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)对特定信令通道的请求[JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)或针对该信令通道的请求。

------
#### [ AWS 管理控制台 ]

**注意**  
Kinesis Vid AWS 管理控制台 eo Streams 目前不支持此操作。

   打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   按照 AWS CLI 选项卡中的说明进行操作。

------
#### [ AWS CLI ]

   确认您已 AWS CLI 安装并配置了。有关更多信息，请参阅[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/) 文档。

   有关安装说明，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安装完成后， AWS CLI使用凭据和区域进行[配置](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

   或者，打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   在`Get-Signaling-Channel-Endpoint`以下位置运行命令 AWS CLI：

   ```
   aws kinesisvideo get-signaling-channel-endpoint \
     --channel-arn "arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123" \
     --single-master-channel-endpoint-configuration "Protocols=['WEBRTC'],Role=MASTER" \
     --region "us-west-2"
   ```

   该响应应该类似于下列内容：

   ```
   {
       "ResourceEndpointList": [
           {
               "Protocol": "WEBRTC",
               "ResourceEndpoint": "https://w-abcd1234.kinesisvideo.aws-region.amazonaws.com"
           } 
       ]
   }
   ```

------
#### [ AWS SDK ]

   此代码片段向您展示了如何使用适用于 v2 的 SDK 调用带有 WebRTC 信令通道的 Kinesis Video Streams 的 `GetSignalingChannelEndpoint` API。 AWS JavaScript 语法将与其他语法不同 AWS SDKs，但一般流程将相同。查看[JoinStorageSession](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSession.js)或的完整代码示例[JoinStorageSessionAsViewer](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSessionAsViewer.js)。

   创建 Kinesis Video Streams 客户端。这是用于调用 [DescribeSignalingChannel API](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeSignalingChannel.html) 的客户端。

   如果您之前创建了 Kinesis Video Streams 客户端进行`DescribeSignalingChannel`调用，则可以重复使用同一个客户端。

   ```
   const clientConfig = {
       accessKeyId: 'YourAccessKey',
       secretAccessKey: 'YourSecretKey',
       region: 'us-west-2'
   };
   const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
   ```

   使用客户端调用 `GetSignalingChannelEndpoint` API。

   ```
   const getSignalingChannelEndpointResponse = await kinesisVideoClient
       .getSignalingChannelEndpoint({
           ChannelARN: channelARN,
           SingleMasterChannelEndpointConfiguration: {
               Protocols: ['WEBRTC'],
               Role: 'MASTER',
           },
       })
       .promise();
   ```

   保存响应：

   ```
   const webrtcEndpoint = getSignalingChannelEndpointResponse.ResourceEndpointList[0].ResourceEndpoint;
   ```

------

1. 使用频道 ARN 和 WEBRTC 端点进行 API 调用。如果参与者通过`ConnectAsMaster``ConnectAsViewer` WebSocket APIs或使用WebRTC信号正确连接到Kinesis Video Streams，则存储会话中将向参与者发送SDP优惠和ICE候选消息流。 WebSocket 

------
#### [ AWS 管理控制台 ]

**注意**  
Kinesis Vid AWS 管理控制台 eo Streams 目前不支持此操作。

   打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

   按照 AWS CLI 选项卡中的说明进行操作。

------
#### [ AWS CLI ]

   确认您已 AWS CLI 安装并配置了。有关更多信息，请参阅[AWS Command Line Interface](https://docs.aws.amazon.com//cli/latest/userguide/) 文档。

   有关安装说明，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。安装完成后， AWS CLI使用凭据和区域进行[配置](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new)。

   或者，打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息，请参阅 [AWS CloudShell 用户指南](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html#how-to-get-started)。

    AWS CLI 使用前面步骤中的频道 ARN 和 WEBRTC 端点为主参与者运行`Join-Storage-Session`命令：

   ```
   aws kinesis-video-webrtc-storage join-storage-session \
     --endpoint-url https://w-abcd1234.kinesisvideo.us-west-2.amazonaws.com \
     --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
     --region "us-west-2"
   ```

   成功运行后，返回空响应且不打印任何内容。

   如果是观众参与者，请 AWS CLI 使用之前的频道 ARN 和 WEBRTC 端点在中运行以下`Join-Storage-Session-As-Viewer`命令：

   ```
   aws kinesis-video-webrtc-storage join-storage-session-as-viewer \
     --endpoint-url https://w-abcd1234.kinesisvideo.us-west-2.amazonaws.com \
     --channel-arn arn:aws:kinesisvideo:us-west-2:123456789012:channel/YourChannelName/1234567890123 \
     --client-id "ExampleViewerClientID"
     --region "us-west-2"
   ```

   成功运行后，返回空响应且不打印任何内容。

------
#### [ AWS SDK ]

   此代码片段向您展示了如何使用适用于 v2 的软件开发工具包调用 Kinesis Video Streams 和 WebRTC 信令通道的 Kinesis Video Streams 的`JoinStorageSession`或 `JoinStorageSessionAsViewer` API。 AWS JavaScript 语法将与其他语法不同 AWS SDKs，但一般流程将相同。查看[JoinStorageSession](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSession.js)或的完整代码示例[JoinStorageSessionAsViewer](https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/joinStorageSessionAsViewer.js)。

   创建 Kinesis Video Streams WebRTC 存储客户端。这是用于调用`JoinStorageSession`或的客户端，`JoinStorageSessionAsViewer`与之前步骤中创建的 Kinesis Video Streams 客户端不同。

   ```
   const webrtcStorageClientConfig = {
       accessKeyId: 'YourAccessKey',
       secretAccessKey: 'YourSecretKey',
       region: 'us-west-2',
       endpoint: webrtcEndpoint
   };
   const kinesisVideoWebRTCStorageClient = new AWS.KinesisVideoWebRTCStorage(clientConfig);
   ```

   使用客户端为主参与者调用 `JoinStorageSession` API。

   ```
   await kinesisVideoWebRTCStorageClient
       .joinStorageSession({
           channelArn: channelARN,
       })
       .promise();
   ```

   如果是观看者参与者，则使用客户端调用 `JoinStorageSessionAsViewer` API。

   ```
   await kinesisVideoWebRTCStorageClient
       .joinStorageSessionAsViewer({
           channelArn: channelARN,
           clientId: "ExampleViewerClientID",
       })
       .promise();
   ```

   包含此代码示例的实时网页可在上找到[GitHub](https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html)。输入您的区域、 AWS 凭证和信令频道的名称。**展开 **WebRTC 摄取和存储节点，取消**选中自动确定摄取模式。**

   将手动覆盖切换为开**启**并选择**显示按钮以手动调用 JoinStorageSession API and/or ** **显示按钮来手动调用 JoinStorageSessionAsViewer API**。

   当您选择 “**启动主**服务器” 或 “**启动查看器**” 时，在应用程序通过`ConnectAsMaster`或连接到信令后`ConnectAsViewer`，将出现一个按钮，让存储会话启动与对等方的 WebRTC 连接，而不是应用程序在连接到信令后立即调用 API。

------

# 解决与存储会话连接的问题
<a name="troubleshoot-establish-storage"></a>

本节提供有关设置和配置用于录制视频流的存储空间的疑难解答指南。

**Topics**
+ [控制和控制同行](#troubleshoot-control-peers)
+ [查看支持的编解码器](#troubleshoot-review-codecs)
+ [如果频道未映射到直播，也会抛出 400 InvalidArgumentException](#troubleshoot-channel-mapping)

## 控制和控制同行
<a name="troubleshoot-control-peers"></a>

在WebRTC中，控制对等体通过发送SDP报价来启动与受控对等体的连接。对于 peer-to-peer会话，观看者参与者通过 Signaling 向主参与者发送报价来启动连接。连接到存储会话进行WebRTC摄取时，存储会话是控制对等体。对于主参与者，他们仍然是受控参与者。但是，观看者参与者会从控制切换到受控。

致电[JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)或时 [JoinStorageSessionAsViewer](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSessionAsViewer.html)，所有参与者都必须回复 SDP 答案，并与存储会话交换 ICE 候选人。

有关序列图，请参阅了解 WebRTC 摄取和存储。

**重要**  
从存储会话接收的信令消息在 JSON 中没有 senderClientId 字段，这与 peer-to-peer主服务器不同，后者总是接收带有 SDP 选件和 ICE 候选 senderClientId 字段。

## 查看支持的编解码器
<a name="troubleshoot-review-codecs"></a>

在[发送 SDP 答案](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/SendSdpAnswer.html)并与存储会话[交换 ICE 候选](https://docs.aws.amazon.com//kinesisvideostreams-webrtc-dg/latest/devguide/SendIceCandidate.html)内容时，我们建议在消息`correlationId`中包含 a。在消息`correlationId`中包含允许存储会话返回`statusResponse`消息。这些消息将包含输入消息`correlationId`中的内容，允许您跟踪该消息`statusResponse`属于哪条消息。这样，您就可以立即收到有关您的 SDP 答案被拒绝的原因的反馈。

有关 `correlationId` 和 `statusResponse` 的更多信息，请参阅 [异步消息接收](async-message-reception-api.md)。

存储会话可能拒绝 SDP 答案的一个常见原因是存储会话无法接受答案中指定的编解码器。示例`statusResponse`可能如下所示：

```
{
  "correlationId": "1700186220273",
  "errorType": "InvalidArgumentException",
  "statusCode": "400",
  "success": false
}
```

在查看 SDP 答案内容时，请查看以开头的行`a=rtpmap`并验证编解码器是否与存储会话支持的编解码器相匹配。以下是包含opus音频和视频的SDP示例答案的片段。 VP8 

```
...
a=rtpmap:111 opus/48000/2
...
a=rtpmap:120 VP8/90000
...
```

[JoinStorageSession](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_webrtc_JoinStorageSession.html)有关支持的编解码器的列表，请参阅。

## 如果频道未映射到直播，也会抛出 400 InvalidArgumentException
<a name="troubleshoot-channel-mapping"></a>

### 查看收发器使用方向
<a name="troubleshoot-transceiver-directions"></a>

在 SDP 答案中，查看视频和音频收发器的方向性。社民党中的台词是这样的：

```
a=sendrecv
a=recvonly
```

对于大师级学员，有以下要求：
+ H.264 视频：仅限发送
+ Opus 音频：sendonly 或 sendrecv

对于观众参与者，需要满足以下要求：
+ H.264 视频：recvonly
+ Opus 音频：recvonly 或 sendrecv

如果不满足服务要求，则如果在发送答案时提供了 correlationID，则 IllegalArgumentException 将返回值为 400 的 StatusResponse。

使用 KVS 提供的 WebRTC 摄取示例应用程序时：
+ 主参与者：确保 “发送视频” 和 “发送音频” 设置均已启用
+ 观看者参与者：确保禁用 “发送视频” 设置

### 查看 ICE 候选人转换
<a name="troubleshoot-ice-candidate-conversion"></a>

从 KVS Signaling SDK 接收 ICE 候选对象时，应用程序可能需要将字符串转换为 ICE 候选对象。

从存储会话中收到的 ICE 候选对象不包含 SDPMID 属性，也不带有。 senderClientId

查看您的应用程序逻辑，以便将从远程接收的 ICE 候选对象添加到应用程序的 C RTCPeer onnection 对象中。

### 查看 ICE 候选人排队逻辑
<a name="troubleshoot-ice-candidate-queuing"></a>

需要通过 addIceCandidate API 将从存储会话中收到的所有候选ICE添加到 RTCPeer连接中。

尽管存储会话在 ICE 候选人之前发送 SDP 报价，但由于信号消息传送的异步性质，应用程序可能会在接收 ICE 候选报价之前收到 ICE 候选报价。

在这种情况下，你需要实现一个临时缓冲区来存放 ICE 候选人。

KVS 示例应用程序中实现的逻辑如下所示：

1. 这些样本维护着 RTCPeer与其连接 senderClientId 的映射。

1. 这些样本保留了另一张地图，显示了 senderClientId 待处理的候选冰上候选人名单。

1. 收到移民局候选人后，请查看 PeerConnection 地图。如果 PeerConnection 地图还没有连接，请将其添加到待处理列表中。否则，请将 ICE 候选人添加到 PeerConnection。

1. 收到报价后，它会创建 RTCPeer连接并将其添加到 PeerConnection 地图中。然后，将待处理队列中的所有 ICE 候选人添加到此队列中 PeerConnection。