Erstellen Sie mithilfe von Amazon Kinesis Video Streams und AWS Fargate eine Videoverarbeitungspipeline - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellen Sie mithilfe von Amazon Kinesis Video Streams und AWS Fargate eine Videoverarbeitungspipeline

Erstellt von Piotr Chotkowski (AWS) und Pushparaju Thangavel (AWS)

Umgebung: PoC oder Pilotprojekt

Technologien: Analytik; Mediendienste

AWS-Dienste: AWS Fargate; Amazon Kinesis; Amazon S3

Übersicht

Dieses Muster zeigt, wie Amazon Kinesis Video Streams und AWS Fargate verwendet werden, um Frames aus einem Videostream zu extrahieren und sie als Bilddateien für die weitere Verarbeitung in Amazon Simple Storage Service (Amazon S3) zu speichern. 

Das Muster bietet eine Beispielanwendung in Form eines Java-Maven-Projekts. Diese Anwendung definiert die AWS-Infrastruktur mithilfe des AWS Cloud Development Kit (AWS CDK). Sowohl die Frame-Verarbeitungslogik als auch die Infrastrukturdefinitionen sind in der Programmiersprache Java geschrieben. Sie können diese Beispielanwendung als Grundlage für die Entwicklung Ihrer eigenen Echtzeit-Videoverarbeitungspipeline oder für die Erstellung des Videovorverarbeitungsschritts einer Pipeline für maschinelles Lernen verwenden. 

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

Dieses Muster ist als Machbarkeitsnachweis oder als Grundlage für die weitere Entwicklung gedacht. Es sollte in seiner derzeitigen Form nicht in Produktionsbereitstellungen verwendet werden.

Produktversionen

  • Dieses Muster wurde mit der AWS-CDK-Version 1.77.0 getestet (siehe AWS-CDK-Versionen)

  • JDK 11

  • AWS-CLI Version 2

Architektur

Zieltechnologie-Stack

  • Amazon Kinesis Video Streams

  • AWS Fargate-Aufgabe

  • Amazon Simple Queue Service-Warteschlange (Amazon SQS)

  • Amazon-S3-Bucket

Zielarchitektur

Architektur für die Verwendung von Kinesis Video Streams und Fargate zum Aufbau einer Videoverarbeitungspipeline.

Der Benutzer erstellt einen Kinesis-Videostream, lädt ein Video hoch und sendet eine JSON-Nachricht, die Details zum Kinesis-Eingabevideostream und zum Ausgabe-S3-Bucket enthält, an eine SQS-Warteschlange. AWS Fargate, das die Hauptanwendung in einem Container ausführt, ruft die Nachricht aus der SQS-Warteschlange ab und beginnt mit dem Extrahieren von Frames. Jeder Frame wird in einer Bilddatei und im Ziel-S3-Bucket gespeichert.

Automatisierung und Skalierung

Die Beispielanwendung kann innerhalb einer einzelnen AWS-Region sowohl horizontal als auch vertikal skaliert werden. Horizontale Skalierung kann erreicht werden, indem die Anzahl der bereitgestellten AWS Fargate-Aufgaben erhöht wird, die aus der SQS-Warteschlange lesen. Vertikale Skalierung kann erreicht werden, indem die Anzahl der Framesplitting- und Image-Publishing-Threads in der Anwendung erhöht wird. Diese Einstellungen werden in der Definition der QueueProcessingFargateServiceRessource im AWS-CDK als Umgebungsvariablen an die Anwendung übergeben. Aufgrund der Art der AWS-CDK-Stack-Bereitstellung können Sie diese Anwendung ohne zusätzlichen Aufwand in mehreren AWS-Regionen und Konten bereitstellen.

Tools

Tools

  • AWS CDK ist ein Softwareentwicklungs-Framework zur Definition Ihrer Cloud-Infrastruktur und -Ressourcen mithilfe von Programmiersprachen wie TypeScript,, Python JavaScript, Java und C#/.Net.

  • Amazon Kinesis Video Streams ist ein vollständig verwalteter AWS-Service, mit dem Sie Live-Videos von Geräten in die AWS-Cloud streamen oder Anwendungen für Echtzeit-Videoverarbeitung oder stapelorientierte Videoanalysen erstellen können.

  • AWS Fargate ist eine serverlose Compute-Engine für Container. Fargate macht die Bereitstellung und Verwaltung von Servern überflüssig, sodass Sie sich auf die Entwicklung Ihrer Anwendungen konzentrieren können.

  • Amazon S3 ist ein Objektspeicherservice, der Skalierbarkeit, Datenverfügbarkeit, Sicherheit und Leistung bietet.

  • Amazon SQS ist ein vollständig verwalteter Message Queuing-Service, mit dem Sie Microservices, verteilte Systeme und serverlose Anwendungen entkoppeln und skalieren können.

Code

  • Eine ZIP-Datei des Beispielanwendungsprojekts () ist angehängt. frame-splitter-code.zip

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Starten Sie den Docker-Daemon.

Starten Sie den Docker-Daemon auf Ihrem lokalen System. Das AWS CDK verwendet Docker, um das Image zu erstellen, das in der AWS Fargate-Aufgabe verwendet wird. Sie müssen Docker ausführen, bevor Sie mit dem nächsten Schritt fortfahren können.

Entwickler, Ingenieur DevOps

Erstellen Sie das Projekt.

Laden Sie die frame-splitter-code Beispielanwendung (im Anhang) herunter und extrahieren Sie ihren Inhalt in einen Ordner auf Ihrem lokalen Computer. Bevor Sie die Infrastruktur bereitstellen können, müssen Sie das Java-Maven-Projekt erstellen. Navigieren Sie in einer Befehlszeile zum Stammverzeichnis des Projekts und erstellen Sie das Projekt, indem Sie den folgenden Befehl ausführen: 

mvn clean install
Entwickler, DevOps Ingenieur

Bootstrap für das AWS-CDK.

(Nur AWS-CDK-Erstbenutzer) Wenn Sie das AWS-CDK zum ersten Mal verwenden, müssen Sie die Umgebung möglicherweise booten, indem Sie den AWS-CLI-Befehl ausführen:

cdk bootstrap --profile "$AWS_PROFILE_NAME"

wo $AWS_PROFILE_NAME der Name des AWS-Profils aus Ihren AWS-Anmeldeinformationen gespeichert ist. Sie können diesen Parameter auch entfernen, um das Standardprofil zu verwenden. Weitere Informationen finden Sie in der AWS-CDK-Dokumentation.

Entwickler, Ingenieur DevOps

Stellen Sie den AWS-CDK-Stack bereit.

In diesem Schritt erstellen Sie die erforderlichen Infrastrukturressourcen (SQS-Warteschlange, S3-Bucket, AWS Fargate-Aufgabendefinition) in Ihrem AWS-Konto, erstellen das Docker-Image, das für die AWS Fargate-Aufgabe erforderlich ist, und stellen die Anwendung bereit. Navigieren Sie an einer Befehlszeile zum Stammverzeichnis des Projekts und führen Sie den folgenden Befehl aus:

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

wo $AWS_PROFILE_NAME der Name des AWS-Profils aus Ihren AWS-Anmeldeinformationen gespeichert ist. Sie können diesen Parameter auch entfernen, um das Standardprofil zu verwenden. Bestätigen Sie die Bereitstellung. Notieren Sie sich die Werte QueueUrlund Bucket aus der CDK-Bereitstellungsausgabe. Sie werden sie in späteren Schritten benötigen. Das AWS-CDK erstellt die Ressourcen, lädt sie auf Ihr AWS-Konto hoch und erstellt alle Infrastrukturressourcen. Sie können den Prozess der Ressourcenerstellung in der CloudFormation AWS-Konsole beobachten. Weitere Informationen finden Sie in der CloudFormation AWS-Dokumentation und der AWS-CDK-Dokumentation.

Entwickler, Ingenieur DevOps

Erstellen Sie einen Videostream.

In diesem Schritt erstellen Sie einen Kinesis-Videostream, der als Eingangsstream für die Videoverarbeitung dient. Stellen Sie sicher, dass Sie die AWS-CLI installiert und konfiguriert haben. Führen Sie in der AWS-CLI Folgendes aus:

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

wobei der $AWS_PROFILE_NAME Name des AWS-Profils aus Ihren AWS-Anmeldeinformationen enthalten ist (oder entfernen Sie diesen Parameter, um das Standardprofil zu verwenden) und $STREAM_NAME ein beliebiger gültiger Streamname ist. 

Alternativ können Sie mithilfe der Kinesis-Konsole einen Videostream erstellen, indem Sie die Schritte in der Kinesis Video Streams-Dokumentation befolgen. Notieren Sie sich den AWS-Ressourcennamen (ARN) des erstellten Streams. Sie benötigen ihn später.

Entwickler, DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Laden Sie das Video in den Stream hoch.

Öffnen Sie im Projektordner für die frame-splitter-code Beispielanwendung die ProcessingTaskTest.java Datei im src/test/java/amazon/awscdk/examples/splitter Ordner. Ersetzen Sie die streamName Variablen profileName und durch die Werte, die Sie in den vorherigen Schritten verwendet haben. Um das Beispielvideo in den Kinesis-Videostream hochzuladen, den Sie im vorherigen Schritt erstellt haben, führen Sie folgenden Befehl aus:  

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

Alternativ können Sie Ihr Video mit einer der in der Kinesis Video Streams Streams-Dokumentation beschriebenen Methoden hochladen.

Entwickler, Ingenieur DevOps

Initiieren Sie die Videoverarbeitung.

Nachdem Sie ein Video in den Kinesis-Videostream hochgeladen haben, können Sie mit der Verarbeitung beginnen. Um die Verarbeitungslogik zu initiieren, müssen Sie eine Nachricht mit Details an die SQS-Warteschlange senden, die das AWS-CDK während der Bereitstellung erstellt hat. Um eine Nachricht mit der AWS-CLI zu senden, führen Sie Folgendes aus:

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

wobei $AWS_PROFILE_NAME der Name des AWS-Profils aus Ihren AWS-Anmeldeinformationen (entfernen Sie diesen Parameter, um das Standardprofil zu verwenden), QUEUE_URL der QueueUrlWert aus der AWS-CDK-Ausgabe MESSAGE ist und eine JSON-Zeichenfolge im folgenden Format ist: 

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

Dabei STREAM_ARN handelt es sich um den ARN des Videostreams, den Sie in einem früheren Schritt erstellt haben, und BUCKET_NAME um den Bucket-Wert aus der AWS-CDK-Ausgabe. 

Durch das Senden dieser Nachricht wird die Videoverarbeitung eingeleitet. Alternativ können Sie eine Nachricht mithilfe der Amazon SQS SQS-Konsole senden, wie in der Amazon SQS SQS-Dokumentation beschrieben.

Entwickler, Ingenieur DevOps

Bilder der Videoframes anzeigen.

Sie können die resultierenden Bilder im S3-Ausgabe-Bucket sehen, s3://BUCKET_NAME/test-output wo BUCKET_NAME sich der Bucket-Wert aus der AWS-CDK-Ausgabe befindet.

Entwickler, Ingenieur DevOps

Zugehörige Ressourcen

Zusätzliche Informationen

Eine IDE auswählen

Wir empfehlen Ihnen, Ihre bevorzugte Java-IDE zu verwenden, um dieses Projekt zu erstellen und zu erkunden.  

Bereinigen

Nachdem Sie dieses Beispiel ausgeführt haben, entfernen Sie alle bereitgestellten Ressourcen, um zusätzliche AWS-Infrastrukturkosten zu vermeiden. 

Verwenden Sie diese beiden Befehle in der AWS-CLI, um die Infrastruktur und den Videostream zu entfernen:

cdk destroy --profile "$AWS_PROFILE_NAME" --all
aws kinesisvideo --profile "$AWS_PROFILE_NAME" delete-stream --stream-arn "$STREAM_ARN"

Alternativ können Sie die Ressourcen manuell entfernen, indem Sie die CloudFormation AWS-Konsole verwenden, um den CloudFormation AWS-Stack zu entfernen, und die Kinesis-Konsole, um den Kinesis-Videostream zu entfernen. Beachten Sie, dass der Ausgabe-S3-Bucket oder die Bilder in den Amazon Elastic Container Registry (Amazon ECR) -Repositorys (aws-cdk/assets) cdk destroy nicht entfernt werden. Sie müssen sie manuell entfernen.

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip