使用 Amazon Kinesis 視訊串流和 AWS Fargate 建立視訊處理管道 - AWS Prescriptive Guidance

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

使用 Amazon Kinesis 視訊串流和 AWS Fargate 建立視訊處理管道

由皮奧特·喬特考斯基 (AWS) 創作

環境:PoC 或試驗

技術:雲端原生;軟體開發與測試;媒體服務

AWS 服務:AWS Fargate; Amazon Kinesis 基尼西斯; Amazon S3

Summary

此模式演示如何使用Amazon Kinesis Video StreamsAWS Fargate從視頻流中提取幀並將其存儲為圖像文件以供進一步處理Amazon Simple Storage Service (Amazon S3。 

該模式提供了一個 Java Maven 項目的形式示例應用程序。此應用程式定義 AWS 基礎設施,方法是使用AWS Cloud Development Kit(AWS 隨身碟)。無論是幀處理邏輯和基礎設施定義都寫在 Java 編程語言。您可以使用此範例應用程式做為開發自己的即時視訊處理管線的基礎,或建置機器學習管線的視訊預先處理步驟。 

先決條件和限制

先決條件

限制

這種模式旨在作為概念證明,或作為進一步發展的基礎。不應將其目前形式用於生產部署。

產品版本

  • 這種模式已通過 AWS CDK 版本 1.77.0 進行測試(請參閱AWS CDK 版本)

  • JDK 11

  • AWS CLI 第 2 版

Architecture

目標技術堆疊

  • Amazon Kinesis Video Streams

  • AWS Fargate 任務

  • Amazon Simple Queue Service (Amazon SQS) 佇列

  • Amazon S3 儲存貯體

目標架構

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

自動化和擴充

範例應用程式可以在單一 AWS 區域內水平和垂直擴展。透過增加從 SQS 佇列讀取的已部署 AWS Fargate 任務數量,即可達成水平擴展。垂直縮放可以通過增加應用程序中幀分割和圖像發布線程的數量來實現。這些設定會做為環境變數傳遞至佇列處理遠端閘道服務資 AWS。由於 AWS CDK 堆疊部署的特性,您可以在多個 AWS 區域和帳戶中部署此應用程式,無需額外付費。

Tools

工具

  • AWS CDK— AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可使用 TypeScript、JavaScript、Python、Java 和 C#/.net 等程式設計語言來定義您的雲端基礎設施和資源。

  • Amazon Kinesis Video Streams— Amazon Kinesis Video Streams ue 是全受管的 AWS 服務,您可以用於從裝置將即時視訊串流到 AWS 雲端,或建置應用程式以進行即時影片處理或批次導向影片分析。

  • AWS Fargate— AWS Fargate 是適用於容器的無伺服器運算引擎。Fargate 不需要佈建和管理伺服器,讓您專注於開發應用程式。

  • Amazon S3— Amazon SSimple Storage Service (Amazon S3) 是一項物件儲存服務,提供可擴展性、資料可用性、安全性和效能。

  • Amazon SQS— Amazon Simple Queue Service (Amazon SQS) 是全受管的訊息佇列服務,可讓您解偶和擴展微服務、分散式系統和無伺服器應用程式。

Code

  • 附加範例應用程式專案 (frame-splitter-code.zip) 的 .zip 檔案。

Epics

任務描述所需技能
啟動 Docker 協助程式。

在本機系統上啟動 Docker 守護程式。AWS CDK 使用 Docker 來建置 AWS Fargate 任務中使用的映像。您必須先執行 Docker 才能進行下一個步驟。

DevOps 人員、開發作業工程師
建置專案。

下載框架分割代碼示例應用程序(附加)並將其內容解壓縮到本地計算機上的文件夾中。您必須先建置基礎結構才能進行部署Java Maven專案。在命令提示字元中,導覽至專案的根目錄,然後執行命令以建置專案: 

mvn clean install
DevOps 人員、開發作業工程師
啟動 AWS CDK。

(僅限第一次使用 AWS CDK) 如果這是您第一次使用 AWS CDK,則可能必須執行 AWS CLI 命令來啟動環境:

cdk bootstrap --profile "$AWS_PROFILE_NAME"

where$AWS_PROFILE_NAME會從您的 AWS 登入資料保留 AWS 設定檔名稱。或者,您可以移除此參數以使用預設設定檔。如需詳細資訊,請參閲 。AWS CDK 文件

DevOps 人員、開發作業工程師
部署 AWS CDK 堆疊。

在此步驟中,您將在 AWS 帳戶中建立所需的基礎設施資源 (SQS 佇列、S3 儲存貯體、AWS Fargate 任務定義)、建置 AWS Fargate 任務所需的 Docker 映像,以及部署應用程式。在命令提示字元中,導覽至專案的根目錄,然後執行命令:

cdk deploy --profile "$AWS_PROFILE_NAME" --all

where$AWS_PROFILE_NAME會從您的 AWS 登入資料保留 AWS 設定檔名稱。或者,您可以移除此參數以使用預設設定檔。確認部署。請注意QueueUrl儲存貯體值;您將在稍後的步驟中需要這些值。AWS CDK 會建立資產,將資產上傳到您的 AWS 帳戶,並建立所有基礎設施資源。您可以在 AWS CloudFormation 主控台中觀察資源建立程序,網址為:https://console.aws.amazon.com/cloudformation/。如需詳細資訊,請參閲 。AWS CloudFormation 文件AWS CDK 文件

DevOps 人員、開發作業工程師
建立視訊串流。

在此步驟中,您會建立 Kinesis 視訊串流,做為視訊處理的輸入串流。請確定您已安裝並設妥 AWS CLI。在 AWS CLI 中,執行:

aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24"

where$AWS_PROFILE_NAME保留 AWS 登入資料中的 AWS 設定檔的名稱 (或移除此參數以使用預設設定檔),$STREAM_NAME是任何有效的串流名稱。 

或者,您也可以使用 Kinesis 主控台建立視訊串流,方法是依照Kinesis Video Streams 文件。記下所建立串流的 AWS Resource Name (ARN);您稍後需要。

DevOps 人員、開發作業工程師
任務描述所需技能
將影片上傳至串流。

在範例框架分割程式碼應用程式的專案資料夾中,開啟 ProcessingTaskTest.java 檔案中的 SRC/測試/java/amazon/awscd/ 範例/分割器資料夾。取代ProfileNamestreamName變數,其中包含您在先前步驟中使用的值。若要將範例視訊上傳至您在上一個步驟中建立的 Kinesis 視訊串流,請執行: 

amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test

或者,您也可以使用其中一種方法來上傳影片。Kinesis Video Streams 文件

DevOps 人員、開發作業工程師
啟動視訊處理。

您現在已將影片上傳到 Kinesis 影片串流,您可以開始處理影片。若要啟動處理邏輯,您必須將包含詳細資訊的訊息傳送至 AWS CDK 在部署期間建立的 SQS 佇列。若要使用 AWS CLI 傳送訊息,請執行:

aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE

where$AWS_PROFILE_NAME保留 AWS 登入資料中的 AWS 設定檔名稱 (移除此參數以使用預設設定檔),QUEUE_URLQueueUrl值,以及MESSAGE是 JSON 字串,格式如下: 

{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }

whereSTREAM_ARN是您在先前步驟中建立之視訊串流的 ARN,BUCKET_NAME儲存貯體值從 AWS CDK 輸出。 

傳送此訊息會啟動視訊處理。或者,您也可以使用 Amazon SQS 主控台來傳送訊息,如Amazon SQS 文件

DevOps 人員、開發作業工程師
檢視視訊影格的影像。

您可以在 S3 輸出儲存貯體中看到結果影像s3://BUCKET_NAME/test-outputwhereBUCKET_NAME儲存貯體值從 AWS CDK 輸出。

DevOps 人員、開發作業工程師

其他資訊

選擇 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/資產)中的映像。您必須手動移除它們。

Attachments

attachment.zip