

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

# 在 Kinesis Video Streams 中设置通知
<a name="notifications"></a>

当媒体片段可供使用时，Kinesis Video Streams 会 Amazon Simple Notification Service 使用（亚马逊 SNS）通知通知客户。

**注意**  
亚马逊 Kinesis Video Streams 使用亚马逊 SNS 标准主题进行沟通。目前不支持 FIFO 主题。

以下主题说明了如何开始使用通知。

**Topics**
+ [管理通知配置](#manage-configurations)
+ [关于制作人 MKV 标签](#producer-mkv-tags)
+ [亚马逊 SNS 消息](#sns-messages)
+ [跨账户 Amazon SNS 通知发布](#cross-account-sns)

## 管理通知配置
<a name="manage-configurations"></a>

要管理通知配置，请使用`UpdateNotificationConfiguration`和`DescribeNotificationConfiguration`。有关更多信息，请参阅下文。

### UpdateNotificationConfiguration
<a name="update-notification-config"></a>

使用此 API 操作更新直播的通知信息。有关该`UpdateNotificationConfiguration`功能的更多信息，请参阅[UpdateNotificationConfiguration ](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateNotificationConfiguration.html)《*亚马逊 Kinesis Video Streams 开发者指南*》。 ****

**注意**  
更新通知配置后，至少需要一分钟才能启动通知。请至少等待一分钟，然后在更新调用`PutMedia`后调用。

### DescribeNotificationConfiguration
<a name="describe-notification-config"></a>

使用此 API 来描述附加到直播的通知配置。有关该`DescribeNotificationConfiguration`功能的更多信息，请参阅[DescribeNotificationConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeNotificationConfiguration.html)《*亚马逊 Kinesis Video Streams 开发者指南*》。 ****

## 关于制作人 MKV 标签
<a name="producer-mkv-tags"></a>

 你可以使用 Kinesis Video Streams 制作人 SDK 通过在 SDK 中公开 API 操作来标记感兴趣的特定片段。请[在此段代码中](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/samples/kvs_gstreamer_sample.cpp#L404)查看其工作原理示例。调用此 API 后，SDK 将添加一组预定义的 MKV 标签以及片段数据。Kinesis Video Streams 将识别这些特殊的 MKV 标签，并为标记的片段启动通知。

随通知 MKV 标签一起提供的任何片段元数据都将作为 Amazon SNS 主题有效负载的一部分发布。

### 制作人 MKV 标签的语法
<a name="producer-mkv-tags-syntax"></a>

```
|+ Tags
| + Tag
|  // MANDATORY: Predefined MKV tag to trigger the notification for the fragment
|  + Simple
|   + Name: AWS_KINESISVIDEO_NOTIFICATION
|   + String
| // OPTIONAL: Key value pairs that will be sent as part of the Notification payload
|  + Simple
|   + Name: CUSTOM_KEY_1 // Max 128 bytes
|   + String:CUSTOM_VALUE_1 // Max 256 bytes
|  + Simple
|   + Name: CUSTOM_KEY_2 // Max 128 bytes
|   + String: CUSTOM_VALUE_2 // Max 256 bytes
```

### MKV 标签限制
<a name="mkv-tag-limits"></a>

下表列出了与元数据标签相关的限制。如果元数据标签限制是可调整的，您可以通过您的客户经理申请增加限制。


| 限制 | 最大值 | 可调整 | 
| --- | --- | --- | 
|  可选的元数据密钥长度  |  128  |  否  | 
|  可选的元数据值长度  |  256  |  否  | 
|  可选元数据的最大数量  |  10  |  是  | 

## 亚马逊 SNS 消息
<a name="sns-messages"></a>

本主题包含有关 Amazon SNS 消息和主题有效载荷的更多信息。

**Topics**
+ [亚马逊 SNS 主题有效负载](#topic-payload)
+ [查看您的亚马逊 SNS 消息](#viewing-messages)

### 亚马逊 SNS 主题有效负载
<a name="topic-payload"></a>

通过上一个工作流程启动的任何通知都将传送 Amazon SNS 主题有效负载，如以下示例所示。此示例是一条 Amazon SNS 消息，它是在使用来自 Amazon Simple Queue Service （亚马逊 SQS）队列的通知数据之后出现的。

```
{
"Type" : "Notification",
"MessageId" : Message ID,
"TopicArn" : SNS ARN,
"Subject" : "Kinesis Video Streams Notification",
"Message" : "{\"StreamArn\":\Stream Arn,\"FragmentNumber\":\Fragment Number,\"FragmentStartProducerTimestamp\":FragmentStartProducerTimestamp,
                \"FragmentStartServerTimestamp\":FragmentStartServerTimestamp,\"NotificationType\":\"PERSISTED\",\"NotificationPayload\":{\ CUSTOM_KEY_1:\CUSTOM_VALUE_1,
                \CUSTOM_KEY_2:\CUSTOM_VALUE_2}}",
"Timestamp" : "2022-04-25T18:36:29.194Z",
"SignatureVersion" : Signature Version,
"Signature" : Signature,
"SigningCertURL" : Signing Cert URL,
"UnsubscribeURL" : Unsubscribe URL
}
```

```
Subject: "Kinesis Video Streams Notification"
Message: 
{
    "StreamArn":Stream Arn,
    "FragmentNumber":Fragment Number,
    "FragmentStartProducerTimestamp":Fragment Start Producer Timestamp,
    "FragmentStartServerTimestamp":Fragment Start Server Timestamp,
    "NotificationType":"PERSISTED",
    "NotificationPayload":{
        CUSTOM_KEY_1:CUSTOM_VALUE_1,
        CUSTOM_KEY_2:CUSTOM_VALUE_2
    }
}
```

### 查看您的亚马逊 SNS 消息
<a name="viewing-messages"></a>

您无法直接从 Amazon SNS 主题中读取消息，因为没有 API 可以这样做。要查看消息，请在 SQS 队列中订阅 SNS 主题，或者选择任何其他 [Amazon SNS 支持的目的地](https://docs.aws.amazon.com//sns/latest/dg/sns-event-destinations.html)。但是，查看消息的最有效方法是使用 Amazon SQS。

**使用亚马逊 SQS 查看您的亚马逊 SNS 消息**

1. 创建[亚马逊 SQS 队列。](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-create-queue.html)

1. 从中 AWS 管理控制台，打开下方设置为目的地的 Amazon SNS 主题。`NotificationConfiguration`

1. 选择**创建订阅**，然后选择在第一步中创建的 Amazon SQS 队列。

1. 在启用通知配置并在片段中添加通知 MKV 标签的情况下运行会`PutMedia`话。

1. 在亚马逊 SQS 控制台中选择亚马逊 SQS 队列，然后为亚马逊 SQS 队列**选择发送和接收**消息。

1. 轮询留言。此命令应显示`PutMedia`会话生成的所有通知。有关轮询的信息，请参阅 [Amazon SQS 短期和长期](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html)投票。

## 跨账户 Amazon SNS 通知发布
<a name="cross-account-sns"></a>

要向其他 AWS 账户中的主题发布 Amazon SNS 通知，您需要配置基于身份的策略和基于资源的策略。此设置允许 Kinesis Video Streams 将通知从一个账户发布到另一个账户中的亚马逊 SNS 主题。

### 基于身份的策略配置
<a name="cross-account-identity-policy"></a>

调用 `PutMedia` API 的 IAM 角色或用户必须拥有跨账户 Amazon SNS 主题的`sns:Publish`权限。将以下策略声明添加到基于身份的策略中：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesisvideo:PutMedia",
            "Resource": "arn:aws:kinesisvideo:us-east-1:123456789012:stream/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:us-east-1:123456789012:*"
            ]
        }
    ]
}
```

------

### 基于资源的策略配置
<a name="cross-account-resource-policy"></a>

目标账户中的 Amazon SNS 主题必须具有允许源账户发布消息的基于资源的访问策略。按如下方式配置 Amazon SNS 主题访问策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:us-east-1:123456789012:topic-name"
    }
  ]
}
```

------

`<kvs_streams_account_id>`替换为您的 Kinesis Video Streams 直播所在的 AWS 账户 ID，`<sns_topic_arn>`以及亚马逊 SNS 主题的 ARN。

### 要求和注意事项
<a name="cross-account-requirements"></a>
+ 必须同时配置基于身份的策略（在源账户中）和基于资源的策略（在目标账户中），才能使跨账户发布生效。
+ 用于`PutMedia`操作的 IAM 角色必须包含`sns:Publish`权限，即使使用带有角色别名的 IoT 证书也是如此。