

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

# 创建 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 来删除媒体捕获管道。会议结束后，所有媒体管道都会停止。