

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

# 使用 Amazon Chime SDK 会议
<a name="mtgs-sdk-mtgs"></a>

本部分中的主题介绍如何使用 Amazon Chime SDK 会议创建自定义会议应用程序。我们建议按所列顺序查看以下主题。

**Topics**
+ [迁移到 Amazon Chime SDK 会议命名空间](meeting-namespace-migration.md)
+ [使用 Amazon Chime SDK 会议的会议区域](chime-sdk-meetings-regions.md)
+ [使用 Amazon Chime SDK 创建会议](create-mtgs.md)
+ [选择在 Amazon Chime SDK 中使用的会议功能](js-meeting-features.md)
+ [Amazon Chime SDK 会议如何使用 WebRTC 媒体](webrtc-media.md)
+ [为 Amazon Chime SDK 会议配置视频编解码器](js-meeting-manage-codecs.md)
+ [为 Amazon Chime SDK 会议配置网络](network-config.md)
+ [了解 Amazon Chime SDK 会议生命周期事件](using-events.md)
+ [了解亚马逊 Chime 软件开发工具包会议的亚马逊 CloudWatch 指标](sdk-usage-metrics.md)
+ [创建 Amazon Chime SDK 媒体管道](media-pipelines.md)
+ [使用 Amazon Chime SDK 实时转录](meeting-transcription.md)
+ [在 Amazon Chime SDK 会议中使用媒体复制](media-replication.md)
+ [Amazon Chime SDK 会议的故障排除和调试](troubleshoot-sdk-meetings.md)

# 迁移到 Amazon Chime SDK 会议命名空间
<a name="meeting-namespace-migration"></a>

[Amazon Chime SDK Meetings 命名空间是创建和管理 Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)资源的专用场所。 APIs 您可以使用命名空间在 Amazon Chime SDK 会议 API 终端节点所在的任何 AWS 区域对其进行寻址。如果您刚开始使用 Amazon Chime SDK，则使用此命名空间。有关“区域”的更多信息，请参阅本指南中的 [Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)。

使用 [Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 命名空间的现有应用程序应计划迁移到专用命名空间，以便使用最新的 APIs 和功能。

**Topics**
+ [迁移原因](#migration-reasons)
+ [迁移之前](#before-migrating)
+ [命名空间之间的差异](#namespace-differences)

## 迁移原因
<a name="migration-reasons"></a>

出于以下原因，我们鼓励您迁移到 [Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间：

**选择 API 终端节点**  
Amazon Chime SDK 会议命名空间是唯一可以在任何[提供 API 终端节点的区域](https://docs.aws.amazon.com/chime-sdk/latest/dg/sdk-available-regions.html)中使用 API 终端节点的 API 命名空间。如果您想使用 `us-east-1` 以外的 API 终端节点，则必须使用 Amazon Chime SDK 会议命名空间。  
有关 Amazon Chime SDK 会议如何使用 AWS 区域的更多信息，请参阅本指南中的[会议区域](https://docs.aws.amazon.com/chime-sdk/latest/dg/chime-sdk-meetings-regions.html)。

**更新会议和新会议 APIs**  
我们只在 Amazon Chime SDK Meetings 命名空间 APIs 中添加或更新会议。

## 迁移之前
<a name="before-migrating"></a>

在迁移之前，记下命名空间之间的差异。下表列出并描述了以上差异。


|  | Amazon Chime SDK 会议命名空间 | Amazon Chime 命名空间 | 
| --- | --- | --- | 
| AWS SDK 名称空间 | Chime SDKMeetings | Chime | 
| 区域 | 多个 | 仅限 us-east-1 | 
| 端点 | https://meetings-chime.region.amazonaws.com | https://service.chime.aws.amazon.com | 
| 服务主体 | meetings.chime.amazonaws.com | chime.amazonaws.com | 
| APIs | 仅 APIs 适用于会议 | APIs 用于会议和 Amazon Chime 的其他部分 | 
| [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html) | ExternalMeetingId 和 MediaRegion 为必填。 | ExternalMeetingId 和 MediaRegion 是可选的。 | 
| [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeetingWithAttendees.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeetingWithAttendees.html) | ExternalMeetingId 和 MediaRegion 为必填。 | ExternalMeetingId 和 MediaRegion 是可选的。 | 
| ListMeetings | 不可用 | Available | 
| ExternalMeetingId | 验证包括模式匹配 | Available | 
| ExternalUserId | 验证包括模式匹配  | Available | 
| 会议标签 APIs | TagResource, UntagResource, ListTagsForResource | TagMeeting, UntagMeeting, ListMeetingTags | 
| 与会者标签 | 不可用 | Available | 
| 回声抑制 | Available | 不可用 | 
| 实时转录语言识别 | Available | 不可用 | 
| 与会者能力 | Available | 不可用 | 
| 媒体复制 | Available | 不可用 | 
| AppKeys 和 TenantIds | Available | 不可用 | 
| 媒体管道 | 媒体管道支持 Amazon Chime SDK 会议命名空间中的多个区域。有关更多信息，请参阅 [迁移到 Amazon Chime SDK 媒体管道命名空间](migrate-pipelines.md)。 | 通过 us-east-1 终端节点可用 | 
| SIP 媒体应用程序 | JoinChimeMeeting 操作需要 MeetingId | JoinChimeMeeting 操作不需要 MeetingId | 
|  **直接 SIP 集成**  | 不可用 | Available | 

## 命名空间之间的差异
<a name="namespace-differences"></a>

以下各节解释了 `Amazon Chime` 与 `Amazon Chime SDK Meetings` 命名空间之间的差异。

### AWS SDK 名称空间
<a name="namespace-diffs"></a>

Amazon Chime SDK 命名空间使用 `Chime` 正式名称。Amazon Chime SDK 会议命名空间使用 `ChimeSDKMeetings` 正式名称。名称的确切格式因平台而异。

例如，如果您在 Node.js 中使用 AWS SDK 创建会议，则使用一行代码来处理命名空间。

```
const chimeMeetings = AWS.Chime();
```

要迁移到 Amazon Chime 会议 SDK，使用新的命名空间和终端节点区域更新这行代码。

```
const chimeMeetings = AWS.ChimeSDKMeetings({ region: "eu-central-1" });
```

### 区域
<a name="region-diffs"></a>

[Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 命名空间只能寻址 us-east-1 区域的 API 终端节点。[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间可以在任何可用区域寻址 Amazon Chime SDK 会议 API 终端节点。有关会议区域的最新列表，请参阅本指南中的 [Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)。

### 了解如何查看、监控和管理 SageMaker 端点。
<a name="endpoint-diffs"></a>

[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间使用不同于 [Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 命名空间的 API 终端节点。

只能使用用于创建会议的终端节点对其进行修改。这意味着通过 EU-CENTRAL-1 中的终端节点创建的会议只能通过 EU-CENTRAL-1 进行修改。这也意味着您无法使用 `US-EAST-1` 中的 `ChimeSDKMeetings` 命名空间寻址通过 `Chime` 命名空间创建的会议。有关当前终端节点的更多信息，请参阅本指南中的 [API 映射](migrate-from-chm-namespace.md#name-end-map)。

### 服务主体
<a name="service-principal-diffs"></a>

[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间使用新的服务主体：`meetings.chime.amazonaws.com`。如果您有授予服务访问权限的 SQS、SNS 或其他 IAM 访问策略，则需要更新这些策略以授予新服务主体访问权限。

### APIs
<a name="api-diffs"></a>

[Amazon Chime 软件开发工具包会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间仅包含 APIs 用于创建和管理会议的内容。[Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 命名空间包括 APIs 用于会议和 Amazon Chime 服务的其他部分。

### CreateMeeting 必填字段
<a name="create-meeting-diffs"></a>

在 Amazon Chime 软件开发工具包会议命名空间中，[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html) 和 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html) APIs 需要指定`ExternalMeetingId`和`MediaRegion`字段。

### 外部 ID 值
<a name="external-id-diffs"></a>

[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间强制对可用于 `ExternalMeetingId` 和 `ExternalUserId` 的值进行额外验证。

### 回声抑制
<a name="echo-reduction-diffs"></a>

[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间提供基于机器学习的回声抑制功能，以帮助防止噪音和来自本地扬声器的声音重新传入会议。有关更多信息， GitHub 请参阅上的指南。

### 与会者能力
<a name="capabilities-diffs"></a>

[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间提供对会议中与会者发送和接收音频、视频和内容等功能的精细控制。

### 媒体复制
<a name="media-replication-diffs"></a>

[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间提供媒体复制，可将主会议链接到副本会议，使多达 10,000 人参与实时会话。连接到副本会话的参与者会接收连接至主会话的主讲人的媒体，但他们可以被升级到主会议。有关更多信息，请参阅本指南中的 [在 Amazon Chime SDK 会议中使用媒体复制](media-replication.md)。

### AppKeys 和 TenantIds
<a name="app-keys-diffs"></a>

[Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间提供了一种限制网络对特定 Amazon Chime SDK 会议访问的方法。有关更多信息，请参阅本指南中的 [Amazon Chime IDs 软件开发工具包的使用 AppKeys 和租户](app-keys-tenant-ids.md)。

### 媒体管道
<a name="media-pipe-diffs"></a>

[Amazon Chime SDK 媒体管道可与任何会议终端节点创建的会议配合使用，无论是使用 [Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)，还是使用 Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 命名空间。有关媒体管道区域的最新列表，请参阅[可用区域](https://docs.aws.amazon.com/chime-sdk/latest/dg/sdk-available-regions.html)。

### SIP 媒体应用程序
<a name="sip-app-diffs"></a>

[Amazon Chime SDK SIP 媒体应用程序可与任何会议终端节点创建的会议配合使用，无论是使用 [Amazon Chime SDK 会议](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)，还是使用 Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 命名空间。在通过 Amazon Chime SDK 会议命名空间创建的会议中使用 SIP 媒体应用程序时，[JoinChimeMeeting](join-chime-meeting.md) 操作需要 `MeetingId` 参数。

### 额外 APIs
<a name="additional-api-diffs"></a>

Meetings 命名空间的 APIs 列表越来越多 Chime 命名空间所没有的列表。如果您刚开始使用 Amazon Chime SDK，请使用会议命名空间访问最新功能。

# 使用 Amazon Chime SDK 会议的会议区域
<a name="chime-sdk-meetings-regions"></a>

Amazon Chime SDK 会议具有*控制*区域和*媒体*区域。控制区域提供用于创建、更新和删除会议的 API 终端节点。媒体区域主持实际会议。

通常，您的应用程序服务使用 [AWS SDK](https://aws.amazon.com/tools/) 对控制区域进行[签名和调用](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) APIs 。您的应用程序客户端使用适用于 [JavaScript](js-sdk-intro.md)iO [S](sdk-for-ios.md) 或 [Andro](sdk-for-android.md) id 的 Amazon Chime 软件开发工具包客户端库连接到媒体区域的会议。

控制区域可以在同一 AWS 分区内的任何媒体区域中创建会议。但是，您只能在用于创建会议的控制区域中更新会议。要查找离客户最近的媒体区域，请致电 [https://nearest-media-region.l.chime.aw](https://nearest-media-region.l.chime.aws) s。

会议控制[区域中的会议活动](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html#sdk-events)，例如`AttendeeJoined`通话[EventBridge、亚马逊简单队列服务 (SQS) 或亚马逊简单通知服务 (SNS) Simple Notification](https://docs.aws.amazon.com/chime-sdk/latest/dg/mtgs-sdk-notifications.html) Service。

 有关可用的 Amazon Chime SDK 会议控制和媒体区域的列表，请参阅本指南中的 [Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)。

此图表显示了通过控制区域和媒体区域的典型数据流。

![\[显示通过 Amazon Chime SDK 控制区域和媒体区域的数据流的图表。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/control-media-regions.png)


## 选择控制区域
<a name="choose-meeting-region"></a>

在为 Amazon Chime SDK 会议选择控制区域时，请记住以下因素：
+ **监管要求**。您的应用程序是否需要在地缘政治边界内，或者使用带有 FIPS 140-2 验证的加密模块的终端节点？
+ **API 延迟**。使用离应用程序服务区域最近的控制 AWS 区域可以帮助减少 APIs “网络延迟”。反过来，这有助于减少创建会议所需的时间，让用户更快地加入会议。
+ **高可用性**。您可以使用多个控制区域来实现高可用性架构。但是，每个控制区域都是独立运行的。而且，您只能在用于创建会议的控制区域中更新会议。此外，您必须使用同一区域使用[亚马逊简单队列服务 (SQS) 或亚马逊简单通知服务 (SNS) Simple Notification S](https://docs.aws.amazon.com/chime-sdk/latest/dg/mtgs-sdk-notifications.html) ervice 来处理会议活动。 EventBridge

## 选择媒体区域
<a name="choose-media-region"></a>

**注意**  
我们建议您始终在 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html) API 操作的 `MediaRegion` 参数中指定一个值。有关“区域”的更多信息，请参阅 [Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)。

在为您的 Amazon Chime SDK 会议选择媒体区域时，考虑以下常见因素：

**监管要求**  
如果您的 Amazon Chime SDK 会议需要根据法规要求在地缘政治边界内托管，则考虑根据固定的应用程序逻辑对会议区域进行硬编码。  
例如，远程医疗应用程序可能需要将所有会议托管在执业医生的管辖范围内。如果应用程序支持位于欧洲和美国的诊所，则您可以通过每家诊所的地址选择其管辖范围内的区域。

**会议质量**  
在媒体区域托管 Amazon Chime SDK 会议时，每个与会者的音频和视频都从该地区发送和接收。随着与会者与区域之间距离的增加，会议质量可能会受到网络延迟的影响。为您的 Amazon Chime SDK 会议指定区域有助于提高与会者的会议质量，无论他们彼此靠近还是分布在不同的地理位置。

您可以使用以下任一方法为 Amazon Chime SDK 会议选择媒体区域：

**对媒体区域进行硬编码**  
如果您的 Amazon Chime SDK 会议全部在特定 AWS 区域托管，则建议采用这种方法。

**选择最近的媒体区域**  
如果您的 Amazon Chime SDK 会议与会者处于同一 AWS 区域，但您的会议在不同区域托管，则建议采用这种方法。

## 查找最近的媒体区域
<a name="choose-nearest-media-region"></a>

要查找能够举办 Amazon Chime SDK 会议的最近媒体区域，请致电 [https://nearest-media-region](https://nearest-media-region.l.chime.aws).l.chime.aws。此终端节点返回单个区域，例如 `{"region": "us-west-2"}`。从您的客户端应用程序中调用 URL 标识距离用户最近的区域，然后使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html) API 的 `MediaRegion` 参数中的结果在该区域创建会议。

通常在客户端应用程序启动或其网络连接更改时调用 URL。通过预先确定最近的区域，可以避免在创建会议时增加调用的延迟。

## 寻找最近的 AWS GovCloud （美国）媒体区域
<a name="choose-gov-cloud-region"></a>

要查找可以举办 Amazon Chime SDK 会议的最近 AWS GovCloud （美国）地区，请致电 [https://nearest-us-gov-media](https://nearest-us-gov-media-region.l.chime.aws)-region.l.chime.aws。此终端节点返回最近区域，例如 `{"region": "us-gov-west-1"}`。从您的客户端应用程序中调用 URL 以确定最接近用户的 AWS GovCloud （美国），然后使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html)API `MediaRegion` 参数中的结果在该区域创建会议。

通常在客户端应用程序启动或其网络连接更改时调用 URL。通过预先确定最近的区域，可以避免在创建会议时增加调用的延迟。

## JavaScript 示例
<a name="region-javascript"></a>

以下示例使用 HTML 和 JavaScript 返回最近的媒体区域和 AWS GovCloud （美国）媒体区域。

```
<html>
<head>
  <title>Amazon Chime SDK - Nearest Media Region</title>
  <script>

async function getNearestMediaRegion(partition)  {

    console.log('Nearest media region partition: ' + partition);

    const url = ('aws-us-gov' == partition) ? 'https://nearest-us-gov-media-region.l.chime.aws' : 'https://nearest-media-region.l.chime.aws';
    let result = ('aws-us-gov' == partition) ? 'us-gov-west-1' : 'us-west-2';

    try { //Find the nearest media region
        console.log('Nearest media region URL: ' + url);
        const response = await fetch(url, {method: 'GET'} );
        const body = await response.json();
        result = body.region;
    } catch (error) {
        console.log(error.message);
    } finally {
        console.log('Nearest media region found: ' + result);
        return result;
    }
}

async function findRegions(partition) {
  aws.innerText = await getNearestMediaRegion();
  awsusgov.innerText = await getNearestMediaRegion('aws-us-gov');
}
  </script>
</head>
<body>
  <h3>Nearest media region, by AWS partition</h3>
  <table>
    <tr><th>Partition</th><th>Media Region</th></tr>
    <tr><td>aws</td><td id="aws">Finding...</td></tr>
    <tr><td>aws-us-gov</td><td id="awsusgov">Finding...</td></tr>
  </table>
  <script>
    findRegions();
  </script>
</body>
</html>
```

## 检查区域状态
<a name="region-status"></a>

登录 [https://region.status.chime.aws/](https://region.status.chime.aws/) 检索每个区域中 Amazon Chime SDK 服务的运行状况。结果显示推荐区域。如果媒体区域的状态不是**推荐**，则最近的媒体区域终端节点将不会返回该区域。

以下示例显示典型结果。

```
{
  "MeetingsControlRegions": {
    "us-east-1": "recommended",
    "us-west-2": "recommended",
    "eu-central-1": "recommended",
    "eu-west-2": "recommended",
    "ap-south-1": "recommended",
    "ap-southeast-1": "recommended",
    "ap-southeast-2": "recommended",
    "ap-northeast-1": "recommended",
    "ap-northeast-2": "recommended",
    "il-central-1": "recommended",
    "ca-central-1": "recommended",
    "af-south-1": "recommended"
  },
  "MeetingsMediaRegions": {
    "af-south-1": "recommended",
    "ap-northeast-1": "recommended",
    "ap-northeast-2": "recommended",
    "ap-south-1": "recommended",
    "ap-southeast-1": "recommended",
    "ap-southeast-2": "recommended",
    "ca-central-1": "recommended",
    "eu-central-1": "recommended",
    "eu-north-1": "recommended",
    "eu-south-1": "recommended",
    "eu-west-1": "recommended",
    "eu-west-2": "recommended",
    "eu-west-3": "recommended",
    "sa-east-1": "recommended",
    "us-east-1": "recommended",
    "us-west-2": "recommended",
    "us-east-2": "recommended",
    "us-west-1": "recommended",
    "il-central-1": "recommended"
  },
  "MediaPipelineControlRegions": {
    "us-east-1": "recommended",
    "us-west-2": "recommended",
    "eu-central-1": "recommended",
    "eu-west-2": "recommended",
    "ap-south-1": "recommended",
    "ap-southeast-1": "recommended",
    "ap-southeast-2": "recommended",
    "ap-northeast-1": "recommended",
    "ap-northeast-2": "recommended",
    "ca-central-1": "recommended"
  },
  "MediaPipelineDataRegions": {
    "af-south-1": "recommended",
    "ap-northeast-1": "recommended",
    "ap-northeast-2": "recommended",
    "ap-south-1": "recommended",
    "ap-southeast-1": "recommended",
    "ap-southeast-2": "recommended",
    "ca-central-1": "recommended",
    "eu-central-1": "recommended",
    "eu-north-1": "recommended",
    "eu-south-1": "recommended",
    "eu-west-1": "recommended",
    "eu-west-2": "recommended",
    "eu-west-3": "recommended",
    "sa-east-1": "recommended",
    "us-east-1": "recommended",
    "us-west-2": "recommended",
    "us-east-2": "recommended",
    "us-west-1": "recommended"
  }
}
```

# 使用 Amazon Chime SDK 创建会议
<a name="create-mtgs"></a>

以下程序演示如何为服务器和客户端应用程序创建带有音频和视频的会议。开始之前，您必须将您的客户端应用程序与 Amazon Chime SDK 客户端库集成。有关更多信息，请参阅[了解 Amazon Chime SDK 客户端库](mtgs-sdk-client-lib.md)。

**创建带有音频和视频的会议**

1. 通过服务器应用程序完成以下步骤：

   1. 使用 *Amazon Chime SDK API 参考*中的 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html) API 操作创建会议。使用`MediaRegion`参数指定 AWS 区域。有关选择会议区域的更多信息，请参阅 [会议区域](sdk-available-regions.md#sdk-meeting-regions)。

   1. 使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateAttendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateAttendee.html) API 操作或 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_BatchCreateAttendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_BatchCreateAttendee.html) API 操作将与会者添加到会议中。将会议和与会者从您的服务器应用程序安全转移至经授权的客户端，作为相应与会者。有关会议和与会者的更多信息，请参阅《Amazon Chime SDK API 参考》**中的 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_Meeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_Meeting.html) 和 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_Attendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_Attendee.html)。

1. 通过客户端应用程序完成以下步骤：

   1. 使用 Amazon Chime SDK 客户端库构造 `MeetingSessionConfiguration` 对象。使用前面步骤中的会议和与会者信息。

   1. 实施 `AudioVideoObserver` 接口。

   1. 使用 `MeetingSessionConfiguration` 创建 `MeetingSession`。

   1. 使用 `MeetingSession` 中的 `AudioVideoFacade` 控制实时媒体。

      1. 注册 `AudioVideoObserver` 接口的实例。这使您能够在会议状态发生变化时接收事件。

      1. 为音频输入、音频输出和视频输入选择初始设备。

      1. 开始视听会话。

      1. 当用户想要共享视频时，开始本地视频捕获。

      1. 要显示视频磁贴，在客户端应用程序中管理视频磁贴事件，并将这些磁贴绑定至视频表面。

      1. 管理其他用户互动，例如静音和取消静音，或者开始和停止本地视频捕获。

      1. 要离开会议，停止视听会话。

   1. （可选）使用 `MeetingSession` 中的 `AudioVideoFacade` 与其他客户端共享媒体内容，例如屏幕截图等。

      1. 启动屏幕共享会话。内容以其他与会者形式加入会议。

      1. 要显示共享内容，在客户端应用程序中管理视频磁贴事件，并将这些磁贴绑定至表面。

      1. 管理其他互动，例如暂停、重启或停止内容共享。

当您运行 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteMeeting.html) API 操作时，会议结束。此外，会议会在以下情况下自动结束：
+ 会议时间超过 24 小时。
+ 会议属于[副本会议](media-replication.md)，且主会议结束。
+ 在非副本会议中，五分钟内没有与会者连接。

# 选择在 Amazon Chime SDK 中使用的会议功能
<a name="js-meeting-features"></a>

在调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html) API 时，可以指定向加入会话的客户端提供的功能。请注意，某些功能选项会产生额外费用。

会话具有以下功能：
+ `Audio.EchoReduction` - 机器学习回声抑制。
+ `Video.MaxResolution` - 最大网络摄像头视频分辨率。
+ `Content.MaxResolution` - 最大内容共享分辨率。
+ `Attendees.MaxCount` - 最大参与者人数。

**Topics**
+ [使用音频。 EchoReduction](#audio-echo-reduction)
+ [使用视频。 MaxResolution](#video-max-resolution)
+ [使用内容。 MaxResolution](#js-content-resolution)
+ [使用与会者。 MaxCount](#js-max-attendees)
+ [在客户端应用程序中使用会议功能](#meeting-features-client-app)

## 使用音频。 EchoReduction
<a name="audio-echo-reduction"></a>

可使用 `Audio.EchoReduction` 帮助防止用户扬声器发出的声音传回会议中。

回声抑制非常适合用户的扬声器将成为会议音频的主要输出设备的情况。例如，当多个用户在会议室中使用同一台设备参加会议时，或者当单个远程参与者没有佩戴耳机时。

回声减少功能可在 JavaScript 和 React 客户端库中使用。有关更多信息，请参阅中的[文档 GitHub](https://aws.github.io/amazon-chime-sdk-js/modules/amazonvoice_focus.html#what-is-echo-reduction)。需要支付额外费用，有关详细信息，请参阅 [Amazon Chime SDK 定价页面](https://aws.amazon.com/chime/chime-sdk/pricing/)。

## 使用视频。 MaxResolution
<a name="video-max-resolution"></a>

可使用 `Video.MaxResolution` 指定会议的最大网络摄像头视频分辨率。此功能提供以下选项：
+ `None`：不允许摄像头视频
+ `HD`：高清摄像头视频 (1280x720p)
+ `FHD`: full-high-definition 摄像机视频 (1920x1080)

如果请求 FHD (1080p) 视频，则会创建高清 WebRTC 会话。有关详细信息，请参阅 [Amazon Chime SDK 定价页面](https://aws.amazon.com/chime/chime-sdk/pricing/)。

如果客户端尝试发送超过指定最大值的网络摄像头视频，则该服务会拒绝此视频并发送以下错误：

`Disabled video/content send capability, reason: Video resolution is above limit of current meeting feature selection.`

## 使用内容。 MaxResolution
<a name="js-content-resolution"></a>

可使用 `Content.MaxResolution` 指定会议的最大内容共享分辨率。此功能提供以下选项：
+ `None`：不允许内容共享
+ `FHD`: full-high-definition 内容共享 (1920x1080)
+ `UHD`: ultra-high-definition 内容共享 (3840x2160)

如果请求 UHD (4K) 内容，则会创建高清 WebRTC 会话。

如果客户端尝试发送超过最大分辨率的内容共享，则共享内容的分辨率将被缩减至指定的最大分辨率。可以通过将 `MediaTrackConstraints` 应用于内容共享轨道进行扩缩。以下示例显示了如何扩缩共享轨道。

```
const constraint: MediaTrackConstraints = {
    width: { ideal: videoQualitySettings.videoWidth },
    height: { ideal: videoQualitySettings.videoHeight },
    frameRate: { ideal: videoQualitySettings.videoFrameRate },
  };
  this.context.logger.info(
    `Video track (content = ${isContentAttendee}) with constraint: ${JSON.stringify(
      constraint
    )}, trackSettings: ${JSON.stringify(trackSettings)}`
  );
  try {
    await mediaStreamTrack.applyConstraints(constraint);
  } catch (error) {
    this.context.logger.info(
      `Could not apply constraint for video track (content = ${isContentAttendee})`
    );
  }
```

下表显示了预期的内容共享行为。


| 内容功能 | 内容共享原生分辨率 | 扩展 | 内容编码分辨率 | 
| --- | --- | --- | --- | 
|  FHD | 1280x720  | 否 | 1280x720 | 
| FHD | 1920x1080 | 否 | 1920x1080 | 
| FHD | 3840x2160 | 是 | 1920x1080 | 
| UHD | 1920x1080 | 否 | 1920x1080 | 
| UHD | 3840x2160 | 否 | 3840x2160 | 
| UHD | 4200x2400 | 是 | 3780x2160 | 

## 使用与会者。 MaxCount
<a name="js-max-attendees"></a>

可使用 `Attendee.MaxCount` 指定允许加入会议的最大参与者人数。参加者的上限。 MaxCount 取决于会话类型。对于标准会话，最多可以选择 250 名参与者。对于高清会话，最多*只能* 选择 25 名参与者。

如果请求 FHD (1080p) 视频或 UHD (4K) 内容，会话将是高清会话。

高清会话需要支付参与者容量费用。有关详细信息，请参阅 [Amazon Chime SDK 定价页面](https://aws.amazon.com/chime/chime-sdk/pricing/)。

## 在客户端应用程序中使用会议功能
<a name="meeting-features-client-app"></a>



### 创建具有指定功能的会议
<a name="js-create-meetings-sdk-namespace"></a>

要创建会议，请调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html) API 并指定所需的会议功能。以下示例演示了如何指定所有功能。

```
// You must migrate to the Amazon Chime SDK Meetings namespace.
const chime = AWS.ChimeSDKMeetings({ region: "eu-central-1" });

// Create meeting 
const meetingInfo = await chime.createMeeting({
    ...
    MeetingFeatures: {
      Audio: {
        EchoReduction: 'AVAILABLE' 
      },
      Video: {
        MaxResolution: 'FHD' 
      },
      Content: {
        MaxResolution: 'UHD' 
      },
      Attendee: {
        MaxCount: 25 
      },
    } 
  }).promise();
```

### 在客户端使用会议功能
<a name="js-client-level"></a>

创建具有所需功能的会议后，可以在创建 `MeetingSessionConfiguration` 对象时将这些功能传入 `joinInfo` 中。会议功能在创建 `meetingSession` 时用于设置网络摄像头视频分辨率和比特率，以及内容共享分辨率和比特率。

```
const configuration = new MeetingSessionConfiguration(this.joinInfo.Meeting, this.joinInfo.Attendee);

this.meetingSession = new DefaultMeetingSession(
    configuration,
    this.meetingLogger,
    this.deviceController,
    new DefaultEventController(configuration, this.meetingLogger, this.eventReporter)
);
```

# Amazon Chime SDK 会议如何使用 WebRTC 媒体
<a name="webrtc-media"></a>

Amazon Chime SDK 支持两种类型的 WebRTC 会话：标准和高清。以下主题描述了使用适用于 React JavaScript、iOS 和 Android 的 Amazon Chime SDK 客户端库时每种会话中可用的媒体。

**Topics**
+ [音频](#webrtc-audio)
+ [视频](#video)
+ [内容共享](#content-share)
+ [数据消息](#data-messages)

## 音频
<a name="webrtc-audio"></a>

每个 Amazon Chime 客户端向会话发送一个音频流，并从会话接收一个音频流。通常，本地设备上的麦克风会生成音频。接收到的音频是从其他会话客户端发送的音频的混合。

两个会话都支持高达 48 kHz 的采样率和最多 2 个通道（立体声），使用 Opus 编解码器进行编码，比特率最高可达 128 Kbps。但是，发送和接收的音频流因客户端库类型而有所区别：
+ 适用于 React 的 Amazon Chime SDK 客户端库支持以 JavaScript 设备和浏览器支持的最高采样率（最高 48kHz）发送和接收单声道和立体声音频。
+ 适用于 iOS 和安卓的 Amazon Chime SDK 客户端库支持发送高达 48kHz 的单声道音频和接收 48kHz 的立体声音频。

## 视频
<a name="video"></a>

每个 Amazon Chime 客户端都可向会话发送一个视频流，并从会话接收最多 25 个视频流。发送的视频通常来自本地设备的摄像头。每个客户端最多可以选择接收 25 个视频流，并可在会话期间随时更改选择。

标准会话支持视频分辨率高达 1280x720，每秒 30 帧，使用高达 1500kbps 的比特率编码，使用 H.264、、和。 VP8 VP9 AV1

高清会话支持高达 1920x1080 的视频分辨率，每秒 30 帧，使用高达 2500kbps 的比特率编码，使用 H.264、、和。 VP8 VP9 AV1

适用于 React 的 Amazon Chime SDK 客户端库支持以 JavaScript 每秒 15 帧的速度在联播中发送视频，或者使用可扩展视频编码 (SVC) 发送视频。SVC 以 100%、50% 和 25% 的目标值对具有三个空间层和三个时间层的单个视频流进行编码。此服务会根据观看者的可用带宽自动选择要发送给每位观看者的层。

适用于 iOS 和 Android 的 Amazon Chime SDK 客户端库支持每秒最多发送 15 帧。但是，实际的帧速率和分辨率由 Amazon Chime SDK 自动管理。

视频编码和解码在可用情况下使用硬件加速来提高性能。

 如果客户端发送其比特率大于允许的最大比特率的视频，则会话将首先通过实时控制协议开始向客户端发送接收器估计的最大比特率消息。如果客户端继续发送比特率大于允许的最大比特率的视频，会话将丢弃传入视频流数据包。

## 内容共享
<a name="content-share"></a>

最多两个客户端可以向会议共享内容。内容共享可以包括视频轨道和/或音频轨道。内容共享的一个常见示例是屏幕共享，即使用屏幕截图作为内容的来源。另一示例是将预先录制的内容与视频和音频轨道共享。

会话将内容音频混合到所发送的音频流中。内容音频支持高达 48kHz 的采样率和最多 2 个通道（立体声），使用 Opus 编解码器进行编码，比特率最高可达 128kbps。

视频内容通过单独的视频流发送到会话并转发至客户端。标准会话支持高达 1920 x 1080、每秒 30 帧的内容视频。高清会话支持高达 3840 x 2160、每秒 30 帧的内容视频。

用于内容共享的屏幕截图使用正在捕获的屏幕或窗口的分辨率、会话类型的最大内容分辨率，以及最高每秒 30 帧的速率。但是，设备和浏览器的容量可能会限制这些值。

适用于 React 的 Amazon Chime SDK 客户端库支持屏幕截图和其他来源的内容共享。 JavaScript 

适用于 iOS 和安卓的 Amazon Chime SDK 客户端库支持从屏幕截图共享内容。

## 数据消息
<a name="data-messages"></a>

数据消息为客户端提供了一种向会话中的其他客户端广播信息的方式。例如，应用程序可能会在会话期间使用数据消息共享表情符号反应。

每条数据消息包括：
+ 一个主题，最长 64 个字符的字符串。
+ 最高 2KB 的数据，包括主题。

客户端会向会话发送数据消息，而会话会将数据消息发送给所有连接的客户端。

会话可以选择缓存数据消息，最长五分钟。如果客户端加入或重新连接到会话，该会话将自动向客户端发送此前尚未发送的所有缓存数据消息。会话缓存最多可存储 1024 条数据消息。

一个会话支持每秒最多发送 100 条数据消息。使用[实时转录](https://docs.aws.amazon.com/chime-sdk/latest/dg/meeting-transcription.html)时，每个客户端都通过数据消息接收[转录消息](https://docs.aws.amazon.com/chime-sdk/latest/dg/process-msgs.html)，这些消息计入每秒发送的消息总数。

# 为 Amazon Chime SDK 会议配置视频编解码器
<a name="js-meeting-manage-codecs"></a>

客户端设备使用视频编解码器在原始视频发送到服务之前对其进行压缩，并在渲染接收到的视频之前对其进行解压缩。

使用 Amazon Chime SDK 客户端库时 JavaScript，您可以指定发送视频的编解码器首选项。

适用于 iOS 和 Android 的 Amazon Chime SDK 客户端库会根据设备的功能自动为您选择编解码器。

## 设置视频编解码器首选项
<a name="codec-list"></a>

在适用的 Amazon Chime SDK 客户端库中 JavaScript，您可以为摄像头和内容视频指定独立的视频编解码器首选项。

使用 [ AudioVideoControllerFacade. setVideoCodecSendPreferences ](https://aws.github.io/amazon-chime-sdk-js/interfaces/audiovideocontrollerfacade.html#setvideocodecsendpreferences)用于设置发送网络摄像头视频的编解码器首选项的功能。该链接将带您前往 GitHub。

您的首选项以有序数组的形式传递，首先传递您最希望使用的编解码器，最后传递您最不希望使用的编解码器。

当提供多个编解码器首选项时，该服务会自动选择所有会话参与者都可以解码的首选编解码器。

以下示例说明如何为设置视频编解码器首选项，后备选项为： VP9 VP8

```
// A meeting session has already been created and stored in `this.meetingSession`
this.meetingSession.audioVideo.setVideoCodecSendPreferences(
	[
		VideoCodecCapability.vp9(), 
		VideoCodecCapability.vp8()
	]
);
```

以下情况适用于这些首选项：
+ **最佳**-客户端使用编解码器对视频进行 VP9编码。
+ **本地回退**-如果客户端不支持 VP9编码，则会回退到 VP8 编码。如果客户端不支持 VP8 编码，则会使用浏览器和服务支持的任何编解码器。
+ **远程回退**-如果会话中的另一个客户端没有 VP9 解码器，则该客户端会回退到 VP8 编码。
+ **本地故障**-如果客户端不支持 VP9或不 VP8 编码，它将不会发送视频。

要设置内容共享的首选项，请使用[ ContentShareControllerFacade。 setContentShareVideoCodecPreferences ](https://aws.github.io/amazon-chime-sdk-js/interfaces/contentsharecontrollerfacade.html#setcontentsharevideocodecpreferences)用于设置发送内容视频的编解码器首选项的功能。此链接将带您前往 GitHub.

 以下示例将内容视频编解码器首选项设置为 VP9 ，后备选项为。 VP8

```
// A meeting session has already been created and stored in `this.meetingSession`
    this.meetingSession.audioVideo.setContentShareVideoCodecPreferences(
	[
	VideoCodecCapability.vp9(), 
	VideoCodecCapability.vp8()
	]
);
```

# 为 Amazon Chime SDK 会议配置网络
<a name="network-config"></a>

当您将 Amazon Chime SDK 集成到客户端应用程序中时，该 SDK 会连接到其后端服务，以发送和接收音频、视频、内容共享和数据消息。如果用户的网络阻止了 Amazon Chime SDK 服务的流量，其使用该服务的能力将会受到影响。网络管理员可以使用这些信息重新配置其网络，以允许访问 Amazon Chime SDK 服务。

**注意**  
配置网络时，必须默认启用 DNS（EDNS0）扩展机制。这可以确保主机信息的大小与 UDP 数据包的大小一致，以使您的应用程序能够访问 Amazon Chime SDK 服务。

**Topics**
+ [配置媒体和信令](#media-signaling)
+ [配置 Amazon Voice Focus](#voice-focus-config)
+ [配置回声抑制](#echo-reduction)
+ [配置背景替换和背景模糊](#config-blur)
+ [配置浏览器内容安全策略](#configure-browser-policy)
+ [Amazon Chime IDs 软件开发工具包的使用 AppKeys 和租户](app-keys-tenant-ids.md)

## 配置媒体和信令
<a name="media-signaling"></a>

Amazon Chime SDK 音频、视频和内容尽可能使用用户数据报协议 (UDP) 传输。如果 UDP 被阻止，Amazon Chime SDK 会尝试为双向媒体传输建立传输层安全性协议 (TLS) 连接。Amazon Chime SDK 信令和数据消息使用传输控制协议 (TCP) 和连接。 WebSocket 

下图显示了一个典型的网络，其中包含运行 Amazon Chime SDK 的应用程序。

![\[配置为运行 Amazon Chime SDK 应用程序的网络，在 SDK 和会议之间进行双向通信。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/net-config-diagram.png)


Amazon Chime SDK 针对媒体和信令使用以下目标和端口。


| 域 | IPv4 子网 | IPv6 子网 | 端口 | 
| --- | --- | --- | --- | 
| \$1.chime.aws | 99.77.128.0/18 | 2600:f0f 0:4100:: /40 | TCP:443 UDP:3478 | 

此子网是 [AWS IP 地址范围](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)内的 `CHIME_MEETINGS` 服务。

## 配置 Amazon Voice Focus
<a name="voice-focus-config"></a>

适用于 iOS 和 Android 的 Amazon Chime SDK 客户端库包括 Amazon Voice Focus 模块。用于从亚马逊 JavaScript 下载亚马逊语音焦点模块的 Amazon Chime SDK 客户端库。 CloudFront适用于 Windows 的 Amazon Chime SDK 客户端库不支持 Voice Focus。

Amazon Voice Focus 使用以下目标和端口。


| 域 | 端口 | 
| --- | --- | 
| \$1.sdkassets.chime.aws | TCP:443 | 

此子网是 [AWS IP 地址范围](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)内的 `CLOUDFRONT` 服务。

## 配置回声抑制
<a name="echo-reduction"></a>

用于从亚马逊 JavaScript 下载回声减少模块的 Amazon Chime SDK 客户端库。 CloudFront

回声抑制使用以下目标和端口。


| 域 | 端口 | 
| --- | --- | 
| \$1.sdkassets.chime.aws | TCP:443 | 

此子网是 [AWS IP 地址范围](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)内的 `CLOUDFRONT` 服务。

## 配置背景替换和背景模糊
<a name="config-blur"></a>

用于从亚马逊 JavaScript 下载背景替换和模糊模块的 Amazon Chime SDK 客户端库。 CloudFront

背景替换和背景模糊使用以下目标和端口。


| 域 | 端口 | 
| --- | --- | 
| \$1.sdkassets.chime.aws | TCP:443 | 

此子网是 [AWS IP 地址范围](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)内的 `CLOUDFRONT` 服务。

## 配置浏览器内容安全策略
<a name="configure-browser-policy"></a>

使用适用的 Amazon Chime SDK 客户端库构建应用程序时 JavaScript，需要在应用程序中配置浏览器内容安全策略。有关更多信息，请参阅上的《[内容安全策略指南》](https://aws.github.io/amazon-chime-sdk-js/modules/contentsecurity_policy.html) GitHub。

# Amazon Chime IDs 软件开发工具包的使用 AppKeys 和租户
<a name="app-keys-tenant-ids"></a>

您可以使用 AppKeys 和租户IDs 来限制*从网络*访问特定应用程序的 Amazon Chime SDK WebRTC 媒体会话。

开发人员使用 Amazon Chime SDK 创建通过 UDP 发送和接收实时视频的应用程序。应用程序用户需要对 [https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html) 子网的 UDP 访问权限。组织（网络所有者）可以使用 AppKeys 和租户IDs 将来自其网络的访问权限限制为仅允许特定应用程序的WebRTC媒体会话。

**示例 1：使用 AppKeys**  
如果 App-A 和 App-B 使用 Amazon Chime SDK，则组织可以允许 App-A 从其网络访问 WebRTC 媒体会话，但阻止 App-B 及使用 Amazon Chime SDK 的任何其他应用程序。Organizations 可以使用 App-A AppKey 和 HTTPS 代理来做到这一点。更多信息，请参阅该主题后面的 [限制对特定应用程序的访问](#limit-app-access)。

**示例 2：使用 AppKeys 和租户 IDs**  
如果 App-A 公开可用并被许多客户使用，组织可能希望仅当其用户参与会话时才允许 App-A 从其网络访问 WebRTC 媒体会话，并阻止访问所有其他 App-A 会话。组织可以通过使用应用程序 AppKey、组织的 TenanTid 和 HTTPS 代理来做到这一点。更多信息，请参阅该主题后面的 [限制对特定租户的访问](#limit-tenant-access)。

要使用 AppKeys 和租户IDs，您必须拥有允许向请求添加 HTTPS 标头的 HTTPS 代理服务器。下图显示了租户IDs 的工作原理。 AppKeys 

![\[该图显示了租户如何 AppKeys IDs 控制应用程序和租户对WebRTC会话的访问。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/app-key-diagram.png)


在图中，App-A 有租户 A-1 和 A-2，App-B 有租户 B-1 和 B-2。在这种情况下， AppKey 仅允许App-A连接到WebRTC媒体会话，而租户ID仅允许租户A-1加入该会话。

**Topics**
+ [限制对特定应用程序的访问](#limit-app-access)
+ [限制对特定租户的访问](#limit-tenant-access)
+ [HTTPS 标头示例](#header-examples)

## 限制对特定应用程序的访问
<a name="limit-app-access"></a>

A *AppKey*是 Amazon Chime 为每个账户创建的一致且唯一的 256 位值。 AWS 如果您没有 AppKey，可以向 Amazon Support 申请一个。如果您有多个 AWS 账户，则可以 AppKey 申请所有账户的通用账户。

**注意**  
您可以安全地 AppKeys 公开共享您的信息，并允许其他组织限制来自其网络的访问。

Amazon Chime SDK 会 AppKey 根据用于创建会话的 AWS 账户 ID 自动将每个 WebRTC 媒体会话与关联起来。要限制*从您的网络*访问特定应用程序，请执行以下操作：

1. 通过 HTTPS 代理服务器将所有出站请求路由到 `CHIME_MEETINGS` 子网。

1. 配置代理服务器，向 `CHIME_MEETINGS` 子网的所有出站请求添加以下标头：

   `X-Amzn-Chime-App-Keys:` *comma-separated list of allowed AppKeys*.

   例如，`X-Amzn-Chime-App-Keys:AppKey-A,AppKey-B,AppKey-C`允许与这些应用程序关联的应用程序 AppKeys 访问子网。

Amazon Chime SDK 会检查入站 WebRTC 媒体会话连接的 `X-Amzn-Chime-App-Keys` 标头并应用以下逻辑：

1. 如果标`X-Amzn-Chime-App-Keys`头存在并且包含会话的标头 AppKey，请接受连接。

1. 如果标`X-Amzn-Chime-App-Keys`头存在但不包括会话的标头 AppKey，则以 403 错误拒绝连接。

1. 如果 `X-Amzn-Chime-App-Keys` 标头不存在，则接受连接。如果用户能够从组织网络外部访问应用程序，他们也可以访问该会话。

## 限制对特定租户的访问
<a name="limit-tenant-access"></a>

*TenantID* 是由开发人员创建的不透明标识符。请记住以下关于租户的信息IDs：
+ 不能保证租户IDs 在应用程序之间是唯一的，因此您必须 AppKey 为每个 TenantId 列表指定一个。
+ 租户IDs 对大小写敏感。根据开发人员的规定准确输入。
+ 一个组织可以限制对多个应用程序的访问权限，但只能IDs为其中一些应用程序指定租户。没有租户的应用程序IDs 可以连接到所有WebRTC媒体会话。

要将媒体会话与租户关联IDs，开发者必须先将`TenantIds`房产和租户列表添加IDs 到 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html) 或 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html) 请求。

例如：

`CreateMeeting(..., TenantIds : [ tenantId1, tenantId2 ] )`

要在特定应用程序中限制从组织网络访问其 WebRTC 媒体会话，执行以下操作：

1. 按照[限制对特定应用程序的访问](#limit-app-access)中的步骤操作。

1. 将 HTTPS 代理服务器配置为在出站连接上添加 `X-Amzn-Chime-Tenants` 标头。包括 AppKeys 和租户的列表IDs，分隔如以下示例所示：`X-Amzn-Chime-Tenants: AppKey-A:tenantId-A-1,tenantId-A-2;AppKey-B:tenantId-B-1,tenantId-B-2`

Amazon Chime SDK 会检查入站 WebRTC 媒体会话连接的 `X-Amzn-Chime-Tenants` 标头并应用以下逻辑：
+ 如果标头包含该会话的 `AppKey:tenantId`，则接受连接。
+ 如果标头包含会话的 `AppKey`，但与 `tenantId` 不匹配，则以 403 错误拒绝连接。
+ 如果标头*不*包含会话的 `AppKey`，则接受连接。
+ 如果标头包含会话 `AppKey`，但会话并无至少一个受允许的 `tenantId`，则以 403 错误拒绝连接。这可能是开发人员的错误。
+ 如果标头不存在，则接受连接。如果用户能够从组织网络外部访问应用程序，他们也可以访问所有会话。

## HTTPS 标头示例
<a name="header-examples"></a>

以下示例显示了在 HTTPS 标头IDs 中使用 AppKeys 和租户的一些方法。

**一个应用程序只有一个租户**  
`X-Amzn-Chime-App-Keys: AppKey`  
`X-Amzn-Chime-Tenants: AppKey:orgId`  
用户只能在指定应用程序中访问组织的 WebRTC 媒体会话。已阻止所有其他的应用程序。

**一个应用程序有两个租户**  
`X-Amzn-Chime-App-Keys: AppKey`  
`X-Amzn-Chime-Tenants: AppKey:engineeringId,salesId`  
用户只能在指定应用程序中访问工程和销售的媒体会话。已阻止所有其他的应用程序。

**两个应用程序，一个仅限租户使用**  
`X-Amzn-Chime-App-Keys: AppKey1,AppKey2`  
`X-Amzn-Chime-Tenants: AppKey1:orgId`  
用户只能在应用程序 1 中访问组织的媒体会话，而在应用程序 2 中可以访问任何会话。已阻止所有其他的应用程序。

# 了解 Amazon Chime SDK 会议生命周期事件
<a name="using-events"></a>

Amazon Chime SDK 发送会议生命周期事件，用于触发通知和启动下游工作流程。使用会议事件的部分示例包括：
+ 与会者加入或离开 Amazon Chime SDK 会议时更新元数据。
+ 为 Amazon Chime SDK 会议实施推送通知或花名册。
+ 测量 Amazon Chime SDK 会议中视频和内容共享的使用情况。

您可以向亚马逊 EventBridge、亚马逊简单通知服务 (SNS) 和亚马逊简单队列服务 (SQS) 发送事件。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[来自 AWS 服务的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-event.html)。

## Amazon Chime SDK 会议开始
<a name="sdk-start-mtg"></a>

新会议开始时 Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:MeetingStarted",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",    
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 会议结束
<a name="sdk-end-mtg"></a>

活动会议结束时 Amazon Chime SDK 会发送此事件。

**注意**  
为了提高效率，该服务还会在您调用时发送此事件 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteMeeting.html)API。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:MeetingEnded",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",    
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者已添加
<a name="sdk-add-attendee"></a>

新与会者添加至活动会议时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeAdded",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## 已添加 Amazon Chime SDK 与会者
<a name="sdk-remove-attendee"></a>

当你使用时，Amazon Chime 软件开发工具包会发送此事件 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteAttendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteAttendee.html)用于将与会者从活动会议中移除的 API。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333", 
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeDeleted",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者已授权
<a name="sdk-auth-attendee"></a>

当已加入会议的用户使用相同的加入令牌再次加入会议时，Amazon Chime SDK 会发送此事件。例如当用户从台式机切换到移动设备时。这实际上是将会议“移交”到新设备上。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeAuthorized",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者加入会议
<a name="sdk-join-attendee"></a>

现有与会者加入使用指定网络传输的 Amazon Chime SDK 会议时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333", 
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeJoined",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",    
    "networkType": "Voip",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者离开会议
<a name="sdk-leave-attendee"></a>

现有与会者离开使用指定网络传输 Amazon Chime SDK 会议时，Amazon Chime SDK 会发送此事件。

**注意**  
该服务不会针对一个“离开”操作发送同时发送 `chime:AttendeeLeft` 和 `chime:AttendeeDropped` 事件。掉线和离开是不同的操作，系统会发送与每个操作对应的事件。  
例如，假设一位网络状况不佳的与会者在上午 11 点加入会议。有可能出现以下操作：  

```
11:00 API – CreateAttendee, CreateMeetingWithAttendee, or BatchCreateAttendee
11:00   Event – chime:AttendeeAdded
11:01 Action – user joins meeting
11:01   Event – chime:AttendeeJoined
11:02 Action – user's connection drops
11:02   Event – chime:AttendeeDropped
11:03 Action – user's connection restored
11:03   Event – chime:AttendeeJoined
11:30 Action – user leaves meeting
11:30   Event – chime:AttendeeLeft
```

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeLeft",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "networkType": "Voip",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者从会议中掉线
<a name="sdk-drop-attendee"></a>

当前与会者从 Amazon Chime SDK 会议中掉线时（通常是因为网络不佳），Amazon Chime SDK 会发送此事件。当服务在 10-15 秒内没有收到数据包时，它会认为客户端已掉线并发布事件。

掉线操作通常由该服务触发，但客户端也可以触发。例如，假设用户将笔记本电脑从 Wi-Fi 切换到以太网。这会导致网络适配器的更改，连接被重置。这又会重置 websocket 并触发掉线-加入操作。

**注意**  
该服务不会针对一个“离开”操作发送同时发送 `chime:AttendeeLeft` 和 `chime:AttendeeDropped` 事件。掉线和离开是不同的操作，系统会发送与每个操作对应的事件。  
例如，假设一位网络状况不佳的与会者在上午 11 点加入会议。有可能出现以下操作：  

```
11:00 API – CreateAttendee, CreateMeetingWithAttendee, or BatchCreateAttendee
11:00   Event – chime:AttendeeAdded
11:01 Action – user joins meeting
11:01   Event – chime:AttendeeJoined
11:02 Action – user's connection drops
11:02   Event – chime:AttendeeDropped
11:03 Action – user's connection restored
11:03   Event – chime:AttendeeJoined
11:30 Action – user leaves meeting
11:30   Event – chime:AttendeeLeft
```

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeDropped",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",  
    "networkType": "Voip",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者开始流视频
<a name="sdk-attendee-video-start"></a>

现有与会者开始流视频时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333", 
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeVideoStarted",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者停止流视频
<a name="sdk-attendee-video-stop"></a>

现有与会者停止流视频时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333", 
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeVideoStopped",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者开始共享屏幕
<a name="sdk-attendee-screenshare-start"></a>

现有与会者开始共享其屏幕时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeContentVideoStarted",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者停止共享屏幕
<a name="sdk-attendee-screenshare-stop"></a>

现有与会者停止共享其屏幕时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeContentVideoStopped",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者容量已更新
<a name="sdk-attendee-capability-updated"></a>

当现有与会者的容量更新时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",
  "id": "12345678-1234-1234-1234-111122223333",
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": [],
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeCapabilitiesUpdated",
    "success": "1", // value can be 1 or 0. 1 means success, 0 means failure
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "mymeeting",
    "attendeeId": "attendeeId",
    "externalUserId": "externalUserId"
    "mediaRegion": "us-east-1"
    "attendeeCapabilities": {
    "audio": "SendReceive",
    "video": "SendReceive",
    "content": "SendReceive"
   }
  }
}
```

## Amazon Chime SDK 与会者内容加入会议
<a name="sdk-content-join"></a>

内容共享加入使用指定网络传输的 Amazon Chime SDK 会议时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeContentJoined",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "networkType": "Voip",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者内容离开会议
<a name="sdk-content-leave"></a>

内容共享离开使用指定网络传输的 Amazon Chime SDK 会议时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeContentLeft",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "networkType": "Voip",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者内容失去会议连接
<a name="sdk-content-drop"></a>

当内容共享从 Amazon Chime SDK 会议中掉线时（通常是因为带宽过低），Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeContentDropped",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "networkType": "Voip",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者内容开始流视频
<a name="sdk-content-start-stream"></a>

内容共享开始流视频时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333",  
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeContentVideoStarted",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

## Amazon Chime SDK 与会者内容停止流视频
<a name="sdk-content-stop-stream"></a>

内容共享停止流视频时，Amazon Chime SDK 会发送此事件。

**Example 事件数据**  
以下示例显示此事件的数据。  

```
{
  "version": "0",
  "source": "aws.chime",
  "account": "111122223333", 
  "region": "us-east-1",
  "detail-type": "Chime Meeting State Change",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "resources": []
  "detail": {
    "version": "0",
    "eventType": "chime:AttendeeContentVideoStopped",
    "timestamp": 12344566754,
    "meetingId": "87654321-4321-4321-1234-111122223333",
    "attendeeId": "87654321-4321-4321-1234-111122223333",
    "externalUserId": "87654321-4321-4321-1234-111122223333",
    "externalMeetingId": "87654321-4321-4321-1234-111122223333",
    "mediaRegion": "us-east-1"
  }
}
```

# 了解亚马逊 Chime 软件开发工具包会议的亚马逊 CloudWatch 指标
<a name="sdk-usage-metrics"></a>

当您使用 Amazon Chime 软件开发工具包时，它会将服务和使用情况指标发送到。 CloudWatch这些指标使您能够使用 CloudWatch 图表和控制面板来监控您使用 Amazon Chime SDK 服务的情况。这些指标会捕获您调用的每个 API 的数据。

以下部分列出并描述指标。

**Topics**
+ [服务指标](#service-metrics)
+ [API 使用情况指标](#usage-metrics)

## 服务指标
<a name="service-metrics"></a>

Amazon Chime SDK 向 `AWS/ChimeSDK` 命名空间发布以下服务指标：


| 指标 | 单位 | 描述 | 
| --- | --- | --- | 
| `AttendeeAuthorizationSuccess` | 计数 | 成功授权尝试的总计数。成功意味着允许与会者加入会议。 | 
| `AttendeeAuthorizationError` | 计数 | 授权失败总计数，表示与会者无法加入会议。 | 
| `AttendeeAudioDrops` | 计数 | 音频掉线的总计数。 | 
| `AttendeeContentDrops` | 计数 | 内容共享掉线总计数。 | 
| `MeetingSQSNotificationErrors` | 计数 | SQS 通知错误总计数。 | 
| `MeetingSNSNotificationErrors` | 计数 | SNS 通知错误总计数。 | 

## API 使用情况指标
<a name="usage-metrics"></a>

API 使用量指标与 AWS 服务配额相对应。您可以配置警报，以在用量接近服务配额时向您发出警报。有关与服务配额 CloudWatch 集成的更多信息，请参阅 [A *mazon CloudWatch 用户指南*中的 AWS 使用量指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Service-Quota-Integration.html)。

Amazon Chime SDK 在 `AWS/Usage` 命名空间中使用 `ChimeSDK` 服务名称发布以下 API 指标。


| 指标 | 描述 | 
| --- | --- | 
| `CallCount` | 对 Amazon Chime SDK 中 API 的调用总数。SUM 表示在指定时间段内对 API 的调用总数。 | 
| `ErrorCount` | Amazon Chime SDK 中由 API 引发的错误总数。SUM 表示在指定时间段内对 API 的调用总数。 | 
| `ThrottleCount` | Amazon Chime SDK 中由 API 引发的节流错误总数。SUM 表示在指定时间段内对 API 的调用总数。 | 

Amazon Chime SDK 通过以下维度向 `AWS/Usage` 命名空间发布使用情况指标：


| 维度 | 描述 | 
| --- | --- | 
| 服务 | 包含资源的 AWS 服务的名称。对于 Amazon Chime SDK 使用情况指标，此维度的值为 `ChimeSDK`。 | 
| 类型 | 正在报告的实体的类型。Amazon Chime SDK 使用情况指标的唯一有效值为 `API`。 | 
| 资源 | 报告指标的资源类型。对于 Amazon Chime SDK 使用情况指标，此维度的值为 API。 | 
| 类 | 所跟踪的资源的类。Amazon Chime SDK 指标的唯一有效值为 `None`。 | 

# 创建 Amazon Chime SDK 媒体管道
<a name="media-pipelines"></a>

在本节中，我们将向您展示如何创建用于捕获或流式传输 Amazon Chime SDK 会议的媒体管道。开始之前，您必须将您的客户端应用程序与 Amazon Chime SDK 客户端库集成。有关更多信息，请参阅 [了解 Amazon Chime SDK 客户端库](mtgs-sdk-client-lib.md)。有关媒体管道的更多信息，请参阅 *AWS 企业生产力博客*中的[使用媒体管道捕获 Amazon Chime SDK 会议](https://aws.amazon.com/blogs//business-productivity/capture-amazon-chime-sdk-meetings-using-media-capture-pipelines/)。

**重要**  
您和您的最终用户必须明白，录制 Amazon Chime SDK 会议可能需要遵守有关电子通信录制的法律或法规。您和您的最终用户有责任遵守与录制有关的所有适用法律，包括适当通知录制会话或通信中的所有参与者正在录制会话或通信，并获得他们的许可。  
您和您的最终用户应对使用媒体实时连接器服务进行的所有流媒体内容负责，并且必须确保此类内容不会违反法律、侵犯或盗用任何第三方的权利，也不会以其他方式违反您与 Amazon 签订的协议中的重要条款。

**Topics**
+ [创建 Amazon Chime SDK 媒体管道的注意事项](creating-media-pipelines-considerations.md)
+ [了解活动 Amazon Chime SDK 媒体管道的默认限制](media-pipelines-limits.md)
+ [迁移到 Amazon Chime SDK 媒体管道命名空间](migrate-pipelines.md)
+ [了解 Amazon Chime SDK 媒体管道创建](create-pipeline.md)
+ [为 Amazon Chime SDK 会议创建媒体捕获管道](capture-pipe-config.md)
+ [为 Amazon Chime SDK 会议创建媒体串联管道](create-concat-pipe.md)
+ [为 Amazon Chime SDK 会议创建媒体实时连接器管道](connector-pipe-config.md)
+ [使用 Amazon Chime SDK 创建媒体流管道](create-media-stream-pipeline.md)
+ [在 Amazon Chime SDK 会议中将音频和视频合成单一视图](pipeline-compositing.md)
+ [为 Amazon Chime SDK 媒体管道创建服务相关角色](create-pipeline-role.md)
+ [使用 Amazon Chime SDK 媒体管道事件](media-pipe-events.md)
+ [停止 Amazon Chime SDK 媒体管道的最佳实践](stop-pipe-best-practices.md)

# 创建 Amazon Chime SDK 媒体管道的注意事项
<a name="creating-media-pipelines-considerations"></a>

媒体管道可以由以下管道之一组成：
+ **媒体捕获** — 使用媒体捕获管道捕获音频、视频和内容共享流，以及会议活动和数据消息。所有媒体捕获管道都将其数据保存到您创建的 [Amazon Simple Storage Service](https://aws.amazon.com/s3/) (S3) 存储桶中。您可以为每次 Amazon Chime SDK 会议创建一个媒体捕获管道。有关更多信息，请参阅[了解 Amazon Chime SDK 媒体管道创建](create-pipeline.md)。
+ **媒体串联** — 使用媒体串联管道来连接媒体捕获管道中的构件。串联管道独立于媒体捕获和实时连接器管道工作。有关更多信息，请参阅[为 Amazon Chime SDK 会议创建媒体串联管道](create-concat-pipe.md)。
+ **媒体实时连接器** — 使用媒体实时连接器管道连接到服务，这些服务使您能够将 Amazon Chime SDK 会议流式传输到 RTMP 端点。您可以为每次 Amazon Chime SDK 会议创建最多一个媒体实时连接器管道。有关更多信息，请参阅[为 Amazon Chime SDK 会议创建媒体实时连接器管道](connector-pipe-config.md)。
+ **媒体流** — 使用媒体流管道捕获会议中所有与会者的个人音频，以及媒体连接管道生成的混合音频。所有媒体流管道会将其数据保存至 [Amazon Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html) (KVS)。有关更多信息，请参阅[使用 Amazon Chime SDK 创建媒体流管道](create-media-stream-pipeline.md)。

您创建的管道取决于您使用的命名空间。如果使用 `Chime` 命名空间，则只能创建媒体捕获管道。如果您使用 `ChimeSdkMediaPipelines` 命名空间，则还可以创建媒体串联和媒体实时连接器管道，并使用合成功能。如果要迁移到 `ChimeSdkMediaPipelines` 命名空间，请参阅 [迁移到 Amazon Chime SDK 媒体管道命名空间](migrate-pipelines.md)。

# 了解活动 Amazon Chime SDK 媒体管道的默认限制
<a name="media-pipelines-limits"></a>

下表列出每个区域中活动媒体管道的默认限制。每种类型的管道都计入限制。如果您超过任何区域的限制，[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html)、和[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaLiveConnectorPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaLiveConnectorPipeline.html) APIs 将抛出**超出资源限制**异常。

您可以使用 AWS 控制台中的 S **ervic** e Quotas 页面来调整您的有效渠道限制，也可以联系您的[客户支持代表](https://docs.aws.amazon.com/awssupport/latest/user/getting-started.html)。有关 Amazon Chime SDK 会议限制的更多信息，请参阅 [Amazon Chime SDK 的限额](meetings-sdk.md#mtg-limits)。


| Region | 默认活动管道限制 | 
| --- | --- | 
| us-east-1 | 100 | 
| us-west-2 | 10 | 
| ap-northeast-1 | 10 | 
| ap-northeast-2 | 10 | 
| ap-south-1 | 10 | 
| ap-southeast-1 | 10 | 
| ap-southeast-2 | 10 | 
| ca-central-1 | 10 | 
| eu-central-1 | 10 | 
| eu-west-2 | 10 | 

# 迁移到 Amazon Chime SDK 媒体管道命名空间
<a name="migrate-pipelines"></a>

您可以使用`ChimeSdkMediaPipelines`命名空间来寻址媒体管道 API 端点 AWS 所在的任何区域。如果您刚开始使用 Amazon Chime SDK，则使用此命名空间。有关“区域”的更多信息，请参阅本指南中的 [Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)。

使用 [Amazon Chime](https://docs.aws.amazon.com/chime/latest/APIReference/API_Operations_Amazon_Chime.html) 命名空间的现有应用程序应计划迁移到专用命名空间。

**Topics**
+ [迁移管道的原因](#pipeline-migration-reasons)
+ [在迁移管道之前](#migration-prerequisites)

## 迁移管道的原因
<a name="pipeline-migration-reasons"></a>

出于以下原因，我们鼓励您迁移到 `ChimeSdkMediaPipelines` 命名空间：

**选择 API 终端节点**  
Amazon Chime SDK 媒体捕获命名空间是唯一可以在任何可用区域中使用 API 终端节点的 API 命名空间。有关“区域”的更多信息，请参阅 [Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)。如果您想使用 `us-east-1` 以外的 API 终端节点，则必须使用 `ChimeSdkMediaPipelines` 命名空间。有关当前终端节点的更多信息，请参阅本指南中的 [API 映射](migrate-from-chm-namespace.md#name-end-map)。

**更新的媒体渠道和新媒体渠道 APIs**  
我们只在`ChimeSdkMediaPipelines`命名空间 APIs 中添加或更新媒体管道。

## 在迁移管道之前
<a name="migration-prerequisites"></a>

在迁移之前，记下命名空间之间的差异。下表列出并描述了以上差异。


| Item | 媒体管道命名空间 | Chime 命名空间 | 
| --- | --- | --- | 
|  命名空间名称  |  ChimeSdkMediaPipelines  |  Chime  | 
|  区域  |  多个  |  仅限 us-east-1  | 
|  了解如何查看、监控和管理 SageMaker 端点。  |  https://media-pipelines-chime。 *区域 .amaz* onaws.com  |  https://service.chime.aws.amazon.com  | 
|  服务主体  |  mediapipelines.chime.amazonaws.com  |  chime.amazonaws.com  | 
|  APIs  |  仅 APIs 适用于媒体管道  |  APIs 用于媒体渠道和 Amazon Chime 的其他部分  | 
|  会议  |  `us-west-2`、`ap-southeast-1`、和 `eu-central-1` 区域中的媒体管道仅适用于在 Amazon Chime SDK 会议命名空间中创建的会议。`us-east-1` 区域中的媒体管道适用于由任一命名空间中的任何会议终端节点创建的会议。  |  媒体管道适用于由任一命名空间中的任何会议终端节点创建的会议。  | 
| 默认活动媒体管道 | us-east-1 区域中的 100 以及 us-west-2、ap-southeast-1 和 eu-central-1 区域中的 10。 | 仅适用于 us-east-1 中的 100。 | 
|  服务相关角色  |  AWSServiceRoleForAmazonChimeSDKMedia管道  |     | 
|  标签  |  Available  |  不适用于媒体管道 APIs。  | 
| CloudTrail 事件源 | chime-sdk-media-pipelines.amazonaws.com | chime.amazonaws.com. | 
| 媒体直播连接器 | Available |  不适用于媒体管道 APIs。  | 
| 合成 | Available |  不适用于媒体管道 APIs。  | 
| 联接 | Available | 不可用。 | 

以下列表提供了有关 Chime 和 AWS ChimeSdkMediaPipelines 命名空间之间区别的更多信息。

**命名空间名称**  
Amazon Chime SDK 命名空间使用 `AWS.Chime` 正式名称。Amazon Chime SDK 媒体管道命名空间使用 `AWS.ChimeSDKMediaPipelines` 正式名称。名称的确切格式因平台而异。  
例如，此行 Node.js 代码寻址 `chime` 命名空间：  

```
const chimeMediaPipelines = AWS.Chime();
```
要迁移到媒体管道 SDK 命名空间，使用新的命名空间和终端节点区域更新该代码。  

```
const chimeMediaPipelines = AWS.ChimeSDKMediaPipelines({ region: "eu-central-1" });
```

**区域**  
Amazon Chime 命名空间只能寻址 US-EAST-1 区域的 API 终端节点。Amazon Chime SDK 媒体管道命名空间可在任何拥有 Amazon Chime SDK 媒体管道 API 终端节点的区域中对其终端节点进行寻址。有关媒体管道区域的最新列表，请参阅本指南中的 [Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)。

**了解如何查看、监控和管理 SageMaker 端点。**  
要修改媒体捕获管道，必须使用与创建该管道相同的终端节点。例如，如果您通过 eu-central-1 中的终端节点创建管道，则必须使用 eu-central-1 与该管道进行交互。有关当前终端节点的更多信息，请参阅本指南中的 [API 映射](migrate-from-chm-namespace.md#name-end-map)。

**服务主体**  
[Amazon Chime SDK 媒体管道](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间使用新的服务主体：`mediapipelines.chime.amazonaws.com`。如果您有 Amazon S3 存储桶或授予服务访问权限的其他 IAM 策略，则需要更新这些策略以授予新服务主体访问权限。  
例如，创建媒体管道时，必须将 [为 Amazon Chime SDK 媒体捕获管道创建 Amazon S3 存储桶](create-s3-bucket.md) 中列出的策略权限添加到新的服务主体中。有关策略的更多信息，请参阅《IAM 用户指南》中的 [AWS JSON 策略元素：主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

**APIs**  
Amazon Chime 软件开发工具包媒体管道命名空间仅 APIs 包含用于创建和管理媒体管道的命名空间。Amazon Chime 命名空间包括 APIs 媒体渠道、会议和 Amazon Chime 服务的其他部分。

**会议**  
IAD 区域中的媒体管道适用于由任一命名空间中的任何会议终端节点创建的会议。

**服务相关角色**  
仅适用于 Amazon Chime SDK 媒体管道命名空间。创建 “*AWSServiceRoleForAmazonChimeSDKMedia管道*” 角色。

**标签**  
[Amazon Chime SDK 媒体管道](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html)命名空间支持标签。[CreateMediaLiveConnectorPipeline](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaLiveConnectorPipeline.html) APIs 使用一个或多个标签调用[CreateMediaCapturePipeline](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html)或时，该角色必须具有调用`TagResource`操作的权限。

# 了解 Amazon Chime SDK 媒体管道创建
<a name="create-pipeline"></a>

您可以按照多步骤流程创建 Amazon Chime SDK 媒体管道，也可以创建多种类型的管道。以下列表概述了创建过程，并提供了指向有关创建各种类型管道的更多信息的链接。
+ 创建 Amazon S3 存储桶。您必须在与会议相同的 AWS 区域创建存储桶。有关更多信息，请参阅[为 Amazon Chime SDK 媒体捕获管道创建 Amazon S3 存储桶](create-s3-bucket.md)。
+ 创建服务相关角色并命名为 `AWSServiceRoleForAmazonChimeSDKMediaPipelines`。这允许媒体管道代表您访问会议。有关更多信息，请参阅[为 Amazon Chime SDK 媒体管道创建服务相关角色](create-pipeline-role.md)。
+ 创建具有足够权限的 IAM 角色来与 A [mazon Chime 软件开发工具包媒体](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Media_Pipelines.html)管道进行交互。 APIs 要创建该角色，我们建议从 IAM 控制台添加[AmazonChime软件开发工具包](https://docs.aws.amazon.com/chime-sdk/latest/ag/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-chime-sdk)托管策略。该政策包含必要的内容 APIs。

  您的 IAM 角色还必须拥有在所有资源上调用 Amazon S3 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicy.html) API 的权限。以下示例显示典型策略。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": "s3:GetBucketPolicy",
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
  ```

------

获得这些项目后，请参阅这些主题以获取有关创建管道的信息。
+ [为 Amazon Chime SDK 会议创建媒体捕获管道](capture-pipe-config.md)
+ [为 Amazon Chime SDK 会议创建媒体串联管道](create-concat-pipe.md)
+ [为 Amazon Chime SDK 会议创建媒体实时连接器管道](connector-pipe-config.md)
+ [使用 Amazon Chime SDK 创建媒体流管道](create-media-stream-pipeline.md)

# 为 Amazon Chime SDK 会议创建媒体捕获管道
<a name="capture-pipe-config"></a>

媒体捕获管道可捕获音频、视频和内容共享流，以及会议活动和数据消息。所有媒体捕获管道都将其数据保存到您创建的 [Amazon Simple Storage Service](https://aws.amazon.com/s3/) (S3) 存储桶中。您可以为每次 Amazon Chime SDK 会议创建一个媒体捕获管道。

以下部分介绍如何创建媒体捕获管道。按照列出的顺序操作。

**Topics**
+ [为 Amazon Chime SDK 媒体捕获管道创建 Amazon S3 存储桶](create-s3-bucket.md)
+ [为 Amazon Chime SDK 媒体捕获管道的 Amazon S3 存储桶启用服务器端加密](sse-kms.md)
+ [使用密钥启用对象级服务器端加 AWS KMS 密](using-kms-keys-for-encryption.md)
+ [创建 Amazon Chime SDK 媒体捕获管道](create-capture-pipe.md)
+ [使用 Amazon Chime SDK 媒体捕获构件](artifacts.md)
+ [为 Amazon Chime SDK 媒体捕获管道配置音频文件夹](configure-audio.md)
+ [为 Amazon Chime SDK 媒体捕获管道配置视频文件夹](configure-video.md)
+ [了解 Amazon Chime SDK 媒体捕获管道的数据通道文件夹中的消息](data-channel.md)
+ [了解 Amazon Chime SDK 媒体捕获管道的 Amazon S3 存储桶文件夹结构](capture-folder-structure.md)
+ [了解 Amazon Chime SDK 媒体捕获管道的会议活动文件](meeting-events.md)
+ [了解 Amazon Chime SDK 媒体捕获管道的转录文件](transcription-messages.md)
+ [为 Amazon Chime SDK 媒体捕获管道串联数据流](concatenate-streams.md)

# 为 Amazon Chime SDK 媒体捕获管道创建 Amazon S3 存储桶
<a name="create-s3-bucket"></a>

您可以使用 Amazon S3 控制台或 AWS CLI 来创建 Amazon S3 存储桶。 AWS SDKs有关更多信息，请参阅 *Amazon Simple Storage Service (S3) 用户指南*中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

您的媒体捕获管道的 Amazon S3 存储桶必须与 Amazon Chime SDK 会议处于同一个 AWS 账户。此外，您必须向 Amazon Chime SDK 服务主体授权 `s3:PutObject` 和 `s3:PutObjectAcl` 的访问权限，即[ mediapipelines.chime.amazonaws.com](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。你可以使用 Amazon S3 控制台或 AWS Command Line Interface (AWS CLI) 来做到这一点。Amazon S3 存储桶必须属于可用的 [Amazon Chime SDK 媒体区域](https://docs.aws.amazon.com/chime-sdk/latest/dg/sdk-available-regions.html)之一。

**注意**  
确保向您的 IAM 用户添加策略以授予对您的存储桶的访问权限。此外，如果您使用默认 AWS 禁用的区域，则该区域中必须有一个 Amazon S3 存储桶。  
默认情况下，AWS 会禁用以下区域，在启用这些区域之前，您无法在其中托管会议资源：  
非洲（开普敦）
亚太地区（香港）
亚太地区（雅加达）
欧洲地区（米兰）
中东（巴林）
如果您使用其中一个区域，该区域必须具有 Amazon S3 存储桶。即使您使用 Amazon S3 APIs 与默认情况下未被屏蔽且已有存储桶的区域进行通信，这也适用。有关启用阻止区域的更多信息，请参阅 *AWS 一般参考*中的[管理 AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。

创建存储桶后，记录其 ARN。您可以使用它创建媒体捕获管道。

以下代码示例显示 Amazon S3 存储桶策略。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "AWSChimeMediaCaptureBucketPolicy",
    "Statement": [
        {
            "Sid": "AWSChimeMediaCaptureBucketPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "mediapipelines.chime.amazonaws.com"
            },
            "Action": [ "s3:PutObject", "s3:PutObjectAcl" ],
            "Resource": "arn:aws:s3:::Bucket_Name/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                "aws:SourceArn": "arn:aws:chime:*:123456789012:*"
                }
            }
        }
    ]
}
```

------

# 为 Amazon Chime SDK 媒体捕获管道的 Amazon S3 存储桶启用服务器端加密
<a name="sse-kms"></a>

要为 Amazon Simple Storage Service (Amazon S3) 存储桶启用服务器端加密，您可以使用以下类型的加密密钥：
+ Amazon S3 托管式密钥
+ 密钥管理服务 (KMS) 中的 AWS 客户托管密钥
**注意**  
密钥管理服务支持两种类型的密钥，即客户托管密钥和 AWS 托管密钥。Amazon Chime SDK 会议仅支持客户托管密钥。

## 使用 Amazon S3 托管密钥
<a name="s3-keys"></a>

使用 Amazon S3 控制台、CLI 或 REST API 为 Amazon S3 存储桶启用服务器端加密。在这两种情况下，都选择 **Amazon S3 密钥**作为加密密钥类型。无需进一步操作。当您使用存储桶进行媒体捕获时，会在服务器端上传和加密工件。有关更多信息，请参阅 *Amazon S3 用户指南*中的[指定 Amazon S3 加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-s3-encryption.html)。

## 使用您拥有的密钥
<a name="customer-key"></a>

要使用您管理的密钥启用加密，您需要使用客户托管密钥启用 Amazon S3 存储桶的服务器端加密，然后在密钥策略中添加一条声明，允许 Amazon Chime 使用该密钥并加密任何上传的项目。

1. 在 KMS 中创建客户托管密钥。有关执行此操作的信息，请参阅 *Amazon* S3 用户指南中的[使用 AWS KMS (SSE-KMS) 指定服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)。

1. 在密钥政策中添加语句，允许该 `GenerateDataKey` 操作生成密钥由 Amazon Chime SDK 服务主体使用的密钥，`mediapipelines.chime.amazonaws.com`。

   此示例显示一个典型语句。

   ```
   ...
   {
       "Sid": "MediaPipelineSSEKMS",
       "Effect": "Allow",
       "Principal": {
           "Service": "mediapipelines.chime.amazonaws.com"
       },
       "Action": "kms:GenerateDataKey",
       "Resource": "*",
       "Condition": {
           "StringEquals": {
              "aws:SourceAccount": "Account_Id"
           },
           "ArnLike": {
               "aws:SourceArn": "arn:aws:chime:*:Account_Id:*"
           }
       }
   }
   ...
   ```

1. 如果您使用媒体串联管道，在密钥政策中添加语句，允许 Amazon Chime SDK 服务主体 `mediapipelines.chime.amazonaws.com` 使用 `kms:Decrypt` 操作。

1. 配置 Amazon S3 存储桶以启用使用密钥的服务器端加密。

# 使用密钥启用对象级服务器端加 AWS KMS 密
<a name="using-kms-keys-for-encryption"></a>

Media Capture Pipeline 和 Media Concatenation Pipeline 可以使用 AWS Key Management Service (AWS KMS) 客户托管密钥为 Amazon S3 存储桶中的单个对象启用服务器端加密 (SSE)。要对此进行配置，必须使用 [CreateMediaCapturePipeline](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html)API 调用。媒体连接管道将使用关联媒体捕获管道中的服务器端加密参数。

要使用您的 AWS KMS 客户托管密钥为单个对象（对象级 SSE）启用 SSE，您必须在 [CreateMediaCapturePipeline](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html)API 调用`SinkIamRoleArn`期间提供`SseAwsKeyManagementParams`结构和：

1. 使用`SseAwsKeyManagementParams`结构中的`AwsKmsKeyId`参数来指定 AWS KMS 密钥。您可以使用密钥的 ID、ARN 或别名来指定密钥 ID。

1. 使用`SinkIamRoleArn`参数指定访问 AWS KMS 密钥和接收器 Amazon S3 存储桶的 IAM 角色。

1. 或者，您可以使用`SseAwsKeyManagementParams`结构中的`AwsKmsEncryptionContext`参数来指定要与密 AWS KMS 钥构件一起使用的加密上下文，以增强安全性。

**注意**  
`AwsKmsKeyId`和`SinkIamRoleArn`参数是相互依赖的。当两者都存在且有效时，Media Capture Pipeline 将担任该角色，并使用指定的密钥将每个项目放入指定的 Amazon S3 存储桶接收器中。 AWS KMS [CreateMediaConcatenationPipeline](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaConcatenationPipeline.html)API 调用没有新参数，但如果指定了上述参数，则会使用上述参数。如果您计划连接工件，请确保您的资源配置按以下[配置](#using-kms-keys-for-encryption-config)部分所述进行设置，并且随着时间的推移保持不变。

## 配置
<a name="using-kms-keys-for-encryption-config"></a>

`SinkIamRoleArn`必须拥有与委托人相同的权限和访问权限才能将项目放入 Amazon S3 存储桶。有关 Amazon S3 存储桶中预期的默认权限的更多信息，请参阅为 Amazon [Chime SDK 媒体捕获管道创建 Amazon S3 存储桶](https://docs.aws.amazon.com/chime-sdk/latest/dg/create-s3-bucket.html)。要为单个对象启用 SSE，您的 Amazon S3 存储桶必须允许使用指定的 IAM 角色执行您期望从调用 IAM 身份执行的相同操作集。`SinkIamRoleArn`您可以通过在 Amazon S3 存储桶权限策略中添加以下委托人来实现这一目标。

```
...
"Principal": {
    ...
    "AWS": "arn:aws:iam::<YOUR_ACCOUNT_ID>;:role/<SINK_IAM_ROLE_NAME>"
    ...
},
...
```

`AwsKmsKeyId`应指向允许执行的`SinkIamRoleArn`密钥`GenerateDataKey`。如果要使用 Media Concatenation Pipeline，则 AWS KMS 密钥还应允许使用该操作。`Decrypt`请参阅以下示例。

**注意**  
资源设置为使用通配符`“*”`，在这种 AWS KMS 密钥策略的上下文中，通配符表示 “自身”。

```
{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::<YOUR_ACCOUNT_ID>:role/<YOUR_CUSTOMER_ROLE_ID>"
    },
    "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
    ],
    "Resource": "*"
}
```

该`SinkIamRoleArn`角色必须具有信任关系，允许服务承担该角色。请参阅以下示例。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "mediapipelines.chime.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "<YOUR_ACCOUNT_ID>"
        },
        "ArnLike": {
            "aws:SourceArn": "arn:aws:chime:*:<YOUR_ACCOUNT_ID>:*"
        }
    }
}
```

媒体捕获管道`SinkIamRoleArn`应具有以下最低权限策略。请参阅以下示例。

```
{
    "Effect": "Allow",
    "Action": "kms:GenerateDataKey",
    "Resource": "arn:aws:kms:<KMS_KEY_REGION>:<KMS_KEY_ACCOUNT_ID>:key/<MS_KEY_ID>",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "<YOUR_ACCOUNT_ID>"
        },
        "ArnLike": {
            "aws:SourceArn": "arn:aws:chime:*:<YOUR_ACCOUNT_ID>:*"
        }
    }
},
{
    "Effect": "Allow",
    "Action": ["s3:PutObject", "s3:PutObjectAcl"],
    "Resource": "arn:aws:s3:::<YOUR_DEDICATED_KMS_BUCKET_ID>/*",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "<YOUR_ACCOUNT_ID>"
        },
        "ArnLike": {
            "aws:SourceArn": "arn:aws:chime:*:<YOUR_ACCOUNT_ID>:*"
        }
    }
}
```

此外，必须允许呼叫者`SinkIamRoleArn`进入该服务。如果呼叫者没有此类权限，则应明确添加该权限。请参阅以下示例。

```
{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": "<SINK_IAM_ROLE_ARN>",
    "Condition": {
        "ArnLike": {
            "iam:AssociatedResourceArn": "arn:aws:chime:*:<YOUR_ACCOUNT_ID>:media-pipeline/*"
        },
        "StringEquals": {
            "iam:PassedToService": "mediapipelines.chime.amazonaws.com"
        }
    }
}
```

## 媒体串联实现
<a name="media-concatenation-implementatoin"></a>

如果您计划在 Media Captenation Pipeline 之后使用媒体连接管道，请参阅[构建 Amazon Chime 软件开发工具包媒体连接管道](create-concat-pipe-steps.md)以了解所需的权限。要使管道使用对象级 SSE 的 AWS KMS 密钥，必须扩展密 AWS KMS 钥和 Amazon S3 存储桶的`SinkIamRoleArn`权限（允许的操作）。请参阅以下示例。

```
...
{
    ...
    {
        ...
        "Action": ["kms:GenerateDataKey","kms:Decrypt"]
        "Resource": "arn:aws:kms:<KMS_KEY_REGION>:<KMS_KEY_ACCOUNT_ID>:key/<KMS_KEY_ID>",
        ...
    }
    ...
    {
        "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket"],
        "Resource": "arn:aws:s3:::<YOUR_DEDICATED_KMS_BUCKET_ID>/*",
    }
    ...
}
...
```

# 创建 Amazon Chime SDK 媒体捕获管道
<a name="create-capture-pipe"></a>

创建并配置一个或多个 Amazon S3 存储桶后，即可创建媒体捕获管道。

**创建媒体捕获管道**
+ 调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html) API。

  将存储桶 ARN 用作 `SinkArn` 参数。

成功后，Amazon Chime SDK 会创建参加并捕获会议的与会者。

创建媒体捕获管道并设置其权限后，您可以创建媒体连接管道，将 5 秒钟的媒体区块串联成一个文件。有关更多信息，请参阅本节后文中的 [为 Amazon Chime SDK 会议创建媒体串联管道](create-concat-pipe.md)。

# 使用 Amazon Chime SDK 媒体捕获构件
<a name="artifacts"></a>

在 Amazon Chime SDK 会议期间，媒体捕获管道会创建以下类型的构件。
+ 音频
+ 视频
+ 数据通道消息
+ 会议事件
+ 转录消息

管道在您的 Amazon S3 存储桶中的一组文件夹中创建构件，您可以配置音频和视频文件夹以限制某些类型的构件。以下各节说明文件夹结构、如何配置文件夹、如何为 Amazon S3 存储桶设置权限以及如何连接构件文件。

# 为 Amazon Chime SDK 媒体捕获管道配置音频文件夹
<a name="configure-audio"></a>

音频文件夹包含 5 秒钟的混合音频流 MP4 文件，这意味着它们包含来自所有与会者的音频以及当前演讲者的视频。该文件夹包含整个会议的文件。您可以根据需要将该文件夹配置为仅包含音频构件。每个文件名都包含一个 *yyyy-mm-dd-hour-min-seconds-milleseconds* 时间戳。时间戳采用 UTC，标记开始时间。您可以将该文件夹配置为仅包含音频构件。

```
"ArtifactsConfiguration": { 
         "Audio": { 
            "MuxType": "AudioOnly"
         },
         "Content": {
            "State": "Disabled"
         },
         "Video": {
            "State": "Disabled"
         }
      }
```

# 为 Amazon Chime SDK 媒体捕获管道配置视频文件夹
<a name="configure-video"></a>

视频文件夹包含包含视频流的 5 秒 MP4 文件，以及内容共享流（如果在 API 请求中指定）。每个文件名都包含一个 < yyyy-mm-dd-hour-min-seconds-milleseconds >-<attendeeID>时间戳和与会者 ID。内容共享视频块附加为 < yyyy-mm-dd-hour-min-seconds-milleseconds >-<attendeeID>\$1content .mp4。您可以将该文件夹配置为仅包含视频构件。

```
"ArtifactsConfiguration": { 
         "Audio": { 
            "MuxType": "AudioOnly"
         },
         "Content": {
            "State": "Disabled"
         },
         "Video": {
            "MuxType": "VideoOnly"
            "State": "Enabled"
         }
      }
```

# 了解 Amazon Chime SDK 媒体捕获管道的数据通道文件夹中的消息
<a name="data-channel"></a>

数据通道文件夹包含 .txt 格式的数据消息，每条消息都是一个 JSON 对象。消息在所有配置选项均可见。文件名包含 *yyyy-mm-dd-hour-min-seconds-milleseconds* 时间戳。此示例显示消息中的数据字段。

```
{
    "Timestamp": "string", 
    "Topic": "string", 
    "Data": "string", 
    "SenderAttendeeId": "string"
}
```

# 了解 Amazon Chime SDK 媒体捕获管道的 Amazon S3 存储桶文件夹结构
<a name="capture-folder-structure"></a>

媒体捕获管道的 S3 存储桶使用该文件夹结构。

```
S3 bucket path/
  audio
  video  
  data-channel
  meeting-events
  transcription-messages
```

# 了解 Amazon Chime SDK 媒体捕获管道的会议活动文件
<a name="meeting-events"></a>

会议事件文件夹包含 .txt 格式的会议事件，每个事件都是一个 JSON 对象。消息在所有配置选项均可见。文件名包含 < yyyy-mm-dd-hour-min-seconds-milleseconds > 时间戳。此示例显示典型事件文件中的字段和数据。

```
{
    "Timestamp": "string",
    "EventType": "AttendeeJoined | AttendeeLeft | AttendeeVideoJoined | AttendeeVideoLeft | ActiveSpeaker | CaptureStarted | CaptureEnded  | AudioTrackMute | AudioTrackUnmute",
    "EventParameters": {
        # ...
    }
}
```

# 了解 Amazon Chime SDK 媒体捕获管道的转录文件
<a name="transcription-messages"></a>

转录消息文件夹包含 .txt 格式的转录文件。但是，只有在启用实时转录时，该文件夹才会接收文件。有关启用实时转录的更多信息，请参阅 [使用 Amazon Chime SDK 实时转录](meeting-transcription.md)。

该文件夹包含所有部分和完整的转录消息，每条消息都是一个 JSON 对象。文件名包含 < yyyy-mm-dd-hour-min-seconds-milleseconds > 时间戳。您可以在 [处理收到的 Amazon Chime SDK 实时转录事件](delivery-examples.md) 查看转录文件示例。

# 为 Amazon Chime SDK 媒体捕获管道串联数据流
<a name="concatenate-streams"></a>

**注意**  
要自动执行媒体捕获构件串联的过程，请参阅本指南中的 [为 Amazon Chime SDK 会议创建媒体串联管道](create-concat-pipe.md)。

此示例使用 ffmpeg 将视频或音频文件串联成一个 mp4 文件。首先，创建一个包含所有输入文件的 filelist.txt 文件。使用以下格式：

```
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
```

接下来，使用该命令串联输入文件：

```
ffmpeg -f concat -i filelist.txt -c copy output.mp4
```

有关媒体串联管道的更多信息，请参阅本指南中的 [为 Amazon Chime SDK 会议创建媒体串联管道](create-concat-pipe.md)。

# 为 Amazon Chime SDK 会议创建媒体串联管道
<a name="create-concat-pipe"></a>

您可以使用媒体串联管道连接媒体捕获管道生成的构件（文件）。

媒体捕获管道通过对媒体流进行分块并将这些构件存储在 Amazon S3 存储桶中来捕获会议内容。媒体捕获管道会创建以下类型的构件：
+ 音频
+ 视频
+ 内容共享
+ 数据通道消息
+ 转录消息
+ 会议事件
+ 合成视频，即内容共享和以视频磁贴形式在网格中显示的多个视频流。

媒体串联管道允许您将每种类型的构件串联成一个文件，然后将这些较大的文件存储在 Amazon S3 存储桶中。无需等待媒体捕获事件结束即可创建媒体串联管道，但是只有在捕获管道停止时，串联管道才会开始串联。

**注意**  
媒体捕获管道、媒体连接管道和 Amazon S3 存储桶必须位于同一个账户中。 AWS 

**Topics**
+ [Amazon Chime SDK 媒体串联管道的架构](concat-architecture.md)
+ [构建 Amazon Chime 软件开发工具包媒体连接管道](create-concat-pipe-steps.md)
+ [了解 Amazon Chime SDK 串联管道的 Amazon S3 存储桶文件夹结构](concat-folder-structure.md)

# Amazon Chime SDK 媒体串联管道的架构
<a name="concat-architecture"></a>

下图显示媒体串联管道的架构。

![\[显示媒体串联管道架构的图表。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/concatenation-pipe-architecture-2.png)


在图中，接收 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html) 请求后，媒体管道控制面板在媒体管道数据面板中启动媒体捕获管道。然后，数据面板每 5 秒钟将捕获的数据块推送到捕获桶。接收 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaConcatenationPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaConcatenationPipeline.html) 请求后，媒体管道控制面板等待指定媒体捕获管道完成，再在媒体管道数据面板中启动媒体串联管道。然后，数据面板读取存储桶中捕获的数据块，并将串联的构件推送到串联存储桶。

# 构建 Amazon Chime 软件开发工具包媒体连接管道
<a name="create-concat-pipe-steps"></a>

您需要按照多步骤流程创建 Amazon Chime SDK 媒体串联管道。以下步骤描述了此过程。

1. 创建 Amazon S3 存储桶以用作媒体捕获管道的数据接收器，然后配置存储桶策略。有关为 Amazon S3 存储桶启用服务器端加密的信息，请参阅本指南中的[为 Amazon S3 存储桶启用服务器端加密](https://docs.aws.amazon.com/chime-sdk/latest/dg/sse-kms.html)。如果您已创建用于媒体捕获管道的 Amazon S3 存储桶，则必须将 `s3:GetObject` 和 `s3:ListBucket` 操作添加到该存储桶的策略中。`s3:ListBucket` 操作需要对存储桶本身的访问权限。其他操作需要存储桶中对象的访问权限。您必须使用两个不同的 Amazon 资源名称 (ARNs) 来指定存储桶级和对象级权限。

   以下示例显示了存储桶策略。根据需要复制并粘贴此示例。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "AWSChimeMediaCaptureBucketPolicy",
       "Statement": [
           {
               "Sid": "AWSChimeMediaCaptureBucketPolicy",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "mediapipelines.chime.amazonaws.com"
                   ]
               },
               "Action": [
                   "s3:PutObject",
                   "s3:PutObjectAcl",
                   "s3:GetObject",
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::[Bucket-Name]/*",
                   "arn:aws:s3:::[Bucket-Name]"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "123456789012"
                   },
                   "ArnLike": {
                   "aws:SourceArn": "arn:aws:chime:*:123456789012:*"
                   }
               }
           }
       ]
   }
   ```

------

1.  创建 Amazon S3 存储桶以用作媒体串联管道的数据接收器，然后配置存储桶策略。有关为 Amazon S3 存储桶启用服务器端加密的信息，请参阅本指南中的[为 Amazon S3 存储桶启用服务器端加密](https://docs.aws.amazon.com/chime-sdk/latest/dg/sse-kms.html)。

   以下示例显示了该策略。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "AWSChimeMediaConcatenationBucketPolicy",
       "Statement": [
           {
               "Sid": " AWSChimeMediaConcatenationBucketPolicy ",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "mediapipelines.chime.amazonaws.com"
                   ]
               },
               "Action": [
                   "s3:PutObject",
                   "s3:PutObjectAcl",
                   "s3:GetObject",
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::[Bucket-Name]/*",
                   "arn:aws:s3:::[Bucket-Name]"
               ],
               "Condition": {
                   "StringEquals": {
                   "aws:SourceAccount": "123456789012"
                   },
                   "ArnLike": {
                   "aws:SourceArn": "arn:aws:chime:*:123456789012:*"
                   }
               }
           }
       ]
   }
   ```

------
**注意**  
您可以将单个 Amazon S3 存储桶用于媒体捕获和媒体串联管道。但是，如果您这样做，则必须将 `s3:GetObject` 和 `s3:ListBucket` 的访问权限添加到步骤 2 中所示的媒体串联存储桶策略中。如果您不希望串联存储桶策略拥有这些权限，则为每个管道创建单独的存储桶。

1. 使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline.html) API 创建媒体捕获管道。作为其中的一部分，获取管道的 ARN。有关获取 ARN 的信息，请参阅 [了解 Amazon Chime SDK 媒体管道创建](create-pipeline.md)。您将在下一个步骤中使用 ARN。

1. 使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaConcatenationPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaConcatenationPipeline.html) API 创建串联管道。

   以下示例显示请求主体。该*Path*字段是可选的，默认为串联管道的 ID。
**注意**  
您必须使用最近 30 天内创建的 `MediaPipelineArn`。

   ```
   {
       "Sources": [
           {
               "Type": "MediaCapturePipeline",
               "MediaCapturePipelineSourceConfiguration": {
                   "MediaPipelineArn": "Media_Pipeline_Arn",  //must be <30 days old
                   "ChimeSdkMeetingConfiguration": {
                       "ArtifactsConfiguration": {
                           "Audio": {
                               "State": "Enabled"
                           },
                           "Video": {
                               "State": "Enabled | Disabled"
                           },
                           "Content": {
                               "State": "Enabled | Disabled"
                           },
                           "DataChannel": {
                               "State": "Enabled | Disabled"
                           },
                           "TranscriptionMessages": {
                               "State": "Enabled | Disabled"
                           },
                           "MeetingEvents": {
                               "State": "Enabled | Disabled"
                           },
                           "CompositedVideo": {
                               "State": "Enabled | Disabled"
                           }
                       }
                   }
               }
           }
       ],
       "Sinks": [
           {
               "Type": "S3Bucket",
               "S3BucketSinkConfiguration": {
                   "Destination": "arn:aws:s3:::[Bucket_Name]/[Path]"
               }
           }
       ]
   }
   ```

   每当捕获管道停止时，串联就会开始。串联管道在完成串联后停止。

# 了解 Amazon Chime SDK 串联管道的 Amazon S3 存储桶文件夹结构
<a name="concat-folder-structure"></a>

媒体串联管道的 Amazon S3 存储桶使用该文件夹结构：

```
S3 bucket path/
  audio
  video
  composited-video
  data-channel
  meeting-events
  transcription-messages
```

**注意**  
如果您在创建媒体管道时指定前缀，则文件夹的路径将变为*存储桶名称*/*前缀*。如果没有前缀，则路径将变为*存储桶名称*/*媒体管道 ID*。您可以在 `S3BucketSinkConfiguration` 对象的 `Destination` 字段中指定前缀。串联后的文件名由*媒体管道 ID*.mp4（媒体文件）和*媒体管道 ID*.txt（用于文本文件）组成。

# 为 Amazon Chime SDK 会议创建媒体实时连接器管道
<a name="connector-pipe-config"></a>

以下各节列出并描述媒体实时连接器管道的实时消息协议 (RTMP)、音频和视频设置。

**RTMP 设置**  
媒体直播连接器管道支持通过 TLS/SSL 连接进行的 RTMP。接收器 URL 由流 URL 和流密钥组成。请 URLs 遵循以下格式：

`rtmp(s)://stream-server/stream-key`

以下示例显示如何连接到常见的流传输平台。
+ **亚马逊互动视频服务 (IVS) — rtmps: //a1b2c3d4e5f6.global-contribute.live**-video.net: 443/app/ *IVS-stream-key*
+ **YouTube**— rtmps: //a.youtube.com/live2/ *stream-key*
+ **Twitch** — rtmps: //live.twitch.tv/app/ *primary-stream-key*

**重要**  
RTMPS 使用加密帮助确保数据流不会被未经授权的实体拦截。作为最佳实践，当您需要更高的数据安全性时，使用 RTMPS。

**音频设置**  
媒体实时连接器管道支持以下音频设置：
+ **编解码器** — AAC
+ **采样率** — 44100Hz 或 48000Hz。默认值为 44100Hz。
+ **声道** — 单声道或立体声。默认值为单声道。

**视频设置**  
媒体实时连接器管道使用 H264 编码器。您可以使用 1280 x 720 的高清或 1920 x 1080 的全高清。两种分辨率都使用每秒 30 帧，每两秒钟有一个关键帧。

**停止媒体实时连接器管道**  
作为停止媒体实时连接器管道的最佳实践，调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html) API。在 IVS 等流传输平台上终止数据流并不会停止媒体实时连接器管道。

# 使用 Amazon Chime SDK 创建媒体流管道
<a name="create-media-stream-pipeline"></a>

媒体流管道捕获会议中所有与会者的个人音频，以及媒体连接管道生成的混合音频。所有媒体流管道会将其数据保存至 [Amazon Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html) (KVS)。

您可以通过调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html) API 来创建视频流。您可以为每次 Amazon Chime SDK 会议创建一个媒体流管道。

**注意**  
如果会议使用可选区域作为其所在区域 [MediaRegion](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html#chimesdk-meeting-chime_CreateMeeting-request-MediaRegion)，则 KVS 直播必须位于同一区域。例如，如果会议使用 `af-south-1` 区域，则 KVS 流也必须位于 `af-south-1` 内。但是，如果会议使用的是 AWS 默认开启的区域，则 KVS 流可以位于任何可用区域，包括选择加入区域。例如，如果会议使用 `ca-central-1`，则 KVS 流可以位于 `eu-west-2`、`us-east-1`、`af-south-1` 或 Amazon Chime SDK 支持的任何其他区域。  
要了解会议使用哪个 AWS 区域，请调用 [GetMeeting](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_GetMeeting.html)API 并使用响应中的[MediaRegion](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html#chimesdk-meeting-chime_CreateMeeting-request-MediaRegion)参数。  
有关选择加入区域的更多信息，请参阅本指南[Amazon Chime SDK 可用的 AWS 区域](sdk-available-regions.md)中的内容，以及[账户*管理参考指南中的指定您的AWS 账户*可以使用的 AWS 区域](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html#rande-manage-enable.html)。

以下部分介绍如何创建媒体流管道。按照列出的顺序操作。

**Topics**
+ [为 Amazon Chime SDK 媒体流管道创建 Kinesis VideoStreams 池](create-kvs-pool.md)
+ [Amazon Chime SDK 媒体流管道的 Kinesis VideoStreams 池的示例代码](pool-creation-code.md)
+ [创建 Amazon Chime SDK 媒体流管道](create-stream-pipeline.md)
+ [Amazon Chime SDK 媒体流管道的示例代码](pipeline-creation-code.md)
+ [为 Amazon Chime SDK 媒体流管道使用事件总线通知](media-stream-event-bridge.md)
+ [使用 Amazon Chime SDK 媒体流管道数据](media-stream-tips-tricks.md)

# 为 Amazon Chime SDK 媒体流管道创建 Kinesis VideoStreams 池
<a name="create-kvs-pool"></a>

您的媒体流管道的 Kinesis Video Streams (KVS) 池必须与 Amazon Chime SDK 会议属于 AWS 同一个账户。您可以通过调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html) API 来创建 Kinesis Video Streams 池。

下图显示 Kinesis Video Streams 池的媒体管道架构。图像中的数字对应于以下带编号的文本：

![\[显示创建 Kinesis Video Streams 池的 API 调用的图表。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/media-stream-pool-architecture.png)


在图中：

1. 您调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html) API。

1. 媒体管道控制面板可代表您在您的账户中创建和管理 Kinesis Video Streams (KVS) 和池。

KVS 池操作，即在池中创建、更新和删除流的过程，是异步的。因此，事件总线通知使用 `Chime Media Pipeline Kinesis Video Pool State Change` 详细信息类型传达池中流的状态。

您可以创建一次池，然后在不同会议中重复使用。您也可以根据需要创建不同的池，并在不需要时将其删除。

根据您的并发调用突增量，池会自动纵向扩展。您可以删除任何不需要的池。

**注意**  
删除池时，必须等待池完全删除，才能删除池中的 KVS 流。事件总线通知将指示池何时完全删除。这种情况发生在使用池进行所有会议结束之后。您也可以调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipelineKinesisVideoStreamPool.html) API 来查看给定 KVS 池的 `PoolId`。  
当您调用 Kinesis Video Streams [https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_DeleteStream.html](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_DeleteStream.html) API 时，您可以使用该命名字符串在池中搜索和删除流。您也可以调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipelineKinesisVideoStreamPool.html) API 来查看给定 KVS 池的 `PoolId`。以下部分中的相关示例将说明如何操作。

# Amazon Chime SDK 媒体流管道的 Kinesis VideoStreams 池的示例代码
<a name="pool-creation-code"></a>

以下示例显示如何创建、更新、获取、列出和删除 Kinesis Video Streams (KVS) 池。展开每个部分以了解更多信息。

## 导入和常用变量
<a name="imports-variables"></a>

```
'''
Define imports and common variables
'''

import boto3
from uuid import uuid4
import json

client = boto3.client("chime-sdk-media-pipelines", region_name='us-east-1')
pool_name = 'MyDemoKvsPool'

def pretty_print_json(obj):
    print(json.dumps(obj, default=str, indent=4))
```

## CreateMediaPipelineKinesisVideoStreamPool
<a name="create-stream-sample"></a>

```
response = client.create_media_pipeline_kinesis_video_stream_pool(
        StreamConfiguration={
            'Region': 'us-east-1',
            'DataRetentionInHours': 24
        },
        PoolName=pool_name,
        ClientRequestToken=str(uuid4()),
        Tags=[
            {
                'Key': 'MyTagForAccessControl',
                'Value': 'SomeTagValue'
            },
        ]
)

pretty_print_json(response['KinesisVideoStreamPoolConfiguration'])
```

**输出**：

```
{
    "PoolArn": "arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/MyDemoKvsPool",
    "PoolName": "MyDemoKvsPool",
    "PoolId": "ChimeMediaPipelines-MyDemoKvsPool-1f4e1a69-e718-4884-bf92-8a393ac0405b",
    "PoolStatus": "CREATING",
    "StreamConfiguration": {
        "Region": "us-east-1",
        "DataRetentionInHours": 24
    },
    "CreatedTimestamp": "2023-10-13 01:26:09.979000+00:00",
    "UpdatedTimestamp": "2023-10-13 01:26:09.979000+00:00"
}
```

## GetMediaPipelineKinesisVideoStream
<a name="get-stream-sample"></a>

```
response = client.get_media_pipeline_kinesis_video_stream_pool(
        Identifier=pool_name
)

pretty_print_json(response['KinesisVideoStreamPoolConfiguration'])
```

**输出**：

```
{
    "PoolArn": "arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/MyDemoKvsPool",
    "PoolName": "MyDemoKvsPool",
    "PoolId": "ChimeMediaPipelines-MyDemoKvsPool-1f4e1a69-e718-4884-bf92-8a393ac0405b",
    "PoolStatus": "ACTIVE",
    "StreamConfiguration": {
        "Region": "us-east-1",
        "DataRetentionInHours": 24
    },
    "CreatedTimestamp": "2023-10-13 01:26:09.979000+00:00",
    "UpdatedTimestamp": "2023-10-13 01:26:09.979000+00:00"
}
```

## UpdateMediaPipelineKinesisVideoStream
<a name="update-stream-sample"></a>

```
response = client.update_media_pipeline_kinesis_video_stream_pool(
    Identifier=pool_name,
    StreamConfiguration={
        'DataRetentionInHours': 48
    }
)
pretty_print_json(response['KinesisVideoStreamPoolConfiguration'])
```

**输出**：

```
{
    "PoolArn": "arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/MyDemoKvsPool",
    "PoolName": "MyDemoKvsPool",
    "PoolId": "ChimeMediaPipelines-MyDemoKvsPool-d08c26ae-0336-4e2e-acdf-805a7d71b891",
    "PoolStatus": "UPDATING",
    "PoolSize": 40,
    "StreamConfiguration": {
        "Region": "us-east-1",
        "DataRetentionInHours": 48
    },
    "CreatedTimestamp": "2023-10-13 01:44:23.010000+00:00",
    "UpdatedTimestamp": "2023-10-13 01:44:28.486000+00:00"
}
```

## ListMediaPipelineKinesisVideoStream
<a name="list-stream-sample"></a>

```
list_of_pools = []
max_results = 100
next_token = None
while(True):
    if next_token:
        response = client.list_media_pipeline_kinesis_video_stream_pools(
            NextToken=next_token,
            MaxResults=max_results
        )
    else:
        response = client.list_media_pipeline_kinesis_video_stream_pools(
            MaxResults=max_results
        )

    list_of_pools.extend(response['KinesisVideoStreamPools'])
    next_token = response.get('NextToken')
    if not next_token:
        break
pretty_print_json(list_of_pools)
```

**输出**：

```
[
    {
        "PoolName": "MyDemoKvsPool",
        "PoolId": "ChimeMediaPipelines-MyDemoKvsPool-6588e703-f046-4288-ba7f-0c03de76a6bb",
        "PoolArn": "arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/MyDemoKvsPool"
    }
]
```

## DeleteMediaPipelineKinesisVideoStream
<a name="delete-stream-sample"></a>

```
client.delete_media_pipeline_kinesis_video_stream_pool(
    Identifier=pool_name
)
```

**输出**：成功的 `delete_media_pipeline_kinesis_video_stream_pool` 请求没有正文。

# 创建 Amazon Chime SDK 媒体流管道
<a name="create-stream-pipeline"></a>

chime 媒体流管道必须与 Amazon Chime SDK 会议属于同一个 AWS 账户。您可以通过调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaStreamPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaStreamPipeline.html) API 并指定来源和接收器来创建 Amazon Chime SDK 媒体流管道。

下图显示 Amazon Chime SDK 媒体流管道的架构。图表中的数字对应于以下带编号的文本。

![\[显示创建媒体流池的 API 调用的图表。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/media-stream-pipe-architecture.png)


在图中：

1. 您调用 `CreateMediaStreamPipeline` API。在请求中，指定流的来源和接收器。是否想要捕获单个音频和/或混合音频。请求中包含 KVS 池的 ARN。
   + 来源数组由 `SourceType` 和 `SourceArn` 组成。您必须使用 `ChimeSdkMeeting SourceType`。`SourceArn` 是 `ChimeSdkMeeting` 的 ARN。
   + 接收器数组由 `SinkType`、`SinkArn`、`ReservedStreamCapacity` 和 `MediaStreamType` 组成。我们仅支持 `KinesisVideoStreamPoolSinkType`。`SinkArn` 是 `KinesisVideoStreamPool` 的 ARN。`MediaStreamType` 控制流式传输到接收器的媒体类型，`MixedAudio` 或 `IndividualAudio`。`ReservedStreamCapacity` 设置为 `KinesisVideoStreamPool` 的 `MediaStreamType` 分配的流数量。
     + 如果要同时流式传输 `IndividualAudio` 和 `MixedAudio`，则在 `Sinks` 数组中创建两个接收器对象，一个用于 `IndividualAudio`，另一个用于 `MixedAudio`。`SinkArn`（`KinesisVideoStreamPool` 的 ARN）可能因每个接收器的不同而有所不同。
     + 要仅流式传输单个音频或混合音频，创建一个包含所需 `MediaStreamType` 的接收器对象。
   + 注意以下几点：
     + 使用 `KinesisVideoStreamPool` 作为 `SinkType` 调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaStreamPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaStreamPipeline.html) API 时，`SinkARN` 必须属于正在调用的 `CreateMediaStreamPipeline` 所在的控制面板区域。

       例如，如果您在 `us-east-1` 中创建媒体流管道，则必须使用 `us-east-1` 中的 `KinesisVideoStreamPool`。
     + `ReservedStreamCapacity` 应在您指定 `MixedAudio` `MediaStreamType` 时为 **1**，并且在指定 `IndividualAudio` `MediaStreamType` 时介于 **1-10** 之间。

1. 媒体管道数据平面调用 KVS [ PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html)API 将单个音频存储在属于您指定的 KVS 池的 KVS 流中。

1. 媒体管道数据面板调用 KVS `PutMedia` API 将混合音频存储在属于您指定 KVS 池的流中。

**注意**  
调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaStreamPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaStreamPipeline.html) API 后，生成器可以使用[媒体管道事件](media-pipe-events.md)或调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipeline.html) API 确定管道状态是否为 `InProgress`。  
管道状态达到 `InProgress` 后，媒体（`IndividualAudio` 和 `MixedAudio` 的任意组合）就会流式传输到 KVS。  
对于`IndividualAudio`直播类型，与会者 IDs 与从中分配的 KVS 直播之间存在 1:1 映射。`KinesisVideoStreamPool`此映射适用于媒体管道的整个生命周期。  
要知道哪个 KVS 直播映射到出席者 ID 或为其分配了哪个 KVS 直播 MixedAudio，请使用以下方法之一：  
使用[事件总线通知](media-stream-event-bridge.md)。每条通知都提供诸如与会者 IDs 以及直播与会者音频的 KVS ARN 之类的信息。当 `IndividualAudio` 或 `MixedAudio` 流会话开始时，我们会发送一个 `chime:MediaPipelineKinesisVideoStreamStart` 事件。当与会者离开调用（针对 `IndividualAudio`）或会议结束时，流会话就会结束。
使用 Kinesis Video Streams 随每个片段发送的持久性元数据。元数据包含与事件总线发送的内容相似的信息。生成器需要通过此解决方案在 [https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_ListStreams.html](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_ListStreams.html) Kinesis Video Streams API 中将池名称指定为前缀来解析 `KinesisVideoStreamPool` 的所有流。
删除会议时或为媒体流管道调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html) API 时，该媒体流管道就会终止。此外，还会发送[事件总线通知](media-pipe-events.md)以指示媒体管道终止。

# Amazon Chime SDK 媒体流管道的示例代码
<a name="pipeline-creation-code"></a>

以下示例显示如何为混合音频和/或单个音频创建媒体流管道。展开每个部分以了解更多信息。

## CreateMediaStreamPipeline 用于混合音频
<a name="create-mixed-sample"></a>

```
response = client.create_media_stream_pipeline(
    Sources=[
        {
            'SourceType': 'ChimeSdkMeeting',
            'SourceArn': 'arn:aws:chime:us-east-1:account-ID:meeting/bed804cf-8cf0-4991-9b8d-d1acc2987433'
        },
    ],
    Sinks=[
        {
            'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
            'SinkType': 'KinesisVideoStreamPool',
            'ReservedStreamCapacity': 1,
            'MediaStreamType': 'MixedAudio'
        },
    ],
    ClientRequestToken='sample token',
    Tags=[
        {
            'Key': 'sample key',
            'Value': 'sample value'
        },
    ]
)
```

**响应：**

```
{
    'MediaStreamPipeline': {
        'MediaPipelineId': '45bc79a0-4591-4ebe-a642-d42c4e279f2d',
        'MediaPipelineArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline/45bc79a0-4591-4ebe-a642-d42c4e279f2d',
        'CreatedTimestamp': '2023-07-25T21:48:48.265Z',
        'UpdatedTimestamp': '2023-07-25T21:48:48.376Z',
        'Status': 'Initializing',
        'Sources': [
            {
                'SourceType': 'ChimeSdkMeeting',
                'SourceArn': 'arn:aws:chime:us-east-1:account-ID:meeting/bed804cf-8cf0-4991-9b8d-d1acc2987433'
            },
        ],
        'Sinks': [
            {
                'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
                'SinkType': 'KinesisVideoStreamPool',
                'ReservedStreamCapacity': 1,
                'MediaStreamType': 'MixedAudio'
            },
        ]
    }
}
```

## CreateMediaStreamPipeline 用于单个音频
<a name="create-individual-sample"></a>

```
response = client.create_media_stream_pipeline(
    Sources=[
        {
            'SourceType': 'ChimeSdkMeeting',
            'SourceArn': 'arn:aws:chime:us-east-1:account-ID:meeting/bed804cf-8cf0-4991-9b8d-d1acc2987433'
        },
    ],
    Sinks=[
        {
            'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
            'SinkType': 'KinesisVideoStreamPool',
            'ReservedStreamCapacity': 5,
            'MediaStreamType': 'IndividualAudio'
        },
    ],
    ClientRequestToken='sample token',
    Tags=[
        {
            'Key': 'sample key',
            'Value': 'sample value'
        },
    ]
)
```

**响应：**

```
{
    'MediaStreamPipeline': {
        'MediaPipelineId': '45bc79a0-4591-4ebe-a642-d42c4e279f2d',
        'MediaPipelineArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline/45bc79a0-4591-4ebe-a642-d42c4e279f2d',
        'CreatedTimestamp': '2023-07-25T21:48:48.265Z',
        'UpdatedTimestamp': '2023-07-25T21:48:48.376Z',
        'Status': 'Initializing',
        'Sources': [
            {
                'SourceType': 'ChimeSdkMeeting',
                'SourceArn': 'arn:aws:chime:us-east-1:account-ID:meeting/bed804cf-8cf0-4991-9b8d-d1acc2987433'
            },
        ],
        'Sinks': [
            {
                'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
                'SinkType': 'KinesisVideoStreamPool',
                'ReservedStreamCapacity': 5,
                'MediaStreamType': 'IndividualAudio'
            },
        ]
    }
}
```

## CreateMediaStreamPipeline 用于混合和单个音频
<a name="create-both-sample"></a>

```
response = client.create_media_stream_pipeline(
    Sources=[
        {
            'SourceType': 'ChimeSdkMeeting',
            'SourceArn': 'arn:aws:chime:us-east-1:account-ID:meeting/bed804cf-8cf0-4991-9b8d-d1acc2987433'
        },
    ],
    Sinks=[
        {
            'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
            'SinkType': 'KinesisVideoStreamPool',
            'ReservedStreamCapacity': 1,
            'MediaStreamType': 'MixedAudio'
        },
        {
            'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
            'SinkType': 'KinesisVideoStreamPool',
            'ReservedStreamCapacity': 5,
            'MediaStreamType': 'IndividualAudio'
        },
    ],
    ClientRequestToken='sample token',
    Tags=[
        {
            'Key': 'sample key',
            'Value': 'sample value'
        },
    ]
)
```

**响应：**

```
{
    'MediaStreamPipeline': {
        'MediaPipelineId': '45bc79a0-4591-4ebe-a642-d42c4e279f2d',
        'MediaPipelineArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline/45bc79a0-4591-4ebe-a642-d42c4e279f2d',
        'CreatedTimestamp': '2023-07-25T21:48:48.265Z',
        'UpdatedTimestamp': '2023-07-25T21:48:48.376Z',
        'Status': 'Initializing',
        'Sources': [
            {
                'SourceType': 'ChimeSdkMeeting',
                'SourceArn': 'arn:aws:chime:us-east-1:account-ID:meeting/bed804cf-8cf0-4991-9b8d-d1acc2987433'
            },
        ],
        'Sinks': [
            {
                'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
                'SinkType': 'KinesisVideoStreamPool',
                'ReservedStreamCapacity': 1,
                'MediaStreamType': 'MixedAudio'
            },
            {
                'SinkArn': 'arn:aws:chime:us-east-1:account-ID:media-pipeline-kinesis-video-stream-pool/foo',
                'SinkType': 'KinesisVideoStreamPool',
                'ReservedStreamCapacity': 5,
                'MediaStreamType': 'IndividualAudio'
            },
        ]
    }
}
```

# 为 Amazon Chime SDK 媒体流管道使用事件总线通知
<a name="media-stream-event-bridge"></a>

除了 [使用 Amazon Chime SDK 媒体管道事件](media-pipe-events.md) 之外，媒体流管道还会在开始和停止流式传输至 KVS 以及视频池状态发生变化时发送事件总线通知。

**Topics**
+ [了解 Amazon Chime SDK 媒体流管道事件](stream-pipe-events.md)
+ [了解 Amazon Chime SDK 媒体流管道的 Kinesis Video Streams 池事件](media-stream-pool-events.md)

# 了解 Amazon Chime SDK 媒体流管道事件
<a name="stream-pipe-events"></a>

媒体流管道发送以下事件。展开每个部分以了解更多信息。

## Amazon Chime 媒体流管道 Kinesis 视频流开始
<a name="stream-pipe-kvs-start"></a>

当媒体流管道开始接收来自会议的音频并将音频流式传输到 KVS 时，Amazon Chime SDK 媒体管道会发送此事件。空白的 `AttendeeId` 和 `ExternalUserId` 字段表示媒体管道将混合音频发送到 KVS 流。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamStart", 
        "timestamp": 1627503649251, 
        "meetingId": "1e6bf4f5-f4b5-4917-b8c9-bda45c340706", 
        "externalMeetingId": "Meeting_Id", 
        "mediaPipelineId": "e40ee45e-2ed1-408e-9156-f52b8208a491", 
        "mediaRegion": "ap-southeast-1",
        
        "attendeeId": "Attendee_Id", 
        "externalUserId": "External_User_Id",
                
        "kinesisVideoStreamArn": "arn:aws:kinesisvideo:us-east-1:123456:stream/Chime*",
        "startFragmentNumber": "1234567899444",
        "startTime": "yyyy-mm-ddThh:mm:ssZ"
                
    }
}
```

## Amazon Chime 媒体流管道 Kinesis 视频流结束
<a name="stream-pipe-kvs-stop"></a>

当流式传输至 KVS 结束时，媒体管道会将此事件发送到事件总线。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamEnd", 
        "timestamp": 1627503649251, 
        "meetingId": "1e6bf4f5-f4b5-4917-b8c9-bda45c340706", 
        "externalMeetingId": "Meeting_Id", 
        "mediaPipelineId": "e40ee45e-2ed1-408e-9156-f52b8208a491", 
        "mediaRegion": "ap-southeast-1",
        
        "attendeeId": "Attendee_Id", 
        "externalUserId": "External_User_Id",
                
        "kinesisVideoStreamArn": "arn:aws:kinesisvideo:us-east-1:123456:stream/Chime*",
        "startFragmentNumber": "1234567899444",
        "startTime": "yyyy-mm-ddThh:mm:ssZ",
        "endTime": "yyyy-mm-ddThh:mm:ssZ",
        "endFragmentNumber": "1234567899555"
    }
}
```

# 了解 Amazon Chime SDK 媒体流管道的 Kinesis Video Streams 池事件
<a name="media-stream-pool-events"></a>

当池的状态发生变化时，媒体管道会将以下事件发送到事件总线。展开每个部分以了解更多信息。

## Amazon Chime 媒体管道 Kinesis 视频池已激活
<a name="kvs-pool-active"></a>

媒体管道在 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaPipelineKinesisVideoStreamPool.html) API 创建池之后发送此事件。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline Kinesis Video Pool State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamPoolActive", 
        "timestamp": 1627503649251,
        "mediaRegion": "ap-southeast-1",
        "poolArn" : "ARN of the KVS Pool"
    }
}
```

## Amazon Chime 媒体管道 Kinesis 视频池已更新
<a name="kvs-pool-updated"></a>

媒体管道在 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaPipelineKinesisVideoStreamPool.html) API 更新池后发送此事件。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline Kinesis Video Pool State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamPoolUpdated", 
        "timestamp": 1627503649251,
        "mediaRegion": "ap-southeast-1",
        "poolArn" : "ARN of the KVS Pool"
    }
}
```

## Amazon Chime 媒体管道 Kinesis 视频池已删除
<a name="kvs-pool-deleted"></a>

媒体管道在 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipelineKinesisVideoStreamPool.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipelineKinesisVideoStreamPool.html) 删除池时将此事件发送到事件总线。

有关删除池的更多信息，请参阅本节中的 [为 Amazon Chime SDK 媒体流管道创建 Kinesis VideoStreams 池](create-kvs-pool.md)。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline Kinesis Video Pool State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamPoolDeleted", 
        "timestamp": 1627503649251,
        "mediaRegion": "ap-southeast-1",
        "poolArn" : "ARN of the KVS Pool"
    }
 }
```

## Amazon Chime 媒体管道 Kinesis 视频池临时故障
<a name="kvs-pool-temp-failure"></a>

当视频池暂时出现故障时，媒体管道会向事件总线发送以下事件。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline Kinesis Video Pool State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamPoolTemporaryFailure", 
        "timestamp": 1627503649251,
        "mediaRegion": "ap-southeast-1",
        "poolArn" : "ARN of the KVS Pool"
    }
 }
```

## Amazon Chime 媒体管道 Kinesis 视频池永久故障
<a name="kvs-pool-perm-failure"></a>

当视频池出现永久故障时，媒体管道会向事件总线发送以下事件。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline Kinesis Video Pool State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamPoolPermanentFailure", 
        "timestamp": 1627503649251,
        "mediaRegion": "ap-southeast-1",
        "poolArn" : "ARN of the KVS Pool"
    }
}
```

如果您的 AWS 账户已超过其 Amazon Kinesis 视频流限制，您将收到以下额外的媒体渠道事件。

```
{
    "version": "0",
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483",
    "detail-type": "Chime Media Pipeline Kinesis Video Pool State Change",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "2021-07-28T20:20:49Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "eventType": "chime:MediaPipelineKinesisVideoStreamPoolStreamLimitExceeded",
        "timestamp": 1627503649251,
        "mediaRegion": "ap-southeast-1",
        "poolArn" : "ARN of the KVS Pool"
    }
}
```

# 使用 Amazon Chime SDK 媒体流管道数据
<a name="media-stream-tips-tricks"></a>

您可以使用通知中的元数据获取 KVS ARNs、片段编号和片段时间戳。这些信息可以帮助您处理 KVS 流中的音频数据。

此外，您还可以将 KVS ARNs 与 KVS 配合使用 APIs ，从流中读取数据。根据用例，您可以调用[https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_GetMedia.html](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_GetMedia.html)和[https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetMediaForFragmentList.html](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetMediaForFragmentList.html) APIs。通常，在调用 [https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_ListFragments.html](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_ListFragments.html) 之前会先调用 `GetMediaForFragmentList` API。有关更多信息，请参阅 *Amazon Kinesis Vid FAQs eo Streams* 中的 “[从直播中读取数据](https://aws.amazon.com/kinesis/video-streams/faqs/)”。

根据使用案例，生成器可以使用 Kinesis Video Streams 解析器库，而该库反过来又使用 KVS [https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_GetMedia.html](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_GetMedia.html) API。

媒体流管道会将以下会议和与会者元数据添加到每个片段。

```
"meetingId"
"externalMeetingId"
"attendeeId"
"externalUserId"
"sampleRate"
"channels"
```

媒体数据以 MKV 格式存储。所有 MKV 音频数据均采用 AAC 编码。有关更多信息，请参阅《Amazon Kinesis Video Streams 开发人员指南》**中的 [Kinesis Video Streams 数据模型](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/how-data.html)。

# 在 Amazon Chime SDK 会议中将音频和视频合成单一视图
<a name="pipeline-compositing"></a>

Amazon Chime SDK 媒体管道支持将音频、网络摄像头视频和内容共享流合成到单一视图中。然后，您可以使用直播连接器将该单一视图发送到流媒体服务，例如亚马逊互动视频服务、Twitch 或 YouTube Live。合成视频也可以捕获到 Amazon Simple Storage Service 中进行存储或进一步消耗。

合成使用名为 `GridView` 的默认屏幕布局，该布局具有以下行为。
+ 当只有网络摄像头视频处于活动状态时，`GridView` 按以下网格模式组织视频流：  
![\[显示人物轮廓的四列四行网格。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/grid-no-content-share.png)

  网格最多显示 25 个网络摄像头视频流，并根据用户打开摄像头的时间对磁贴进行排序。
+ `GridView` 提供了两个画布方向，`Landscape` 和 `Portrait`。横向是默认方向，全高清支持 1280 x 720 和 1920 x 1080 的视频分辨率。横向支持 720 x 1280 和 1080 x 1920 的全高清分辨率。
+ 您可以配置视频磁贴的顺序、位置、总数、磁贴纵横比、角半径、边框颜色、边框厚度和高光颜色。
+ 当会议期间有人共享屏幕时，网络摄像头视频磁贴会动态切换，以便为内容共享腾出空间。您可以使用下一节中描述的布局配置控制这些过渡以及视频磁贴的位置。

**关于布局配置**  
当有人开始内容共享时，您可以使用以下布局配置选择如何合成内容共享和网络摄像头视频流。
+ `ActiveSpeakerOnlyConfiguration` 全屏合成内容视频，将当前发言人的网络摄像头视频叠加在角落里。您可以指定角落。
+ `PresenterOnlyConfiguration` 全屏合成内容视频，将主讲人的网络摄像头视频叠加在角落里。您可以指定角落。
+ `VerticalLayoutConfiguration` 在相邻的垂直列中将内容视频与网络摄像头视频合成。您可以将该列显示在内容共享的右侧或左侧。
+ `HorizontalLayoutConfiguration` 在相邻水平行中将内容视频与网络摄像头视频合成。您可以显示内容共享上方或下方的行。

根据内容共享是否处于活动状态，合成布局会自动在 `GridView` 和您选择的布局之间切换。

以下主题介绍如何使用全局 `GridView` 设置及每种配置布局。

**Topics**
+ [在 Amazon Chime SDK 会议中设置画布方向以便合成](canvas-orientation.md)
+ [在 Amazon Chime SDK 会议中设置边框和角属性以便合成](video-attribute.md)
+ [在 Amazon Chime SDK 会议中使用布局配置以便合成](compositing-layouts.md)

# 在 Amazon Chime SDK 会议中设置画布方向以便合成
<a name="canvas-orientation"></a>

在合成中，*画布*包含您的所有视频流。您可以为画布指定 `Landscape` 或 `Portrait` 方向。横向提供 16:9 的纵横比。纵向提供 9:16 的纵横比。

下图显示了纵向方向。

![\[显示纵向（垂直）窗口中两个视频磁贴的图像。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/compositing-portrait-with-tile.png)


以下示例显示如何使用右上角的视频磁贴完成纵向画布。在此示例中，活跃发言人显示在磁贴中。有关更多信息，请参阅 [ActiveSpeakerOnlyConfiguration](compositing-layouts.md#active-speaker-only)。

```
{
   "CompositedVideo":{
      "Layout":"GridView",
      "Resolution":"FHD",
      "GridViewConfiguration":{
         "ContentShareLayout":"ActiveSpeakerOnly",
         "ActiveSpeakerOnlyConfiguration":{
            "ActiveSpeakerPosition":"TopRight"
         }
      },
      "CanvasOrientation": "Portrait"       
   }
}
```

下图显示了横向方向。

![\[显示横向（水平）窗口中两个视频磁贴的图像。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/compositing-landscape-with-tile.png)


**CanvasOrientation**  
*描述* — 方向设置，横向或纵向。  
*允许的值* — `Landscape` \$1 `Portrait`  
*必填* — 否  
*默认值* — 横向

# 在 Amazon Chime SDK 会议中设置边框和角属性以便合成
<a name="video-attribute"></a>

根据需要，您可以使用 `VideoAttribute` 参数为视频磁贴指定边框和角设置。您可以指定宽度、颜色和圆角。您也可以指定突出显示颜色，即当有人讲话时，边框会变为该颜色。

无论内容共享如何，您的属性设置都适用于所有布局。

下图显示应用了边框颜色和角半径的视频磁贴。

![\[带有红色边框和圆角的屏幕共享和视频磁贴的图像。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/compositing-speaker-border.png)


以下示例显示如何使用每个属性。在这种情况下，视频磁贴的圆角为五个像素半径。磁贴有绿色边框，宽度也为五个像素。当发言人讲话时，`HighlightColor` 属性会将边框颜色更改为红色。

```
{
   "CompositedVideo":{
      "Layout":"GridView",
      "Resolution":"FHD",
      "GridViewConfiguration":{
         "ContentShareLayout":"ActiveSpeakerOnly",
         "ActiveSpeakerOnlyConfiguration":{
            "ActiveSpeakerPosition":"TopRight"
         }
         "VideoAttribute": {
            "CornerRadius"   : 10,                               
            "BorderColor"    : "Green", 
            "HighlightColor" : "Red",  
            "BorderThickness": 5 
          },      
       }
   }
}
```

**VideoAttribute**  
*描述* — 指定视频磁贴边框和圆角的设置  
*允许的值* — `BorderColor` \$1 `BorderThickness` \$1 `CornerRadius` \$1 `HighlightColor`  
*必填* — 否

**VideoAttribute.BorderColor**  
*描述* — 定义所有视频磁贴的边框颜色  
*允许的值* — 颜色名称，例如红色、绿色或蓝色  
*必填* — 否

**VideoAttribute.BorderThickness**  
*描述* — 定义所有视频磁贴的边框厚度（以像素为单位）  
*类型* — 整数  
*允许的值* — 1—20  
*必填* — 否

**VideoAttribute.CornerRadius**  
*描述* — 定义所有视频磁贴的角半径（以像素为单位）   
*类型* — 整数  
*允许的值* — 1—20  
*必填* — 否

**VideoAttribute.HighlightColor**  
*描述* — 定义主讲人或发言人讲话时显示的边框颜色  
*允许的值* — 颜色名称，例如红色、绿色或蓝色  
*必填* — 否

# 在 Amazon Chime SDK 会议中使用布局配置以便合成
<a name="compositing-layouts"></a>

以下主题介绍如何使用不同的配置布局。只有当有人开始共享内容时，布局才会生效。展开每个部分以了解更多信息。

## ActiveSpeakerOnlyConfiguration
<a name="active-speaker-only"></a>

`ActiveSpeakerOnlyConfiguration` 显示内容共享和当前发言人的视频，这意味着讲话的人会出现在覆盖内容共享流的小视频磁贴中。

下图显示发言人磁贴的配置和可用位置。

![\[显示窗口中央一个大视频磁贴以及左上角一个小磁贴的图片。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/compositing-active-speaker-4x.png)


以下示例说明如何以编程方式实现 `ActiveSpeakerOnly` 布局。在这种情况下，主讲人磁贴会显示在左上角。

```
{
   "CompositedVideo":{
      "Layout":"GridView",
      "Resolution":"FHD",
      "GridViewConfiguration":{
         "ContentShareLayout":"ActiveSpeakerOnly",
         "ActiveSpeakerOnlyConfiguration":{
            "ActiveSpeakerPosition":"TopLeft"
         }
      }
   }
}
```

**ActiveSpeakerOnlyConfiguration**  
*描述* — `ActiveSpeakerOnly` 视频磁贴的配置设置  
*类型*- ActiveSpeakerOnlyConfiguration 对象  
*必填* — 否

**ActiveSpeakerOnlyConfiguration.ActiveSpeakerPosition**  
*描述* — 当前发言人视频磁贴的位置  
*类型* — 字符串  
*有效值* — `TopLeft` \$1 `TopRight` \$1 `BottomLeft` \$1 `BottomRight`  
*必填* — 否  
*默认值* — `TopRight`

## PresenterOnlyConfiguration
<a name="presenter-only"></a>

无论谁在讲话，`PresenterOnlyConfiguration` 都会显示内容共享以及仅主讲人的视频。下图显示配置。

![\[四个屏幕的图像。每个屏幕的中间都有一个共享窗口，每个角落都有一个视频磁贴。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/compositing-presenter-only-4x.png)


以下示例说明如何以编程方式实现布局，并将主讲人放置在右上角。

```
{
    "CompositedVideo": {
    "Layout": "GridView",
    "Resolution": "FHD",
     "GridViewConfiguration": {
         "ContentShareLayout": "PresenterOnly",
         "PresenterOnlyConfiguration": { 
             "PresenterPosition": "TopRight"
             }
         }           
     }
}
```

**PresenterOnlyConfiguration**  
*描述* — `PresenterOnly` 布局的配置设置  
*类型* — `PresenterOnlyConfiguration` 对象  
*必填* — 否

**PresenterOnlyConfiguration.PresenterPosition**  
*描述* — 主讲人视频磁贴的位置  
*类型* — 字符串  
*有效值* — `TopLeft` \$1 `TopRight` \$1 `BottomLeft` \$1 `BottomRight`  
*必填* — 否  
*默认值* — `TopRight`

## HorizontalLayoutConfiguration
<a name="horizontal-layout"></a>

`HorizontalLayoutConfiguration` 水平显示内容共享和视频流。您可以使用 `TilePosition` 设置显示内容共享流上方或下方的磁贴。主讲人始终显示在左侧。其他磁贴根据 `JoinSequence` 所指示的顺序显示。

下图显示内容共享流下方的磁贴。

![\[显示一个大的中央磁贴和下面一行 4 个较小磁贴的图片。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/compositing-horizontal-bottom.png)


以下示例说明如何以编程方式实现水平布局。在这种情况下，布局会根据 `SpeakerSequence` 对磁贴进行排序，并将其放在屏幕共享的下方。该布局最多允许四个磁贴并应用 16/9 的纵横比。

```
{
   "CompositedVideo":{
      "Layout":"GridView",
      "Resolution":"FHD",
      "GridViewConfiguration":{
         "ContentShareLayout":"Horizontal",
         "HorizontalLayoutConfiguration":{
            "TileOrder":"SpeakerSequence",
            "TilePosition":"Bottom",
            "TileCount":4,
            "TileAspectRatio":"16/9"
         }
      }
   }
}
```

**HorizontalLayoutConfiguration**  
*描述* — 水平布局的配置设置  
*类型*- HorizontalLayoutConfiguration 对象  
*必填* — 否

**HorizontalLayoutConfiguration.TilePosition**  
*描述* — 将磁贴放在内容共享的上方或下方。  
*类型* — 字符串  
*有效值* — `Bottom`\$1`Top`  
*必填* — 否  
*默认值* — 底部

**HorizontalLayoutConfiguration.TileOrder**  
*描述* — 根据用户何时加入或何时讲话对磁贴进行排序  
*类型* — 字符串  
*有效值* — `JoinSequence`\$1`SpeakerSequence`  
*必填* — 否  
*默认值* — JoinSequence

**HorizontalLayoutConfiguration.TileCount**  
*描述* — 指定屏幕共享期间保持可见的磁贴数量  
*类型* — 整数  
*有效值* — 1—10  
*必填* — 否  
*默认值* — 4

**HorizontalLayoutConfiguration.TileAspectRatio**  
*描述* — 指定磁贴的纵横比  
*类型* — 整数  
*有效值* — *n***/***n*  
*必填* — 否  
*默认值* — 16/9，该值适用于所有磁贴

## VerticalLayoutConfiguration
<a name="vertical-layout"></a>

`VerticalLayoutConfiguration` 在右侧显示内容共享和四个最新的视频。主讲人始终显示在顶部。其他与会者按照 `TileOrder` 所指示的顺序显示。

![\[显示窗口中央一个大视频磁贴以及右上角四个小磁贴的图片。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/grid-vertical.png)


以下示例说明如何以编程方式实现垂直布局。在这种情况下，布局会按图块排序 JoinSequence 并将其放置在屏幕共享的右侧。该布局最多允许四个磁贴并应用 16/9 的纵横比。

```
{
   "CompositedVideo":{
      "Layout": "GridView",
      "Resolution": "FHD",
      "GridViewConfiguration":{
         "ContentShareLayout": "Vertical",
         "VerticalLayoutConfiguration":{
            "TileOrder": "JoinSequence",
            "TilePosition": "Right",
            "TileCount": 4,
            "TileAspectRatio": "16/9"
         }
      }
   }
}
```

**VerticalLayoutConfiguration**  
*描述* — 垂直布局的配置设置  
*类型*- VerticalLayoutConfiguration 对象  
*必填* — 否

**VerticalLayoutConfiguration.TilePosition**  
*描述* — 将磁贴放在内容共享的右侧或左侧。  
*类型* — 字符串  
*有效值* — `Bottom`\$1`Top`  
*必填* — 否  
*默认值* — 底部

**VerticalLayoutConfiguration.TileOrder**  
*描述* — 根据用户何时加入或何时讲话对磁贴进行排序  
*类型* — 字符串  
*有效值* — `JoinSequence`\$1`SpeakerSequence`  
*必填* — 否  
*默认值* — JoinSequence

**VerticalLayoutConfiguration.TileCount**  
*描述* — 指定磁贴的数量  
*类型* — 整数  
*有效值* — 1—10  
*必填* — 否  
*默认值* — 4

**VerticalLayoutConfiguration.TileAspectRatio**  
*描述* — 指定磁贴的纵横比  
*类型* — 整数  
*有效值* — *n***/***n*  
*必填* — 否  
*默认值* — 9/16，该值适用于所有磁贴

# 为 Amazon Chime SDK 媒体管道创建服务相关角色
<a name="create-pipeline-role"></a>

以下各节中的信息说明如何创建服务相关角色以授予媒体管道访问您的 Amazon Chime SDK 会议的权限。

**Topics**
+ [设置角色权限](#pipeline-role-permissions)
+ [创建服务关联角色](#create-sl-role)
+ [编辑 服务相关角色](#edit-pipeline-role)
+ [删除 服务相关角色](#delete-pipeline-role)
+ [服务相关角色的受支持区域](#role-supported-regions)

## 设置角色权限
<a name="pipeline-role-permissions"></a>

媒体管道使用名为 Pipelin *AWSServiceRoleForAmazonChimeSDKMediaes* 的服务相关角色。该角色允许捕获渠道代表您访问 Amazon Chime SDK 会议并向亚马逊 CloudWatch 发布指标。此角色信任 `mediapipelines.chime.amazonaws.com` 服务。

角色权限策略允许 Amazon Chime 软件开发工具包对所有 AWS 资源完成以下操作：
+ 操作：`all AWS resources` 上的 `cloudwatch:PutMetricData`
+ 操作：`chime:CreateAttendee` 上的 `all AWS resources`
+ 操作：`chime:DeleteAttendee` 上的 `all AWS resources`
+ 操作：`chime:GetMeeting` 上的 `all AWS resources`
+ 操作：`kinesisvideo:CreateStream` 上的 `arn:aws:kinesisvideo:*:111122223333:stream/ChimeMediaPipelines-*`
+ 操作：`kinesisvideo:PutMedia` 上的 `arn:aws:kinesisvideo:*:111122223333:stream/ChimeMediaPipelines-*`
+ 操作：`kinesisvideo:UpdateDataRetention` 上的 `arn:aws:kinesisvideo:*:111122223333:stream/ChimeMediaPipelines-*`
+ 操作：`kinesisvideo:DescribeStream` 上的 `arn:aws:kinesisvideo:*:111122223333:stream/ChimeMediaPipelines-*`
+ 操作：`kinesisvideo:GetDataEndpoint` 上的 `arn:aws:kinesisvideo:*:111122223333:stream/ChimeMediaPipelines-*`
+ 操作：`kinesisvideo:ListStreams` 上的 `arn:aws:kinesisvideo:*:111122223333:stream/*`

您必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务相关角色。有关权限的更多信息，请参阅 *IAM 用户指南*中的[服务相关角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 创建服务关联角色
<a name="create-sl-role"></a>

使用 IAM 控制台为 Amazon Chime SDK 媒体管道创建服务相关角色。您必须具有 IAM 管理权限才能完成这些步骤。如果没有，请联系系统管理员。

**创建角色**

1. 登录 AWS 管理控制台，然后在上打开 IAM 控制台[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam)。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 选择 **AWS 服务**角色类型，然后选择 **Chime SDK 媒体管道**。

   IAM 策略随即出现。

1. 勾选策略旁边的复选框，然后选择**下一步: 标签**。

1. 选择**下一步：审核**。

1. 根据需要编辑描述，然后选择**创建角色**。

你也可以使用 AWS CLI 或 AWS API 创建名为 *medi* apipelines.chime.amazonaws.com 的服务相关角色。在 AWS CLI 中，运行以下命令：

```
aws iam create-service-linked-role --aws-service-name mediapipelines.chime.amazonaws.com
```

有关创建角色的更多信息，请参阅 *IAM 用户指南*中的[创建服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)。如果您已删除此角色，则可以重复此过程再次创建。

## 编辑 服务相关角色
<a name="edit-pipeline-role"></a>

您无法编辑 Pipelin *AWSServiceRoleForAmazonChimeSDKMediaes* 服务相关角色。创建角色后，您无法更改该角色的名称，因为可能有不同的实体引用该角色。但是，您可以使用 IAM 编辑角色描述。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除 服务相关角色
<a name="delete-pipeline-role"></a>

如果不需要服务相关角色，我们建议您将其删除。为此，您需要先删除使用该角色的媒体管道。您可以使用 AWS CLI 或 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaCapturePipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaCapturePipeline.html)API 来删除管道。

**使用 CLI 删除管道**  
在 AWS CLI 中使用此命令删除您账户中的媒体管道。

```
aws chime-sdk-media-pipelines delete-media-capture-pipeline --media-pipeline-id Pipeline_Id
```

**使用 API 删除管道**  
使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaCapturePipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaCapturePipeline.html) API 删除您账户中的媒体管道。

**删除角色**  
删除管道后，您可以使用 IAM 控制台、 AWS CLI 或 AWS API 来删除角色。有关删除角色的更多信息，请参阅 *IAM 用户指南*中的[删除服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## 服务相关角色的受支持区域
<a name="role-supported-regions"></a>

Amazon Chime SDK 支持在提供服务的所有 AWS 地区使用服务相关角色。有关更多信息，请参阅 *Amazon Web Services 一般参考* 中的 [Amazon Chime SDK 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html)。

# 使用 Amazon Chime SDK 媒体管道事件
<a name="media-pipe-events"></a>

每种类型的媒体管道会发送生命周期事件，用于触发通知和启动下游工作流程。使用会议管道事件的部分示例包括：
+ 媒体管道完成后处理捕获的媒体。
+ 如果媒体管道出现暂时故障，则通知会议参与者。
+ 如果媒体管道出现永久故障，则停止会议。

您可以将事件发送到亚马逊 EventBridge、亚马逊简单通知服务 (SNS) 和亚马逊简单队列服务 (SQS) Simple Queue Service。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[来自 AWS 服务的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-event.html)。

## 已创建的 Amazon Chime SDK 媒体管道
<a name="media-pipeline-create"></a>

创建媒体管道时，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
 以下是此事件的示例数据。

```
{
    "version": "0", 
    "id": "5ee6265a-0a40-104e-d8fd-a3b4bdd78483", 
    "detail-type": "Chime Media Pipeline State Change", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "time": "2021-07-28T20:20:49Z", 
    "region": "us-east-1", 
    "resources": [], 
    "detail": {
        "version": "0", 
        "eventType": "chime:MediaPipelineInProgress", 
        "timestamp": 1627503649251, 
        "meetingId": "1e6bf4f5-f4b5-4917-b8c9-bda45c340706", 
        "externalMeetingId": "Meeting_Id",
        "mediaPipelineId": "e40ee45e-2ed1-408e-9156-f52b8208a491", 
        "mediaRegion": "ap-southeast-1"
    }
}
```

## Amazon Chime SDK 媒体管道已删除
<a name="media-pipeline-delete"></a>

当媒体管道成功停止后，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0",
    "id": "9e11e429-97fd-9532-5670-fac3f7abc05f",
    "detail-type": "Chime Media Pipeline State Change",
    "source": "aws.chime",
    "account": "365135496707",
    "time": "2021-07-28T20:21:50Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "version": "0",
        "eventType": "chime:MediaPipelineDeleted",
        "timestamp": 1627503710485,
        "meetingId": "1e6bf4f5-f4b5-4917-b8c9-bda45c340706",
        "externalMeetingId": "Meeting_Id",
        "mediaPipelineId": "e40ee45e-2ed1-408e-9156-f52b8208a491",
        "mediaRegion": "ap-southeast-1"
    }
}
```

## Amazon Chime SDK 媒体管道出现暂时故障
<a name="pipeline-temp-failure"></a>

当媒体管道出现暂时故障时，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0",
    "id": "abc141e1-fc2e-65e8-5f18-ab5130f1035a",
    "detail-type": "Chime Media Pipeline State Change",
    "source": "aws.chime",
    "account": "365135496707",
    "time": "2021-07-28T21:16:42Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "version": "0",
        "eventType": "chime:MediaPipelineTemporaryFailure",
        "timestamp": 1627507002882,
        "meetingId": "7a5434e3-724a-4bbb-9eb6-2fb209dc0706",
        "externalMeetingId": "Meeting_Id",
        "mediaPipelineId": "ebd62f4e-04a9-426d-bcb0-974c0f266400",
        "mediaRegion": "eu-south-1"
    }
}
```

## Amazon Chime SDK 媒体管道正在处理
<a name="pipeline-in-progress"></a>

当媒体管道开始捕获构件时，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0",
    "id": "9e11e429-97fd-9532-5670-fac3f7abc05f",
    "detail-type": "Chime Media Pipeline State Change",
    "source": "aws.chime",
    "account": "365135496707",
    "time": "2021-07-28T20:21:50Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "version": "0",
        "eventType": "chime:MediaPipelineInProgress",
        "timestamp": 1627503710485?,
        "meetingId": "1e6bf4f5-f4b5-4917-b8c9-bda45c340706",
        "externalMeetingId": "Meeting_Id",
        "mediaPipelineId": "e40ee45e-2ed1-408e-9156-f52b8208a491",
        "mediaRegion": "ap-southeast-1"
    }
}
```

## Amazon Chime SDK 媒体管道出现永久故障
<a name="pipeline-perm-failure"></a>

当媒体管道出现永久故障时，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0",
    "id": "9e11e429-97fd-9532-5670-fac3f7abc05f",
    "detail-type": "Chime Media Pipeline State Change",
    "source": "aws.chime",
    "account": "365135496707",
    "time": "2021-07-28T20:21:50Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "version": "0",
        "eventType": "chime:MediaPipelinePermanentFailure",
        "timestamp": 1627503710485,
        "meetingId": "1e6bf4f5-f4b5-4917-b8c9-bda45c340706",
        "externalMeetingId": "Meeting_Id",
        "mediaPipelineId": "e40ee45e-2ed1-408e-9156-f52b8208a491",
        "mediaRegion": "ap-southeast-1"
    }
}
```

# 为 Amazon Chime SDK 媒体管道设置 Amazon S3 存储桶权限
<a name="s3-permissions"></a>

如果您尚未创建 Amazon S3 存储桶，请确保在您主持会议的账户和区域中创建您的存储桶。另外，请确保授予服务足够的权限。有关 Amazon S3 存储桶名称的更多信息，请参阅 [为 Amazon Chime SDK 媒体捕获管道创建 Amazon S3 存储桶](create-s3-bucket.md)。

# 将 Amazon Chime SDK 媒体管道事件发送至 CloudTrail
<a name="pipeline-cloudtrail"></a>

AWS 在您创建 AWS 账户时 CloudTrail 为您启用。当用户在媒体管道 SDK 中调用支持的 API 时，会在**事件历史 CloudTrail **记录中记录该 API 的活动以及其他 AWS 事件。您可以在 AWS 账户中查看、搜索和下载媒体管道事件。有关更多信息，请参阅《*CloudTrail 用户指南》*中的[使用 CloudTrail 事件历史记录查看事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

要持续记录媒体管道事件，可创建*跟踪*。跟踪允许 CloudTrail 将日志文件传输到您的 Amazon S3 存储桶。以下示例显示媒体管道跟踪。数据包括调用 API 的用户、用于调用 API 的 IAM 角色和时间戳。有关使用的更多信息， CloudTrail 请参阅 *Amazon Chime SDK 管理员*指南中的[日志和监控](https://docs.aws.amazon.com/chime-sdk/latest/ag/monitoring-overview.html)。

```
{
   "Records": [    
   {
      "eventVersion": "1.08",
      "userIdentity": {
          "type": "AssumedRole",
          "principalId": "ABCDEFGHIJKLMNOPQRSTUV:user-name",
          "arn": "arn:aws:sts::123456789101:assumed-role/role-name/user-name",
          "accountId": "109876543210",
          "accessKeyId": "ABCDEFGHIJKLMNOPQRSTUV",
          "sessionContext": {
              "sessionIssuer": {
                  "type": "Role",
                  "principalId": "ABCDEFGHIJKLMNOPQRSTUV",
                  "arn": "arn:aws:iam::109876543210:role/role-name",
                  "accountId": "012345678910",
                  "userName": "user-name"
                  },
          "webIdFederationData": {},
          "attributes": {
              "mfaAuthenticated": "false",
              "creationDate": "2022-03-08T19:34:55Z"
              }
          }
      },
      "eventTime": "2022-03-08T20:28:41Z",
     "eventSource": "chime-sdk-media-pipelines.amazonaws.com",
     "eventName": "CreateMediaCapturePipeline",
     "awsRegion": "us-east-1",
     "sourceIPAddress": "127.0.0.1",
     "userAgent": "[]/[]",
     "requestParameters": {
         "sourceType": "ChimeSdkMeeting",
         "sourceArn": "Hidden_For_Security_Reasons",
         "sinkType": "S3Bucket",
         "sinkArn": "Hidden_For_Security_Reasons",
         "chimeSdkMeetingConfiguration": {
             "artifactsConfiguration": {
                 "audio": {
                    "muxType": "AudioOnly"
                 },
            "video": {
                "state": "Enabled",
                "muxType": "VideoOnly"
                },
            "content": {
                "state": "Enabled",
                "muxType": "ContentOnly"
                }
            }
        }
      },
     "responseElements": {
        "mediaCapturePipeline": {
        "mediaPipelineId": "pipeline-uuid",
        "sourceType": "ChimeSdkMeeting",
        "sourceArn": "Hidden_For_Security_Reasons",
        "status": "Initializing",
        "sinkType": "S3Bucket",
        "sinkArn": "Hidden_For_Security_Reasons",
        "createdTimestamp": "2022-03-08T20:28:41.336Z",
        "updatedTimestamp": "2022-03-08T20:28:41.463Z",
        "chimeSdkMeetingConfiguration": {
            "artifactsConfiguration": {
                "audio": {
                    "muxType": "AudioOnly"
                },
            "video": {
                "state": "Enabled",
                 "muxType": "VideoOnly"
                 },
             "content": {
                 "state": "Enabled",
                 "muxType": "ContentOnly"
                 }
              }
            }
          }
      },
      "requestID": "request-id",
      "eventID": "event-id",
     "readOnly": false,
      "eventType": "AwsApiCall",
      "managementEvent": true,
      "eventCategory": "Management",
      "recipientAccountId": "112233445566",
      "tlsDetails": {
          "tlsVersion": "TLSv1.2",
          "clientProvidedHostHeader": "example.com"
       }
    },  
  ]
}
```

# 停止 Amazon Chime SDK 媒体管道的最佳实践
<a name="stop-pipe-best-practices"></a>

作为停止媒体管道的最佳实践，调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html) API。API 允许您删除媒体捕获和媒体实时连接器管道。您也可以调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaCapturePipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaCapturePipeline.html) API 来删除媒体捕获管道。会议结束后，所有媒体管道都会停止。

# 使用 Amazon Chime SDK 实时转录
<a name="meeting-transcription"></a>

您可以使用 Amazon Chime SDK 实时转录生成用户归属的实时会议记录。Amazon Chime SDK 实时转录与 Amazon Transcribe 和 Amazon Transcribe Medical 服务集成，可在会议进行期间生成 Amazon Chime SDK 会议记录。

Amazon Chime SDK 实时转录分别处理每个用户的音频，以提高多人场景中的准确性。Amazon Chime SDK 使用其主动说话者算法来选择前两个主动说话者，然后通过单个流将其音频以不同的频道发送到 Amazon Transcribe。会议参与者通过 Amazon Chime SDK 数据消息接收用户归属的转录。您可以通过多种方式使用转录，例如显示字幕、创建会议记录或使用转录进行内容分析。

在会议转录期间，实时转录使用一个流到 Amazon Transcribe。适用标准 Amazon Transcribe 和 Amazon Transcribe Medical 费用。有关更多信息，请参阅 [Amazon Transcribe 定价](https://aws.amazon.com/transcribe/pricing/)。有关使用量或账单的问题，请联系您的 AWS 客户经理。

**重要**  
[默认情况下，Amazon Transcribe 可能会使用和存储该服务处理的音频内容来开发和改进 AWS AI/ML 服务，详见服务条款第 50 节。AWS](https://aws.amazon.com/service-terms/)使用 Amazon Transcribe 时可能需要遵守联邦和州有关录制或拦截电子通信的法律或法规。您和您的最终用户有责任遵守与录音有关的所有适用法律，包括适当通知录制会话或通信中的所有参与者正在录制会话或通信，并获得他们的同意。通过 AWS 使用 Organizations 配置 AI 服务选择退出政策，您可以选择不使用音频内容来开发和改进 AWS AI/ML 服务。 AWS 

**Topics**
+ [系统架构](#sys-architecture)
+ [账单和使用情况](#billing-and-usage)
+ [为 Amazon Chime SDK 实时转录配置账户](configure-transcribe.md)
+ [选择 Amazon Chime SDK 实时转录选项](transcription-options.md)
+ [启动和停止 Amazon Chime SDK 实时转录](initiate-transcription.md)
+ [Amazon Chime SDK 实时转录参数](#transcription-parameters)
+ [了解 Amazon Chime SDK 实时转录事件](transcription-events.md)
+ [了解 Amazon Chime SDK 实时转录消息](process-msgs.md)
+ [处理收到的 Amazon Chime SDK 实时转录事件](delivery-examples.md)
+ [解析 Amazon Chime SDK 转录](parse-transcripts.md)

## 系统架构
<a name="sys-architecture"></a>

Amazon Chime SDK 通过与您的 Amazon Transcribe 或 Amazon Transcribe Medical 账户的服务端集成，创建实时会议转录，无需音频离开 AWS 网络。为了提高准确性，用户的音频会被单独处理，然后混合到会议中。Amazon Chime SDK 使用其主动说话者算法来选择前两个主动说话者，然后通过单个流将其的音频以不同的频道发送到 Amazon Transcribe 或 Amazon Transcribe Medical。为了减少延迟，用户归属的转录将通过数据消息直接发送给每位会议参与者。使用媒体管道捕获会议音频时，还会捕获会议的转录信息。

![\[会议转录数据流示意图。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/transcription-architecture.png)


## 账单和使用情况
<a name="billing-and-usage"></a>

在会议转录期间，实时转录使用一个流到 Amazon Transcribe 或 Amazon Transcribe Medical。适用标准 Amazon Transcribe 和 Amazon Transcribe Medical 费用。有关更多信息，请参阅 [Amazon Transcribe 定价](https://aws.amazon.com/transcribe/pricing/)。有关使用量或账单的问题，请联系您的 AWS 客户经理。

# 为 Amazon Chime SDK 实时转录配置账户
<a name="configure-transcribe"></a>

在使用 Amazon Chime SDK 直播转录之前，必须授予亚马逊 Chime SDK 在账户中调用 Amazon Transcribe 和 Amazon Transcribe Medical 的权限。 AWS 为此，您可以将 Chime 转录服务相关角色添加到您的账户。有关为实时转录创建服务相关角色的信息，请参阅 *Amazon Chime SDK 管理指南*中的[使用带实时转录的角色](https://docs.aws.amazon.com/chime-sdk/latest/ag/using-service-linked-roles-transcription.html)。有关 IAM 服务相关角色的更多信息，请参阅 *IAM 用户指南*中的[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。

# 选择 Amazon Chime SDK 实时转录选项
<a name="transcription-options"></a>

当您使用 Amazon Chime SDK 实时转录时，您使用您的 AWS 账户中的 [Amazon Transcribe](https://aws.amazon.com/transcribe/) 或 [Amazon Transcribe Medical](https://aws.amazon.com/transcribe/medical/)。您可以访问 [Amazon Transcribe 支持的所有流传输语言](https://docs.aws.amazon.com/transcribe/latest/dg/what-is-transcribe.html)，以及[自定义词汇表](https://docs.aws.amazon.com/transcribe/latest/dg/how-vocabulary.html)和[词汇筛选器](https://docs.aws.amazon.com/transcribe/latest/dg/filter-unwanted-words.html)等功能。使用 Amazon Transcribe Medical 时，您可以选择医学专业、对话类型，也可以选择提供任何自定义词汇。适用标准 Amazon Transcribe 和 Amazon Transcribe Medical 费用。

选择转录选项的过程要遵循以下步骤。

## 第 1 步：选择转录服务
<a name="choose-service"></a>

您需要决定使用哪种转录服务，[Amazon Transcribe](https://aws.amazon.com/transcribe/) 或者 [Amazon Transcribe Medical](https://aws.amazon.com/transcribe/medical/)。

如果您的用例需要医疗语音转文本功能，则可能需要使用 Amazon Transcribe Medical。对于所有其他使用案例，您可能需要使用 Amazon Transcribe。

您可以在调用 `StartMeetingTranscription` API 时指定要使用的转录服务：
+ 要使用 Amazon Transcribe，请使用 `EngineTranscribeSettings` 指定 `TranscriptionConfiguration`。
+ 要使用 Amazon Transcribe Medical，请使用 `EngineTranscribeMedicalSettings` 指定 `TranscriptionConfiguration`。

## 第 2 步：选择转录区域
<a name="choose-region"></a>

您需要为转录服务选择一个 AWS 区域。[有关 Amazon Transcribe 和 Amazon Transcribe Medical 可用 AWS 区域的信息，请参阅区域服务表AWS 。](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)

 通常，会议的媒体区域和转录区域之间的最低延迟可提供最佳的用户体验。为了实现最低延迟，请尽可能将相同区域用于媒体和转录。但是，在选择区域时，您可能需要考虑其他因素，例如监管要求或您配置 Amazon Transcribe 或 Amazon Transcribe Medical 的区域。

Amazon Transcribe 和 Amazon Transcribe Medical 功能，例如自定义词汇表或词汇筛选器，因地区而异。如果您配置其中任何一项功能，则应在打算使用实时转录的所有 AWS 区域中进行相同的配置。或者，您可以为所有会议使用相同的 Amazon Transcribe 区域。

您可以指定转录服务使用的区域。为此，您可以在调用 `StartMeetingTranscription` API 时将区域名称添加到转录引擎设置的 `Region` 字段中。如果您未指定区域，Amazon Chime SDK 会尝试在会议的媒体区域使用转录服务。要让 Amazon Chime SDK 为您选择转录服务的区域，请在 `Region` 字段中指定 `auto`。这样，Amazon Chime 会根据会议的媒体区域选择转录服务区域，如下表所示。有关 `StartMeetingTranscription` API 的更多信息，请参阅本指南中的 [启动和停止 Amazon Chime SDK 实时转录](initiate-transcription.md)。

**注意**  
亚马逊 Chime SDK 选择的转录区域可能会发生变化， AWS因为亚马逊 Chime SDK、Amazon Transcribe 和 Amazon Transcribe Medical 提供了更多可用区域。

**Amazon Transcribe 的自动区域选择**  



|  Amazon Chime SDK 媒体区域  |  区域代码  |  转录区域  | 
| --- | --- | --- | 
|  美国东部（俄亥俄州）  |  us-east-2  | us-east-2  | 
|  美国东部（弗吉尼亚州北部）  |  us-east-1  | us-east-1  | 
|  美国西部（北加利福尼亚）  |  us-west-1  | us-west-2 | 
|  美国西部（俄勒冈州）  |  us-west-2  | us-west-2  | 
|  非洲（开普敦）**\$1**  |  af-south-1  | eu-west-2  | 
|  亚太地区（孟买）  |  ap-south-1  | eu-west-2 | 
|  亚太地区（首尔）  |  ap-northeast-2  | ap-northeast-2 | 
|  亚太地区（新加坡）  |  ap-southeast-1  | ap-northeast-1 | 
|  亚太地区（悉尼）  |  ap-southeast-2  | ap-southeast-2 | 
|  亚太地区（东京）  |  ap-northeast-1  | ap-northeast-1 | 
|  加拿大（中部）  |  ca-central-1  | ca-central-1 | 
|  欧洲地区（法兰克福）   |  eu-central-1  | eu-central-1  | 
|  欧洲地区（爱尔兰）  |  eu-west-1  | eu-west-1 | 
|  欧洲地区（伦敦）  |  eu-west-2  | eu-west-2  | 
|  欧洲地区（米兰）**\$1**  |  eu-south-1  | eu-central-1  | 
|  欧洲地区（巴黎）  |  eu-west-3  | eu-central-1  | 
|  欧洲地区（斯德哥尔摩）  |  eu-north-1  | eu-central-1 | 
|  南美洲（圣保罗）  |  sa-east-1  | sa-east-1 | 
|  GovCloud （美国东部）  |  us-gov-east-1  |  us-gov-west-1  | 
|  GovCloud （美国西部）  |  us-gov-west-1  |  us-gov-west-1  | 

**Amazon Transcribe Medical 的自动区域选择**  



|  Amazon Chime SDK 媒体区域  |  区域代码  |  转录区域  | 
| --- | --- | --- | 
|  美国东部（俄亥俄州）  |  us-east-2  | us-east-2 | 
|  美国东部（弗吉尼亚州北部）  |  us-east-1  | us-east-1 | 
|  美国西部（北加利福尼亚）  |  us-west-1  | us-west-2 | 
|  美国西部（俄勒冈州）  |  us-west-2  | us-west-2 | 
|  非洲（开普敦）**\$1**  |  af-south-1  |  eu-west-1  | 
|  亚太地区（孟买）  |  ap-south-1  | eu-west-1  | 
|  亚太地区（首尔）  |  ap-northeast-2  | us-west-2 | 
|  亚太地区（新加坡）  |  ap-southeast-1  | ap-southeast-2 | 
|  亚太地区（悉尼）  |  ap-southeast-2  | ap-southeast-2 | 
|  亚太地区（东京）  |  ap-northeast-1  | us-west-2 | 
|  加拿大（中部）  |  ca-central-1  | ca-central-1 | 
|  欧洲地区（法兰克福）   |  eu-central-1  | eu-west-1 | 
|  欧洲地区（爱尔兰）  |  eu-west-1  | eu-west-1 | 
|  欧洲地区（伦敦）  |  eu-west-2  | us-east-1 | 
|  欧洲地区（米兰）**\$1**  |  eu-south-1  | eu-west-1 | 
|  欧洲地区（巴黎）  |  eu-west-3  | eu-west-1 | 
|  欧洲地区（斯德哥尔摩）  |  eu-north-1  | eu-west-1 | 
|  南美洲（圣保罗）  |  sa-east-1  | us-east-1 | 

**注意**  
要在标有星号 (**\$1**) 的区域中使用实时转录，必须先在您的 AWS 账户中启用该区域。有关更多信息，请参阅 AWS 一般参考中的[启用区域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。

有关区域和每个服务终端节点的更多信息，请参阅：
+ [Amazon Chime SDK 媒体区域](https://docs.aws.amazon.com/chime-sdk/latest/dg/chime-sdk-meetings-regions.html)
+ [Amazon Transcribe 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/transcribe.html#transcribe_region)
+ [Amazon Transcribe Medical 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/transcribe-medical.html)

## 第 3 步：查看服务限额
<a name="transcribe-quotas"></a>

每个带有实时转录功能的 Amazon Chime SDK 会议只需要一个 HTTP/2 流到 Amazon Transcribe 或 Amazon Transcribe Medical。这两项服务都有区域服务限额，包括并发 HTTP/2 流的数量和每秒的始流交易量。有关限额的更多信息，请参阅《Amazon Transcribe 开发人员指南》**中的[准则和限额](https://docs.aws.amazon.com/transcribe/latest/dg/limits-guidelines.html)。有关增加配额的信息，请参阅 AWS 控制台中的 Service Quotas。

# 启动和停止 Amazon Chime SDK 实时转录
<a name="initiate-transcription"></a>

您可以使用 Amazon Chime SDK [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_StartMeetingTranscription.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_StartMeetingTranscription.html) API 通过将 `TranscriptionConfiguration` 应用至会议来启动会议转录。Amazon Chime SDK 控制器将配置异步转发给会议。启动会议转录成功或失败通过亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 和亚马逊发送的消息来表示。 EventBridge

**开始转录**  
此示例显示如何使用 Amazon Transcribe 开始实时转录。

```
POST /meetings/meetingId/transcription?operation=start HTTP/1.1 
Content-type: application/json
{
    "TranscriptionConfiguration": {
        "EngineTranscribeSettings": {
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_ResponseSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_ResponseSyntax)": "en-US",  
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_ResponseSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_ResponseSyntax)": "tag",
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": "profanity",
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": "lingo",
            "Region": "us-east-1"
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": true,  
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": "high",  
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": "PII",  
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": "PII",  
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": "ALL",  
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestSyntax)": "language-model"
        }
    }
}
```

此示例显示如何使用 Amazon Transcribe Medical 开始实时转录。

```
POST /meetings/meetingId/transcription?operation=start HTTP/1.1 
Content-type: application/json
{  
    "TranscriptionConfiguration": {
        "EngineTranscribeMedicalSettings": {
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html)": "en-US",
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html)": "PRIMARYCARE",
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html)": "CONVERSATION",
            "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html)": "lingo",
            "Region": "us-east-1",
           "[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html)": "PHI", 
        }
   }
}
```

`StartMeetingTranscription` — 开始会议转录。  
`meetingId` — 由 [CreateMeeting API](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html#API_CreateMeeting_ResponseSyntax) 返回的会议 ID。  
`TranscriptionConfiguration` — 封装实时转录的参数。您必须精确指定一个配置，`EngineTranscribeSettings` 或 `EngineTranscribeMedicalSettings`。

`EngineTranscribeSettings` — 指定 Amazon Transcribe 的使用并将其设置传递给 [https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestParameters](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html#API_streaming_StartStreamTranscription_RequestParameters)。  
`LanguageCode` – 必需。  
`VocabularyFilterMethod`：可选。  
`VocabularyFilterName`：可选。  
`VocabularyName`：可选。  
`Region`：可选。  
`EnablePartialResultsStabilization`：可选。  
`PartialResultsStability`：可选。  
` ContentIdentificationType`：可选。  
`ContentRedactionType`：可选。  
`PiiEntityTypes `：可选。  
`LanguageModelName`：可选。

`EngineTranscribeMedicalSettings` — 指定 Amazon Transcribe Medical 的使用并将其设置传递给 [https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html#API_streaming_StartMedicalStreamTranscription_RequestParameters](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartMedicalStreamTranscription.html#API_streaming_StartMedicalStreamTranscription_RequestParameters)。  
`LanguageCode` – 必需。  
`Speciality` – 必需。  
`Type` – 必需。  
`VocabularyName`：可选。  
`Region`：可选。  
` ContentIdentificationType`：可选。

**响应**  
Amazon Transcribe 和 Amazon Transcribe Medical 会作出以下响应：
+ 带空主体的 `OK` (200)，如果将 `TranscriptionConfiguration` 成功应用于会议。

**错误消息**  
Amazon Transcribe 和 Amazon Transcribe Medical 会显示以下错误消息：
+ **BadRequestException (400)：**输入参数与服务的限制不符。
+ **ForbiddenException (403)：**永久禁止客户端提出请求。
+ **NotFoundException (404)：**`meetingId`不存在。
+ **ResourceLimitExceededException (400)：**请求超过资源限制。例如，启用实时转录功能的会议太多。
+ **ServiceFailureException (500)：**服务遇到了意外错误。
+ **ServiceUnavailableException (503)：**该服务当前不可用。
+ **ThrottledClientException (429)：**客户端超出了其请求速率限制。
+ **UnauthorizedClientException (401)：**客户目前无权提出请求。

第二次呼叫 `StartMeetingTranscription` 会更新应用于会议的 `TranscriptionConfiguration`。

**停止转录**  
您可以使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StopMeetingTranscription.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StopMeetingTranscription.html) API 删除用于给定 `meetingID` 和结束会议转录的 `TranscriptionConfiguration`。结束会议会自动停止转录。

此示例显示调用的 `StopMeetingTranscription` 请求语法。

```
POST/meetings/meetingId/transcription?operation=stop HTTP/1.1
```

**响应**  
Amazon Transcribe 和 Amazon Transcribe Medical 会作出以下响应：
+ 带空主体的 `OK` (200)，如果将 `TranscriptionConfiguration` 成功从会议中删除。

**错误消息**  
Amazon Transcribe 和 Amazon Transcribe Medical 会显示以下错误消息：
+ **BadRequestException (400)：**输入参数与服务的限制不符。
+ **ForbiddenException (403)：**永久禁止客户端提出请求。
+ **NotFoundException (404)：**`meetingId`不存在。
+ **ServiceFailureException (500)：**服务遇到了意外错误。
+ **ServiceUnavailableException (503)：**该服务当前不可用。
+ **ThrottledClientException (429)：**客户端超出了其请求速率限制。
+ **UnauthorizedClientException (401)：**客户目前无权提出请求。

## Amazon Chime SDK 实时转录参数
<a name="transcription-parameters"></a>

Amazon Transcribe 和 Amazon Trans APIs cribe Medical 在启动直播转录时提供了许多参数，例如和。[https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html](https://docs.aws.amazon.com/transcribe/latest/dg/API_streaming_StartStreamTranscription.html)您可以在 `StartMeetingTranscription` API 中使用这些参数，除非 Amazon Chime SDK 预先确定参数的值。例如，`MediaEncoding` 和 `MediaSampleRateHertz` 参数不可用，因为 Amazon Chime SDK 会自动进行设置。

Amazon Transcribe 和 Amazon Transcribe Medical 对参数进行验证，以允许您在新的参数值可用后立即使用。例如，如果 Amazon Transcribe Medical 启动对新语言的支持，则您只需要在 `LanguageCode` 参数中指定新的语言值。

# 了解 Amazon Chime SDK 实时转录事件
<a name="transcription-events"></a>

Amazon Chime SDK 发送生命周期事件，用于触发通知和启动下游工作流程。使用转录事件的部分示例包括：
+ 衡量 Amazon Chime SDK 会议中实时转录的采纳情况
+ 跟踪语言首选项

您可以将事件发送到亚马逊 EventBridge、亚马逊简单通知服务和亚马逊简单队列服务。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[来自 AWS 服务的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-event.html)。

## Amazon Chime SDK 会议转录开始
<a name="transcript-start"></a>

当会议转录开始或 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html) 更新时，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "id": "12345678-1234-1234-1234-111122223333", 
    "region": "us-east-1", 
    "detail-type": "Chime Meeting State Change", 
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": []
    "detail": {
        "version": "0", 
        "eventType": "chime:TranscriptionStarted",
        "timestamp": 12344566754,
        "meetingId": "87654321-4321-4321-1234-111122223333",
        "externalMeetingId": "mymeeting",
        "mediaRegion": "us-west-1",
        "transcriptionRegion": "us-west-2",
        "[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StartMeetingTranscription.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StartMeetingTranscription.html)": "{...}"
    }
}
```

## Amazon Chime SDK 会议转录停止
<a name="transcript-stop"></a>

会议转录停止时，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "id": "12345678-1234-1234-1234-111122223333", 
    "region": "us-east-1", 
    "detail-type": "Chime Meeting State Change", 
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": []
    "detail": {
        "version": "0", 
        "eventType": "chime:TranscriptionStopped",
        "timestamp": 12344566754,
        "meetingId": "87654321-4321-4321-1234-111122223333",
        "externalMeetingId": "mymeeting",
        "mediaRegion": "us-west-1",
        "transcriptionRegion": "us-west-2",
        "[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StopMeetingTranscription.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StopMeetingTranscription.html)": "{...}"
    }
}
```

## Amazon Chime SDK 会议转录中断
<a name="transcript-interrupted"></a>

会议转录中断时，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "id": "12345678-1234-1234-1234-111122223333", 
    "region": "us-east-1", 
    "detail-type": "Chime Meeting State Change", 
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": []
    "detail": {
        "version": "0", 
        "eventType": "chime:TranscriptionInterrupted",
        "timestamp": 12344566754,
        "meetingId": "87654321-4321-4321-1234-111122223333",
        "externalMeetingId": "mymeeting",
        "message": "Internal server error",
        "mediaRegion": "us-west-1",
        "transcriptionRegion": "us-west-2",
        "[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html)": "{...}"
    }
}
```

## Amazon Chime SDK 会议转录恢复
<a name="transcript-resumed"></a>

如果会议转录中断后恢复，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "id": "12345678-1234-1234-1234-111122223333", 
    "region": "us-east-1", 
    "detail-type": "Chime Meeting State Change", 
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": []
    "detail": {
        "version": "0", 
        "eventType": "chime:TranscriptionResumed",
        "timestamp": 12344566754,
        "meetingId": "87654321-4321-4321-1234-111122223333",
        "externalMeetingId": "mymeeting",
        "mediaRegion": "us-west-1",
        "transcriptionRegion": "us-west-2",
        "[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html)": "{...}"
    }
}
```

## Amazon Chime SDK 会议转录失败
<a name="transcript-failed"></a>

如果会议转录未能开始或中断后恢复失败，Amazon Chime SDK 会发送此事件。

**示例：事件数据**  
以下是此事件的示例数据。

```
{
    "version": "0", 
    "source": "aws.chime", 
    "account": "111122223333", 
    "id": "12345678-1234-1234-1234-111122223333", 
    "region": "us-east-1", 
    "detail-type": "Chime Meeting State Change", 
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": []
    "detail": {
        "version": "0", 
        "eventType": "chime:TranscriptionFailed",
        "timestamp": 12344566754,
        "meetingId": "87654321-4321-4321-1234-111122223333",
        "externalMeetingId": "mymeeting",
        "message": "Internal server error",
        "mediaRegion": "us-west-1",
        "transcriptionRegion": "us-west-2",
        "[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_TranscriptionConfiguration.html)": "{...}"
    }
}
```

# 了解 Amazon Chime SDK 实时转录消息
<a name="process-msgs"></a>

Amazon Chime SDK 服务通过在数据消息中发送 `TranscriptEvent` 对象，与与会者共享转录信息。`TranscriptEvent` 传递 `Transcript` 或 `TranscriptionStatus`。

`Transcript` 包括带有时间戳、用户归属单词和标点符号的结果。结果可能是“部分的”，在这种情况下，系统通常会在后续 `TranscriptEvent` 中对其进行更新。这使您可以快速查看转录，并在以后根据需要应用内联更新。

`TranscriptStatus` 可能会传递其中一个 `TranscriptionStatusType` 事件，如以下部分示例中所列。

较新版本的 Amazon Chime SDKs 包括用于常见处理的其他数据类型和辅助函数 a. `TranscriptEvent` 

## TranscriptEvent
<a name="transcript-event"></a>

此示例显示了一个典型转录事件。

```
type TranscriptEvent = Transcript | TranscriptionStatus;

export class TranscriptEventConverter {
  static from(dataMessage: DataMessage): TranscriptEvent[] {
    // convert DataMessage to TranscriptEvents
    return ...
  }
}

export default class TranscriptionStatus {
    type: TranscriptionStatusType;
    eventTimeMs:                   number;
    transcriptionRegion:           string;
    transcriptionConfiguration:    string;
    message?:                      string;
}

enum TranscriptionStatusType {
    STARTED        =    'started',
    INTERRUPTED    =    'interrupted',
    RESUMED        =    'resumed',
    STOPPED        =    'stopped',
    FAILED         =    'failed',
}

export default class Transcript {
    results: TranscriptResult[];    // at least one
}

export class TranscriptResult {
    resultId:        string;
    isPartial:       boolean;
    startTimeMs:     number;
    endTimeMs:       number;
    alternatives:    TranscriptAlternative[];    // most confident first
    }

export default class TranscriptAlternative {
    items: TranscriptItem[];    // in start time order
    transcript: string; //concatenated transcript items
    entities?: TranscriptEntity[];
}

export default class TranscriptItem {
    type:                      TranscriptItemType;
    startTimeMs:               number;
    endTimeMs:                 number;
    attendee:                  Attendee;
    content:                   string;
    vocabularyFilterMatch?:    boolean;
    confidence?:               number;  
    stable?:                   boolean;
}

enum TranscriptItemType {
    PRONUNCIATION    =    'pronunciation',// content is a word
    PUNCTUATION      =    'punctuation',// content is punctuation
}

export default class TranscriptEntity {  
    category:       string;  
    confidence:     number;  
    content:        string;  
    endTimeMs:      number;  
    startTimeMs:    number;  
    type?:          string;
}

// This is an existing SDK model
export default class Attendee {
    attendeeId:        string;
    externalUserId:    string;
}
```

## 数据准则
<a name="data-guidelines"></a>

请记住这些准则。

1. `transcription.results` 可能有多个结果。

1. 如果为 `transcription.results[i].isPartial = true`，则可能会更新整个结果。可能会更新，但不能保证。更新具有相同的 `transcript.result[i].resultId`。如果您要避免低置信度转录，则可以完全跳过部分结果。如果您要低延迟结果，则可以显示部分结果，然后在更新时完全覆盖。

1. `transcription.results[i].alternatives` 始终至少包含一个条目。如果包含多个条目，则最确定的条目位于列表的第一位。在大多数情况下，您可以选择 `transcription.results[i].alternatives` 中的第一个条目而忽略其他条目。

1. `transcription.results[i].alternatives[j].items` 包括每个单词或标点符号的条目。

1. `transcription.results[i].alternatives[j].items[k].` 内容为所说的内容。

1. `transcription.results[i].alternatives[j].items[k].attendee` 为内容的用户归属（谁）。

1. `transcription.results[i].alternatives[j].items[k].startTimeMs` 为内容的“时间”。这样可以按照单词的说话顺序在不同的用户之间 word-by-word呈现用户归因的转录。

1. 通常可以忽略 `transcription.results[i].alternatives[j].items[k].endTimeMs` 字段，但该字段旨在完整说明谁在何时说了什么内容。

1. 如果内容与过滤器中的单词匹配，则 `transcription.results[i].alternatives[j].items[k].vocabularyFilterMatch` 为真，否则为假。

1. `transcription.results[i].alternatives[j].items[k].confidence` 是 0 到 1 之间的值。它表示引擎对项目内容与所说单词正确匹配的置信度，其中 0 表示置信度最低，1 表示置信度最高。

1. `transcription.results[i].alternatives[j].items[k].stable` 表示当前单词是否会在后续部分结果更新中发生变化。仅当您在请求中将 `EnablePartialResultsStabilization` 设置为 `true` 以启用部分结果的稳定性功能时，此值才可为真。

1. `transcription.results[i].alternatives[j].entities` 包括内容识别或编修功能检测到的每个实体的条目。只有启用内容识别或编修后，才会填充该列表。实体可以是个人身份信息或个人健康信息等数据。在转录过程中，您可以使用实体来突出显示感兴趣的单词或对其采取行动。

1. `transcription.results[i].alternatives[j].entities[k].category` 是实体的类别。它等同于请求中提供的内容识别或编修类型，例如“PII”或“PHI”。

1. `transcription.results[i].alternatives[j].entities[k].confidence` 衡量特定内容真正成为实体的引擎有多强大。请注意，这与项目级别的置信度不同，后者衡量引擎对单词本身正确性的信心。

1. `transcription.results[i].alternatives[j].entities[k].content` 是构成实体的实际文本。这可以是多个项目，例如地址。

1. `transcription.results[i].alternatives[j].entities[k].startTimeMs` 捕获实体开始讲话的时间。

1. `transcription.results[i].alternatives[j].entities[k].endTimeMs` 捕获实体结束讲话的时间。

1. `transcription.results[i].alternatives[j].entities[k].type` 仅支持 Transcribe 引擎并提供实体的子类型。这些是诸如“地址”、“CREDIT\$1DEBIT\$1NUMBER”等值。

## 为 TranscriptEvents 注册事件处理程序
<a name="register-handler"></a>

以下示例使用适用于 Amazon Chime 软件开发工具包的客户端库。 JavaScript但是，所有亚马逊 Ch SDKs ime 的模式都是一致的。

`RealtimeController` 和 `RealtimeControllerFacade` 中的 `TranscriptionController` 包括用于添加处理 `TranscriptionEvents` 的处理程序的特定函数：

```
/** 
 * Returns the [[TranscriptionController]] for this real-time controller. 
 */
readonly transcriptionController?: TranscriptionController;
```

`TranscriptionController` 有两个函数，用于管理对 `TranscriptionEvent` 回调的订阅和取消订阅：

```
import TranscriptEvent from './TranscriptEvent';

export default interface TranscriptionController {
  /**
   * Subscribe a callback to handle received transcript event
   */
  subscribeToTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void;

  /** 
   * Unsubscribe a callback from receiving transcript event 
   */
  unsubscribeFromTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void;
}
```

**使用可选 `TranscriptionController`**  
我们提供了名为 `DefaultTranscriptionController` 的 `TranscriptionController` 接口的默认实现。`DefaultRealtimeController` 和 `DefaultAudioVideoFacade` 中的默认实现会返回一个 `DefaultTranscriptionController` 对象：

```
/** 
get transcriptionController(): TranscriptionController {
   return this.realtimeController.transcriptionController;
}
```

`DefaultRealtimeController` 也在其构造函数中使用一个可选 `TranscriptionController` 对象。这允许您覆盖 `DefaultTranscriptionController` 行为。开发人员应用程序通过 `AudioVideoFacade` 对象的 `TranscriptionController` 对象订阅和取消订阅一个或多个回调：

```
// Subscribe
this.audioVideo.transcriptionController?.subscribeToTranscriptEvent(this.transcriptEventHandler);

// Unsubscribe
this.audioVideo.transcriptionController?.unsubscribeFromTranscriptEvent(this.transcriptEventHandler););
```

# 处理收到的 Amazon Chime SDK 实时转录事件
<a name="delivery-examples"></a>

以下示例显示如何处理收到的 `TranscriptEvent`。

**注意**  
确切输出取决于几个因素，包括个人说话的速度和停顿时间。

## 示例 1： StartMeetingTranscription
<a name="example-1"></a>

此示例显示了典型的 `StartMeetingTranscription` 操作。

```
meeting.StartMeetingTranscription(
    { EngineTranscribeSettings: { Languagecode: ‘en-US’ } } );
```

该操作会生成一个 `TranscriptEvent`。

```
{   
    status: {        
        type: 'started',        
        eventTimeMs: 1620118800000,        
        transcriptionConfig: {                    
            LanguageCode: 'en-US'        
        }    
    }
}
```

## 示例 2：部分转录结果
<a name="example-2"></a>

在这个示例中，一位与会者说：“那只快速的棕色狐狸跳过那只懒狗。” 在示例中，`isPartial` 值为 `true`。如果更深入地研究消息，您会发现系统将“狐狸”一词处理为“事实”。系统使用相同的 `resultId` 更新转录。

```
{
    transcript: {
        results: [{
            resultId:"1",                               isPartial: true,
            startTimeMs: 1620118800000,                 endTimeMs: 1620118801000,
            alternatives: [{
                items:[{
                    type:        'pronunciation',
                    startTimeMs: 1620118800000,         endTimeMs: 1620118800200,
                    attendee: { attendeeId: "1",        externalUserId: "A"},
                    content: "the",                     vocabularyFilterMatch: false
                },
                {
                    type:        'pronunciation',
                    startTimeMs: 1620118800200,          endTimeMs: 1620118800400,
                    attendee: { attendeeId: "1",         externalUserId: "A" },
                    content:"quick",                     vocabularyFilterMatch: false
                },
                {
                    type:'pronunciation',
                    startTimeMs: 1620118800400,          endTimeMs: 1620118800750,
                    attendee: { attendeeId: "1",         externalUserId: "A" },
                    content:"brown",                     vocabularyFilterMatch: false
                },
                {
                    type:'pronunciation',
                    startTimeMs: 1620118800750,          endTimeMs: 1620118801000,
                    attendee:{ attendeeId: "1",          externalUserId: "A" },
                    content:"facts",                     vocabularyFilterMatch: false
                },
                {
                    type:'punctuation',
                    startTimeMs: 1620118801000,          endTimeMs: 1620118801500,
                    attendee:{ attendeeId: "1",          externalUserId: "A" },
                    content:    ",",                     vocabularyFilterMatch: false
                }]
            }]
        }]
    }
}
```

## 示例 3：最终转录结果
<a name="example-3"></a>

如果转录不完整，系统会再次处理该短语。此示例的 `false` 值为 `isPartial`，消息包含“狐狸”而不是“事实”。系统使用相同的 ID 重新发出消息。

```
{
    transcript: {
        results: [{
            resultId:"1",                                isPartial: false,
            startTimeMs: 1620118800000,                  endTimeMs: 1620118801000,
            alternatives: [{
                items:[{
                    type:        'pronunciation',
                    startTimeMs: 1620118800000,          endTimeMs: 1620118800200,
                    attendee: { attendeeId: "1",         externalUserId: "A"},
                    content: "the",                      vocabularyFilterMatch: false
                },
                {
                    type:        'pronunciation',
                    startTimeMs: 1620118800200,          endTimeMs: 1620118800400,
                    attendee: { attendeeId: "1",         externalUserId: "A" },
                    content:"quick",                     vocabularyFilterMatch: false
                },
                {
                    type:'pronunciation',
                    startTimeMs: 1620118800400,          endTimeMs: 1620118800750,
                    attendee: { attendeeId: "1",         externalUserId: "A" },
                    content:"brown",                     vocabularyFilterMatch: false
                },
                {
                    type:'pronunciation',
                    startTimeMs: 1620118800750,          endTimeMs: 1620118801000,
                    attendee: { attendeeId: "1",          externalUserId: "A" },
                    content:"fox",                       vocabularyFilterMatch: false
                },
                {
                    type:'punctuation',
                    startTimeMs: 1620118801000,          endTimeMs: 1620118801500,
                    attendee: { attendeeId: "1",          externalUserId: "A" },
                    content:    ",",                     vocabularyFilterMatch: false
                }]
            }]
        }]
    }
}
```

# 解析 Amazon Chime SDK 转录
<a name="parse-transcripts"></a>

使用以下命令解析转录消息中的转录内容。该命令解析 transcript-message.txt 文件中的完整句子。

```
with open('transcript-message.txt') as f:
        for line in f:
            result_json = json.loads(line)["transcript"]["results"][0]
            if result_json['isPartial'] == False:
                print(result_json["alternatives"][0]["transcript"])
```

# 在 Amazon Chime SDK 会议中使用媒体复制
<a name="media-replication"></a>

您可以使用媒体复制将主 WebRTC 会话与多个副本会话关联，以覆盖更多的受众。每个 WebRTC 媒体会话支持 250 个连接，并且您可以将一个主会话复制到多个副本会话。连接到副本会话的参与者只能接收连接到主会话的主讲人的音频和视频。他们对连接到复制会话的参与者一无所知，这使得媒体复制非常适合网络研讨会和其他需要隐私的使用案例。

下图显示了带有主讲人共享音频和视频的主会话与参与者使用媒体的副本会话之间的媒体复制。

![\[主会话中的主讲人共享。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/replication-1.png)


**注意**  
*Chime SDK Meetings — 每个主会议的副本会议*的服务限额默认值为 4，您可以根据请求提高该限制。有关限额的更多信息，请参阅*AWS 一般参考*中的 [AWS 服务限额](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

**Topics**
+ [互动参与者](#interactive-participants)
+ [全球参与者](#global-participants)
+ [会话生命周期](#session-lifecycle)

## 互动参与者
<a name="interactive-participants"></a>

可向连接到副本会话的参与者授予加入主会话的访问权限。由于每个人都使用 WebRTC 连接，因此主讲人和参与者不会遇到转码延迟。当参与者在主会话和副本会话之间切换时，他们会重复使用自己的 WebRTC 连接，因此切换速度非常快。这使参与者能够在不错过任何内容的情况下仍能进行实时对话。

下图显示了副本会话的参与者使用其 WebRTC 连接切换到主会话。

![\[显示两个参与者从副本会话切换到主会话的示意图。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/replication-2.png)


## 全球参与者
<a name="global-participants"></a>

您可以为每次 WebRTC 媒体会话选择 AWS 区域。这使您能够在比主会话所在区域更靠近参与者的区域中创建副本会话。执行此操作时，媒体会通过 AWS 网络从主会话流向副本会话，然后通过 Internet 从副本会话流向参与者。向全球受众演示时，将副本会话创建于参与者附近可以帮助确保媒体通过 AWS 网络而不是互联网在全球传输，从而获得更好的会议体验。

下图显示了不同区域的主会话和副本会话。

![\[3 个区域的参与者观看演示文稿的示意图。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/replication-3.png)


## 会话生命周期
<a name="session-lifecycle"></a>

创建会话  
你用 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateMeeting.html) 或 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html) APIs 创建 WebRTC 媒体会话。默认情况下，除非您专门 APIs 创建副本会话，否则将创建主会话。  
您可以通过在 `CreateMeeting` 或 `CreateMeetingWithAttendees` API 调用中将主会话的 `MeetingId` 指定为 `PrimaryMeetingId` 来创建副本会话。  
如果您将副本会话的 `MeetingId` 指定为 `PrimaryMeetingId`，则 API 调用将失败。

创建与会者  
 要创建加入WebRTC媒体会话所需的与会者证书，可以使用 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html), [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_BatchCreateAttendee.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_BatchCreateAttendee.html) 或 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateAttendee.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_CreateAttendee.html) APIs.   
为大量与会者创建会话时，使用 `CreateMeetingWithAttendees` 或 `BatchCreateAttendee` 以最大限度地减少所需的 API 调用次数。

删除与会者  
你用 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteAttendee.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteAttendee.html)用于撤销参加 WebRTC 媒体会话的与会者凭证的 API。如果与会者已连接到会议，他们将断开连接并且无法重新加入。  
当你使用 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteMeeting.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteMeeting.html)API 用于删除 WebRTC 媒体会话，它会自动删除所有与会者，您无需致电。`DeleteAttendee`

切换会话  
要允许参与者从副本会话切换到主会话，您必须在主会议中为他们创建凭证。请参阅此列表前面的*创建与会者*。使用 Amazon Chime SDK 客户端库中带有 `promoteToPrimaryMeeting` 方法的凭证切换到主会话。  
要将参与者切换回副本会话，请使用 Amazon Chime SDK 客户端库中的`demoteFromPrimaryMeeting`方法，或者使用 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteAttendee.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteAttendee.html)使他们的主会话凭证失效的 API。  
直接连接到主会话的主讲人无法切换到副本会话。
有关在会话之间切换的更多信息，请参阅客户端库文档：  
+ [安卓版 Amazon Chime SDK 已开启。](https://github.com/aws/amazon-chime-sdk-android) GitHub
+ 适用于 [iOS 的 Amazon Chime SDK 已开启。](https://github.com/aws/amazon-chime-sdk-ios) GitHub
+ 适用于 on 的 [Amazon Chime SDK 客户端库。 JavaScript](https://github.com/aws/amazon-chime-sdk-js) GitHub

删除会话  
你用 [https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteMeeting.html](https://docs.aws.amazon.com/chime/latest/APIReference/API_meeting-chime_DeleteMeeting.html)用于删除 WebRTC 媒体会话的 API。  
如果您删除主会话，`DeleteMeeting` API 会自动删除所有附加的副本会话。因此，要删除所有会话，只需删除主会话即可。  
如果连续 5 分钟内没有与会者连接，则该服务会自动删除主会话。该服务仅在删除主会话时自动删除副本会话。也就是说，您可以在创建主会话时创建副本会话，并且副本将在主会话期间可用。

# Amazon Chime SDK 会议的故障排除和调试
<a name="troubleshoot-sdk-meetings"></a>

使用以下主题帮助诊断和排除使用 Amazon Chime SDK 时遇到的问题。

**Topics**
+ [了解 Amazon Chime SDK 会议的系统要求](ts-supported-browsers.md)
+ [为 Amazon Chime SDK 会议设置日志记录和监控](ts-log-monitor.md)
+ [Amazon Chime SDK 会议的故障排除](self-troubleshooting.md)
+ [了解 Amazon Chime SDK 会议常见问题](common-issues.md)

# 了解 Amazon Chime SDK 会议的系统要求
<a name="ts-supported-browsers"></a>

作为故障排除的一部分，确保您的代码适用于受支持的浏览器。有关受支持的浏览器、版本和操作系统的当前列表，请参阅 [Amazon Chime SDK 系统要求](meetings-sdk.md#mtg-browsers)。[Github FAQs 上的开发者指南](https://github.com/aws/amazon-chime-sdk-js/issues/1059)解决了浏览器和其他兼容性问题。另外，请熟悉[已知的浏览器问题](https://aws.github.io/amazon-chime-sdk-js/modules/faqs.html#known-browser-issues) GitHub 和任何解决方法。

如果你刚开始使用 Amazon Chime SDK Meetings，那么 [Amazon Chime SDK 的 Builder](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/20_Builders_Journey.md) Journey 提供了 step-by-step使用亚马逊 Chime SDK 进行构建的指南，以及故障排除所需的工具。

# 为 Amazon Chime SDK 会议设置日志记录和监控
<a name="ts-log-monitor"></a>

日志记录可帮助您收集诸如服务器端会议事件和客户端浏览器控制台日志等信息。

Amazon Chime SDK 提供服务器端会议活动，您可以将其发送到亚马逊和 EventBridge 亚马逊 CloudWatch 活动日志。您可以创建 CloudWatch 指标和见解，并在控制面板中使用它们进行监控。[Amazon Chime SDK 事件的服务器端日志和监控](https://aws.amazon.com/blogs/business-productivity/server-side-logging-and-monitoring-of-amazon-chime-sdk-events/)博客文章介绍了如何启用 CloudWatch 指标、见解和控制面板。

Amazon Chime SDK 提供客户端事件，用于监控音频和视频质量、网络带宽和连接问题。[使用 Amazon Chime SDK 会议事件进行监控和故障排除](https://aws.amazon.com/blogs/business-productivity/monitoring-and-troubleshooting-with-amazon-chime-sdk-meeting-events/)博客文章介绍了如何针对加入失败、音频质量问题以及麦克风和摄像头设置失败启用 CloudWatch 指标、见解和控制面板。有关会议活动的更多信息，请参阅 Github 上的[会议事件](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/06_Meeting_Events.md)。



## 用于对指标进行故障排除的选项
<a name="ts-cloudwatch-options"></a>

您可以使用以下选项来收集故障排除事件。
+ 在每次活动时发送指标 
+ 每 N 秒批处理一次事件 
+ 在会议结束时发送指标 
+ 浏览器控制台日志的日志记录级别

## 推荐的指标
<a name="ts-cloudwatch-metrics"></a>

您至少应收集和记录以下指标。
+ SDK 平台和版本
+ 浏览器和版本
+ 操作系统
+ 逻辑函数
+ 会议开始
+ 会议结束
+ 已加入与会者
+ 已离开与会者
+ 已掉线与会者

此外，根据您遇到的问题，以下指标可以提供有关连接、带宽和质量问题的信息。您可以将这些指标每一次出现的情况记录下来，也可以只计算数量。计数可以提供对潜在问题的总结视图：
+ connectionDidSuggestStopVideo
+ connectionDidBecome不错
+ connectionDidBecome可怜的
+ Attendee join time > t seconds
+ MeetingStartFailed
+ MeetingFailed

## 启用客户端日志记录
<a name="client-side-logging"></a>

您可以通过将 `LogLevel.INFO` 传递给 `ConsoleLogger` 对象来启用 `INFO` 级别的浏览器日志。

```
const logger = new ConsoleLogger('MyLogger', LogLevel.INFO);const meetingSession = new DefaultMeetingSession(configuration,logger,deviceController); 
```

您还可以使用 Amazon Chime 软件开发工具包中的`POSTLogger`组件 JavaScript 来捕获后端的浏览器日志，例如亚马逊 CloudWatch 日志。 `POSTLogger``HTTP POST`请求将浏览器日志上传到[POSTLogger构造函数](https://aws.github.io/amazon-chime-sdk-js/classes/postlogger.html)中的给定 URL。例如，[上的 Amazon Chime SDK 无服务器演示 GitHub](https://github.com/aws/amazon-chime-sdk-js/blob/main/demos/browser/app/meetingV2/meetingV2.ts#L1773)使用将浏览器日志发送`POSTLogger`到 Amazon Logs 以 CloudWatch 供将来调查。

## 启用服务器端日志记录
<a name="server-side-logging"></a>

适用的 Amazon Chime SDK JavaScript 还会使用关键会议事件（例如`MeetingStartFailed`和）调用`eventDidReceive`旁听者方法。`MeetingFailed`会议活动通常包括故障的具体原因。例如，假设一大群客户遇到故障。您的 Web 应用程序可收集这些会议事件，然后与我们共享以排查根本原因。有关会议活动的更多信息，请参阅[上的 GitHub会议活动指南](https://aws.github.io/amazon-chime-sdk-js/modules/meetingevents.html)以及[使用 Amazon Chime SDK 会议事件进行监控和故障排除](https://aws.amazon.com/blogs/business-productivity/monitoring-and-troubleshooting-with-amazon-chime-sdk-meeting-events/)博客文章。

# Amazon Chime SDK 会议的故障排除
<a name="self-troubleshooting"></a>

本主题中的各部分说明几种对 Amazon Chime SDK 会议进行自我故障排除的方法。

**Topics**
+ [检查 FAQs 和已知问题](#check-faqs)
+ [验证网络访问](#net-acess)

## 检查 FAQs 和已知问题
<a name="check-faqs"></a>

请查看这些问题 FAQs 和已知问题列表，以 GitHub 获取故障排除和调试建议。
+ [亚马逊 Chime 软件开发工具包 — — 会议 JavaScript ](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/07_FAQs.md#meetings)
+ [亚马逊 Chime 软件开发工具包 — — 媒体 JavaScript ](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/07_FAQs.md#media)
+ [亚马逊 Chime 软件开发工具包 — — 联网 JavaScript ](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/07_FAQs.md#networking)
+ [Amazon Chime SDK — 音频和视频](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/07_FAQs.md#audio-and-video)

## 验证网络访问
<a name="net-acess"></a>

企业通常会设置网络防火墙，限制对特定端口的访问或连接到其网络之外的 IP 地址范围。以下各部分说明验证网络访问的一些方法。

**Topics**
+ [验证 AWS SDK 和 Amazon Chime SDK 子网和端口](#subnets-ports)
+ [使用演示应用程序重现问题](#repro-on-demo-apps)
+ [使用会议准备情况检查程序](#ready-checker)

### 验证 AWS SDK 和 Amazon Chime SDK 子网和端口
<a name="subnets-ports"></a>

使用 Amazon Chime SDK 的应用程序使用两个层级，即服务器和客户端。服务器层使用 AWS SDK 并具有服务器端会议处理程序。客户端层使用客户端 SDKs。

S AWS DK 用于调用服务器， APIs 例如[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html)。这样可以 APIs 连接到`us-east-1`、、、`us-west-2``ap-southeast-1``eu-central-1``us-gov-east-1`、和`us-gov-west-1`区域中的 AWS 全球服务终端节点。*AWS 一般参考*中的 [AWS IP 地址范围](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)页面列出了每个区域的 IP 地址范围。有关服务终端节点和限额的信息，请参阅 [Amazon Chime SDK 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html)

客户端 SDKs（例如适用的 Amazon Chime 软件开发工具包）连接到域中的服务终端节点。 JavaScript `*.chime.aws`

使用以下验证确保您拥有网络权限：
+ 运行 [Amazon Chime SDK 会议准备情况检查器](https://github.com/aws/amazon-chime-sdk-js#meeting-readiness-checker)，验证您是否可以访问您的网络和端口。 GitHub 
+ 确认您可以从您的网络或最终用户的网络解析 \$1.chime.aws 域。
+ 确保您的防火墙允许通过 TCP 端口 443（用于控制命令）和 UDP 端口 3478（用于媒体）连接到 AWS IP 范围。

### 使用演示应用程序重现问题
<a name="repro-on-demo-apps"></a>

作为最佳实践，通过尝试在一个演示应用程序中重现您的问题开始调试过程。这使服务团队能够找到问题可能出在哪里。如果您无法在演示应用程序中重现问题，可以查看该应用程序的代码，以了解其如何实现相关使用案例。




| Amazon Chime SDK | 功能 | 演示应用程序资源 | 
| --- | --- | --- | 
| JavaScript SDK | 会议 | [演示说明](https://github.com/aws/amazon-chime-sdk-js/tree/main/demos/serverless)、[源代码](https://github.com/aws/amazon-chime-sdk-js/tree/main/demos/browser) | 
| React 组件 | 会议 |   [演示说明](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/meeting)、[源代码](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/meeting/src)   | 
| 会议聊天 | 消息收发 |   [博客文章](https://aws.amazon.com/blogs/business-productivity/build-meeting-features-into-your-amazon-chime-sdk-messaging-application/)、[演示说明](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)、[源代码](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat/src)   | 
| iOS/Android | 会议 |  （博客文章）[使用 Amazon Chime SDK 在安卓系统上构建会议应用程序](https://aws.amazon.com/blogs/business-productivity//building-a-meeting-application-on-android-using-the-amazon-chime-sdk/) （博客文章）[使用 Amazon Chime SDK 在 iOS 系统上构建会议应用程序](https://aws.amazon.com/blogs/business-productivity/building-a-meeting-application-on-ios-using-the-amazon-chime-sdk/)   | 
| PSTN 音频 | 入站调用 |   [博客文章](https://github.com/aws-samples/amazon-chime-sma-update-call)[源代码](https://github.com/aws-samples/amazon-chime-sma-update-call)   | 

### 使用会议准备情况检查程序
<a name="ready-checker"></a>

使用 [Amazon Chime SDK 会议准备情况检查器](https://github.com/aws/amazon-chime-sdk-js#meeting-readiness-checker)。 GitHub检查程序可帮助验证音频和视频设备以及用户连接情况。您可以使用能揭露任何问题根本原因的 pass/fail 雕像向最终用户展示结果。

# 了解 Amazon Chime SDK 会议常见问题
<a name="common-issues"></a>

以下各部分提供常见会议问题的故障排除方法。

**Topics**
+ [连接问题](#connectivity-issues)
+ [音频和视频质量问题](#a-v-quality)
+ [为 Amazon Chime SDK 会议验证 SDK 限额和 API 节流](quotas-throttling.md)
+ [为 Amazon Chime SDK 会议打开支持案例](open-support-cases.md)

## 连接问题
<a name="connectivity-issues"></a>

有关连接问题，请参阅 [验证网络访问](self-troubleshooting.md#net-acess)。

## 音频和视频质量问题
<a name="a-v-quality"></a>

音频和视频质量问题可能有多种原因。 audio/video 质量不佳的两个主要原因是网络带宽和设备性能。有关不同挑战以及这些挑战如何影响 audio/video 质量的详细信息，请参阅上的 “[质量、带宽和连接](https://aws.github.io/amazon-chime-sdk-js/modules/qualitybandwidth_connectivity.html)” *GitHub*。本文描述可以监控的不同的事件和指标，以检测带宽问题和潜在缓解措施。

您可以选择距离目标会议会话的受众更近的媒体区域。要了解如何选择最佳媒体区域，请参阅使用会议区域 (https://docs.aws.amazon.com/chime-sdk/latest/dg/chime-sdk-meetings-regions .html)。

根据会议出席者的可用带宽，Amazon Chime SDK 会根据政策调整视频的视频质量。received/uploaded. To understand how you can control the video quality for different video layouts, visit Managing Video Quality for different Video Layouts (https://aws.github.io/amazon-chime-sdk-js/modules/videolayout.html). This article describes video lifecycle management and uplink/downlink

**视频分辨率注意事项**
+ 上传视频的默认分辨率为 540p，在 1400kbps 时为 15fps。您可以根据带宽降低分辨率和帧速率。
+ 根据可用的接收器带宽，确定要显示视频磁贴的数量。所有视频磁贴和内容共享不要超过 6Mbps。当最终用户没有足够带宽时，会看到黑色视频磁贴。

**使用视频上行链路和下行链路带宽策略**  
Amazon Chime SDK 提供以下带宽策略。
+ NScaleVideoUplinkBandwidthPolicy — 实现的捕获和编码参数几乎等于桌面、Web 和移动客户端使用的参数。
+ AllHighestVideoBandwidthPolicy — 始终订阅最高质量的视频流。
+ NoVideoDownlinkBandwidthPolicy — 当带宽降至给定阈值以下时，禁用视频。
+ VideoPriorityBasedPolicy — 在带宽较低的情况下，优先考虑音频而不是视频。
+ VideoAdaptiveProbePolicy

# 为 Amazon Chime SDK 会议验证 SDK 限额和 API 节流
<a name="quotas-throttling"></a>

[Amazon Chime SDK 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html)页面列出服务限额、API 速率以及您是否可以进行调整。使用[AWS 控制台服务限额](https://console.aws.amazon.com/servicequotas/home/services/chime/quotas)页面请求限额调整。

**微调您的 API 速率**  
超过其 API 速率的应用程序会收到 HTTP 状态码 429 和 `ThrottledClientException` 消息。您可以调整您的 API 速率，但在调整之前，请检查您的应用程序中是否存在可能耗尽这些速率的错误。例如，您可以在循环中创建会议，或者创建会议而不进行清理。

根据您创建会议的方式，可能需要修改代码。例如，将 `CreateMeeting` 和 `CreateAttendee` 替换为：
+ [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html) — 每次会议最多可创建 10 个与会者。
+ [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_BatchCreateAttendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_BatchCreateAttendee.html) — 每次会议最多可创建 100 个与会者。

您可以将创建的与会者存储在数据库中，在受邀者加入会议时获取与会者信息，然后将他们与预先创建的与会者关联。

# 为 Amazon Chime SDK 会议打开支持案例
<a name="open-support-cases"></a>

如果您还有其他问题或需要业务支持，可以联系 [AWS 客户支持](https://pages.awscloud.com/GLOBAL-aware-GC-Amazon-Chime-SDK-2020-reg.html)。有关我们的支持计划的更多信息，请参阅[比较支持计划](https://aws.amazon.com/premiumsupport/plans/?nc=sn)页面。创建支持案例时，始终在存在问题的账户下打开。包括控制台浏览器日志、会议和与会者 IDs以及任何相关的支持案例或 GitHub问题。