

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

當媒體片段可供取用時，Kinesis Video Streams 會使用 Amazon Simple Notification Service (Amazon SNS) 通知來通知客戶。

**注意**  
Amazon Kinesis Video Streams 使用 Amazon SNS 標準主題進行通訊。目前不支援 FIFO 主題。

下列主題說明如何開始使用 通知。

**Topics**
+ [管理通知組態](#manage-configurations)
+ [關於生產者 MKV 標籤](#producer-mkv-tags)
+ [Amazon SNS 訊息](#sns-messages)
+ [跨帳戶 Amazon SNS 通知發佈](#cross-account-sns)

## 管理通知組態
<a name="manage-configurations"></a>

若要管理通知組態，請使用 `UpdateNotificationConfiguration`和 `DescribeNotificationConfiguration`。如需詳細資訊，請參閱下方。

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

使用此 API 操作來更新串流的通知資訊。如需`UpdateNotificationConfiguration`此功能的詳細資訊，請參閱*《Amazon Kinesis Video Streams 開發人員指南*》中的 [UpdateNotificationConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_UpdateNotificationConfiguration.html)。 ****

**注意**  
更新通知組態後，至少需要一分鐘的時間來啟動通知。更新呼叫`PutMedia`後，請等待至少一分鐘再叫用 。

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

使用此 API 描述連接到串流的通知組態。如需`DescribeNotificationConfiguration`此功能的詳細資訊，請參閱*《Amazon Kinesis Video Streams 開發人員指南*》中的 [DescribeNotificationConfiguration](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/API_DescribeNotificationConfiguration.html)。 ****

## 關於生產者 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 時，軟體開發套件會新增一組預先定義的 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  |  是  | 

## Amazon SNS 訊息
<a name="sns-messages"></a>

本主題包含有關 Amazon SNS 訊息和主題承載的詳細資訊。

**Topics**
+ [Amazon SNS 主題承載](#topic-payload)
+ [檢視您的 Amazon SNS 訊息](#viewing-messages)

### Amazon SNS 主題承載
<a name="topic-payload"></a>

透過先前工作流程啟動的任何通知都會交付 Amazon SNS 主題承載，如下列範例所示。此範例是在從 Amazon Simple Queue Service (Amazon SQS) 佇列取用通知資料後發生的 Amazon SNS 訊息。 Amazon 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
    }
}
```

### 檢視您的 Amazon 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。

**使用 Amazon SQS 檢視 Amazon SNS 訊息 Amazon SQS**

1. 建立 [Amazon 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. 在 Amazon SQS 主控台中選擇 Amazon SQS 佇列，然後選取**傳送和接收 Amazon SQS 佇列的訊息**。 Amazon 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>

若要將 Amazon SNS 通知發佈至不同 AWS 帳戶中的主題，您需要同時設定身分型和資源型政策。此設定可讓 Kinesis Video Streams 將通知從一個帳戶發佈到另一個帳戶中的 Amazon 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>`取代為 Amazon SNS 主題的 ARN。

### 需求和考量事項
<a name="cross-account-requirements"></a>
+ 必須設定身分型政策 （在來源帳戶中） 和資源型政策 （在目的地帳戶中），才能跨帳戶發佈。
+ 用於 `PutMedia`操作的 IAM 角色必須包含`sns:Publish`許可，即使使用具有角色別名的 IoT 憑證也一樣。