

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

# 使用 Amazon Kinesis Video Streams 和 AWS Fargate 建置影片處理管道
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate"></a>

*Piotr Chotkowski 和 Pushparaju Thangavel，Amazon Web Services*

## 總結
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-summary"></a>

此模式示範如何使用 [Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/) 和 [AWS Fargate](https://aws.amazon.com/fargate) 從影片串流擷取影格，並將其儲存為影像檔案，以便在 [Amazon Simple Storage Service (Amazon S3](https://aws.amazon.com/s3/)) 中進一步處理。 

模式以 Java Maven 專案的形式提供範例應用程式。此應用程式使用 AWS [雲端開發套件 ](https://aws.amazon.com/cdk/)(AWS CDK) 定義 AWS 基礎設施。影格處理邏輯和基礎設施定義都會以 Java 程式設計語言撰寫。您可以使用此範例應用程式做為開發自己的即時影片處理管道的基礎，或建置機器學習管道的影片預先處理步驟。 

## 先決條件和限制
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ Java SE 開發套件 (JDK) 11，已安裝
+ [Apache Maven](https://maven.apache.org/)，已安裝
+ [AWS 雲端開發套件 (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)，已安裝
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 第 2 版，已安裝
+ [Docker](https://docs.docker.com/get-docker/) （建置要在 AWS Fargate 任務定義中使用的 Docker 映像時需要），已安裝

**限制**

此模式旨在做為概念驗證，或做為進一步開發的基礎。它不應在生產部署中以目前的形式使用。

**產品版本**
+ 此模式已使用 AWS CDK 1.77.0 版進行測試 （請參閱 [AWS CDK 版本](https://docs.aws.amazon.com/cdk/api/latest/versions.html))
+ JDK 11
+ AWS CLI 第 2 版

## Architecture
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-architecture"></a>

**目標技術堆疊**
+ Amazon Kinesis Video Streams
+ AWS Fargate 任務
+ Amazon Simple Queue Service (Amazon SQS) 佇列
+ Amazon S3 儲存貯體

**目標架構**

![\[使用 Kinesis Video Streams 和 Fargate 建置影片處理管道的架構。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/images/a60e585f-27be-4dd6-897b-c38adf1d283f.png)


使用者建立 Kinesis 影片串流、上傳影片，並將包含輸入 Kinesis 影片串流和輸出 S3 儲存貯體詳細資訊的 JSON 訊息傳送至 SQS 佇列。AWS Fargate 正在容器中執行主要應用程式，會從 SQS 佇列提取訊息並開始擷取影格。每個影格都會儲存在映像檔案中，並存放在目標 S3 儲存貯體中。

**自動化和擴展**

範例應用程式可以在單一 AWS 區域內水平和垂直擴展。水平擴展可以透過增加從 SQS 佇列讀取的已部署 AWS Fargate 任務數量來實現。垂直擴展可以透過增加應用程式中框架分割和影像發佈執行緒的數量來實現。這些設定會在 AWS CDK 的 [QueueProcessingFargateService](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ecs-patterns.QueueProcessingFargateService.html) 資源定義中做為環境變數傳遞至應用程式。由於 AWS CDK 堆疊部署的本質，您可以在多個 AWS 區域和帳戶中部署此應用程式，無需額外努力。

## 工具
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-tools"></a>

**工具**
+ [AWS CDK](https://aws.amazon.com/cdk/) 是一種軟體開發架構，可透過使用 TypeScript、JavaScript、Python、Java 和 C\$1/ 等程式設計語言來定義您的雲端基礎設施和資源。淨額。
+ [Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/) 是一項全受管 AWS 服務，可用來將即時影片從裝置串流至 AWS 雲端，或建置應用程式以進行即時影片處理或批次導向影片分析。
+ [AWS Fargate](https://aws.amazon.com/fargate) 是容器的無伺服器運算引擎。Fargate 不需要佈建和管理伺服器，並可讓您專注於開發應用程式。
+ [Amazon S3](https://aws.amazon.com/s3/) 是一種物件儲存服務，可提供可擴展性、資料可用性、安全性和效能。
+ [Amazon SQS](https://aws.amazon.com/sqs/) 是一種全受管訊息佇列服務，可讓您解耦和擴展微服務、分散式系統和無伺服器應用程式。

**Code**
+ 已連接範例應用程式專案 (`frame-splitter-code.zip`) 的 .zip 檔案。

## 史詩
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-epics"></a>

### 部署基礎設施
<a name="deploy-the-infrastructure"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 啟動 Docker 常駐程式。 | 在本機系統上啟動 Docker 協助程式。AWS CDK 使用 Docker 來建置 AWS Fargate 任務中使用的映像。您必須先執行 Docker，才能繼續下一個步驟。 | 開發人員、DevOps 工程師 | 
| 建置專案。 | 下載`frame-splitter-code`範例應用程式 （已連接），並將其內容解壓縮至本機電腦上的資料夾。您必須先建置 [Java Maven](https://maven.apache.org/) 專案，才能部署基礎設施。在命令提示字元中，導覽至專案的根目錄，然後執行 命令來建置專案： <pre>mvn clean install</pre> | 開發人員、DevOps 工程師 | 
| 引導 AWS CDK。 | （僅限第一次使用 AWS CDK 的使用者） 如果這是您第一次使用 AWS CDK，您可能需要執行 AWS CLI 命令來引導環境：<pre>cdk bootstrap --profile "$AWS_PROFILE_NAME" </pre>其中 `$AWS_PROFILE_NAME`會保留來自您 AWS 登入資料的 AWS 設定檔名稱。或者，您可以移除此參數以使用預設設定檔。如需詳細資訊，請參閱 [AWS CDK 文件](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)。 | 開發人員、DevOps 工程師 | 
| 部署 AWS CDK 堆疊。 | 在此步驟中，您會在 AWS 帳戶中建立所需的基礎設施資源 (SQS 佇列、S3 儲存貯體、AWS Fargate 任務定義）、建置 AWS Fargate 任務所需的 Docker 映像，並部署應用程式。在命令提示字元中，導覽至專案的根目錄，然後執行 命令：<pre>cdk deploy --profile "$AWS_PROFILE_NAME" --all </pre>其中 `$AWS_PROFILE_NAME`會保留來自您 AWS 登入資料的 AWS 設定檔名稱。或者，您可以移除此參數以使用預設設定檔。確認部署。請注意 CDK 部署輸出中的 **QueueUrl** 和**儲存貯體**值；後續步驟中會需要這些值。AWS CDK 會建立資產、將其上傳至您的 AWS 帳戶，以及建立所有基礎設施資源。您可以在 [AWS CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)中觀察資源建立程序。如需詳細資訊，請參閱 [AWS CloudFormation 文件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)和 [AWS CDK 文件](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#hello_world_tutorial_deploy)。 | 開發人員、DevOps 工程師 | 
| 建立影片串流。 | 在此步驟中，您會建立 Kinesis 影片串流，做為影片處理的輸入串流。請確定您已安裝並設定 AWS CLI。在 AWS CLI 中，執行：<pre>aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24" </pre>其中 `$AWS_PROFILE_NAME`會從您的 AWS 登入資料保留 AWS 設定檔的名稱 （或移除此參數以使用預設設定檔），而且 `$STREAM_NAME` 是任何有效的串流名稱。 或者，您可以依照 Kinesis Video [Streams 文件中的步驟，使用 Kinesis 主控台建立影片串流](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html#gs-createstream-console)。請注意所建立串流的 AWS Resource Name (ARN)；稍後會需要它。 | 開發人員、DevOps 工程師 | 

### 執行範例
<a name="run-an-example"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將影片上傳至串流。 | 在範例`frame-splitter-code`應用程式的專案資料夾中，開啟 `src/test/java/amazon/awscdk/examples/splitter`資料夾中`ProcessingTaskTest.java`的檔案。將 `profileName`****和 `streamName`****變數取代為您在先前步驟中使用的值。若要將範例影片上傳至您在上一個步驟中建立的 Kinesis 影片串流，請執行： <pre>amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test</pre>或者，您可以使用 [Kinesis Video Streams 文件中所述的其中一種方法上傳影片](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk.html)。 | 開發人員、DevOps 工程師 | 
| 啟動影片處理。 | 現在您已將影片上傳至 Kinesis 影片串流，您可以開始處理影片。若要啟動處理邏輯，您必須將包含詳細資訊的訊息傳送至 AWS CDK 在部署期間建立的 SQS 佇列。若要使用 AWS CLI 傳送訊息，請執行：<pre>aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE </pre>其中 `$AWS_PROFILE_NAME`保留來自您 AWS 登入資料的 AWS 設定檔名稱 （移除此參數以使用預設設定檔）、 `QUEUE_URL` 是來自 AWS CDK 輸出的 **QueueUrl** 值，以及下列格式`MESSAGE`的 JSON 字串： <pre>{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }</pre>其中 `STREAM_ARN`是您在先前步驟中建立之影片串流的 ARN，而 `BUCKET_NAME`是來自 AWS CDK 輸出的**儲存貯**體值。 傳送此訊息會啟動影片處理。或者，您可以使用 Amazon SQS 主控台傳送訊息，如 [Amazon SQS 文件](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-send-messages.html)所述。 | 開發人員、DevOps 工程師 | 
| 檢視影片影格的影像。 | 您可以在 S3 輸出儲存貯體中看到產生的映像，`s3://BUCKET_NAME/test-output`其中 `BUCKET_NAME`是來自 AWS CDK 輸出的**儲存貯**體值。 | 開發人員、DevOps 工程師 | 

## 相關資源
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-resources"></a>
+ [AWS CDK 文件](https://docs.aws.amazon.com/cdk/latest/guide/home.html)
+ [AWS CDK API 參考](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html)
+ [AWS CDK 簡介研討會](https://cdkworkshop.com/)
+ [Amazon Kinesis Video Streams 文件](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html)
+ [範例：使用 SageMaker 識別影片串流中的物件](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-sagemaker.html)
+ [範例：剖析和轉譯 Kinesis Video Streams 片段](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-renderer.html)
+ [使用 Amazon Kinesis Video Streams 和 Amazon SageMaker 即時大規模分析即時影片 ](https://aws.amazon.com/blogs/machine-learning/analyze-live-video-at-scale-in-real-time-using-amazon-kinesis-video-streams-and-amazon-sagemaker/)(AWS Machine Learning 部落格文章）
+ [AWS Fargate 入門](https://aws.amazon.com/fargate/getting-started/)

## 其他資訊
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-additional"></a>

**選擇 IDE**

我們建議您使用最愛的 Java IDE 來建置和探索此專案。 

**清除**

執行完此範例後，請移除所有部署的資源，以避免產生額外的 AWS 基礎設施成本。 

若要移除基礎設施和影片串流，請在 AWS CLI 中使用這兩個命令：

```
cdk destroy --profile "$AWS_PROFILE_NAME" --all
```

```
aws kinesisvideo --profile "$AWS_PROFILE_NAME" delete-stream --stream-arn "$STREAM_ARN"
```

或者，您可以使用 AWS CloudFormation 主控台來移除 AWS CloudFormation 堆疊，以及使用 Kinesis 主控台來移除 Kinesis 影片串流，以手動方式移除資源。請注意， `cdk destroy`不會移除輸出 S3 儲存貯體或 Amazon Elastic Container Registry (Amazon ECR) 儲存庫 () 中的映像`aws-cdk/assets`。您必須手動移除它們。

## 附件
<a name="attachments-9d1442c2-f3ee-47fd-8cce-90d9206ce4d4"></a>

若要存取與本文件相關聯的其他內容，請解壓縮下列檔案： [attachment.zip](samples/p-attach/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/attachments/attachment.zip)