Buat pipeline pemrosesan video dengan menggunakan Amazon Kinesis Video Streams dan AWS Fargate - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Buat pipeline pemrosesan video dengan menggunakan Amazon Kinesis Video Streams dan AWS Fargate

Piotr Chotkowski dan Pushparaju Thangavel, Amazon Web Services

Ringkasan

Pola ini menunjukkan cara menggunakan Amazon Kinesis Video Streams dan AWS Fargate untuk mengekstrak bingkai dari aliran video dan menyimpannya sebagai file gambar untuk diproses lebih lanjut di Amazon Simple Storage Service (Amazon S3). 

Pola ini menyediakan contoh aplikasi dalam bentuk proyek Java Maven. Aplikasi ini mendefinisikan infrastruktur AWS dengan menggunakan AWS Cloud Development Kit (AWS CDK). Baik logika pemrosesan bingkai dan definisi infrastruktur ditulis dalam bahasa pemrograman Java. Anda dapat menggunakan aplikasi sampel ini sebagai dasar untuk mengembangkan pipa pemrosesan video real-time Anda sendiri atau untuk membangun langkah pra-pemrosesan video dari pipa pembelajaran mesin. 

Prasyarat dan batasan

Prasyarat

Batasan

Pola ini dimaksudkan sebagai bukti konsep, atau sebagai dasar untuk pengembangan lebih lanjut. Seharusnya tidak digunakan dalam bentuknya saat ini dalam penyebaran produksi.

Versi produk

Arsitektur

Tumpukan teknologi target

  • Amazon Kinesis Video Streams

  • Tugas AWS Fargate

  • Antrean Amazon Simple Queue Service (Amazon SQS)

  • Bucket Amazon S3

Arsitektur target

Arsitektur untuk menggunakan Kinesis Video Streams dan Fargate untuk membangun pipeline pemrosesan video.

Pengguna membuat aliran video Kinesis, mengunggah video, dan mengirimkan pesan JSON yang berisi rincian tentang input Kinesis video stream dan output S3 bucket ke antrian SQS. AWS Fargate, yang menjalankan aplikasi utama dalam wadah, menarik pesan dari antrian SQS dan mulai mengekstrak bingkai. Setiap frame disimpan dalam file gambar dan disimpan di bucket S3 target.

Otomatisasi dan skala

Aplikasi sampel dapat menskalakan baik secara horizontal maupun vertikal dalam satu Wilayah AWS. Penskalaan horizontal dapat dicapai dengan meningkatkan jumlah tugas AWS Fargate yang diterapkan yang dibaca dari antrian SQS. Penskalaan vertikal dapat dicapai dengan meningkatkan jumlah utas pemecahan bingkai dan penerbitan gambar dalam aplikasi. Pengaturan ini diteruskan sebagai variabel lingkungan ke aplikasi dalam definisi QueueProcessingFargateServicesumber daya di AWS CDK. Karena sifat penerapan tumpukan AWS CDK, Anda dapat menerapkan aplikasi ini di beberapa Wilayah AWS dan akun tanpa upaya tambahan.

Alat

Alat

  • AWS CDK adalah kerangka kerja pengembangan perangkat lunak untuk mendefinisikan infrastruktur dan sumber daya cloud Anda dengan menggunakan bahasa pemrograman seperti TypeScript,, JavaScript Python, Java, dan C #/.Net.

  • Amazon Kinesis Video Streams adalah layanan AWS yang dikelola sepenuhnya yang dapat Anda gunakan untuk melakukan streaming video langsung dari perangkat ke AWS Cloud, atau membuat aplikasi untuk pemrosesan video real-time atau analitik video berorientasi batch.

  • AWS Fargate adalah mesin komputasi tanpa server untuk kontainer. Fargate menghilangkan kebutuhan untuk menyediakan dan mengelola server, dan memungkinkan Anda fokus pada pengembangan aplikasi Anda.

  • Amazon S3 adalah layanan penyimpanan objek yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja.

  • Amazon SQS adalah layanan antrian pesan yang dikelola sepenuhnya yang memungkinkan Anda memisahkan dan menskalakan layanan mikro, sistem terdistribusi, dan aplikasi tanpa server.

Kode

  • File.zip dari proyek aplikasi sampel (frame-splitter-code.zip) dilampirkan.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Mulai daemon Docker.

Mulai daemon Docker di sistem lokal Anda. AWS CDK menggunakan Docker untuk membuat image yang digunakan dalam tugas AWS Fargate. Anda harus menjalankan Docker sebelum melanjutkan ke langkah berikutnya.

Pengembang, DevOps insinyur

Bangun proyek.

Unduh aplikasi frame-splitter-code sampel (terlampir) dan ekstrak isinya ke dalam folder di mesin lokal Anda. Sebelum Anda dapat menyebarkan infrastruktur, Anda harus membangun proyek Java Maven. Pada prompt perintah, navigasikan ke direktori root proyek, dan buat proyek dengan menjalankan perintah: 

mvn clean install
Pengembang, DevOps insinyur

Bootstrap AWS CDK.

(Hanya pengguna AWS CDK pertama kali) Jika ini adalah pertama kalinya Anda menggunakan AWS CDK, Anda mungkin harus mem-bootstrap lingkungan dengan menjalankan perintah AWS CLI:

cdk bootstrap --profile "$AWS_PROFILE_NAME"

dimana $AWS_PROFILE_NAME memegang nama profil AWS dari kredensi AWS Anda. Atau, Anda dapat menghapus parameter ini untuk menggunakan profil default. Untuk informasi selengkapnya, lihat dokumentasi AWS CDK.

Pengembang, DevOps insinyur

Menerapkan tumpukan AWS CDK.

Pada langkah ini, Anda membuat sumber daya infrastruktur yang diperlukan (antrean SQS, bucket S3, definisi tugas AWS Fargate) di akun AWS Anda, membuat image Docker yang diperlukan untuk tugas AWS Fargate, dan menerapkan aplikasi. Pada prompt perintah, arahkan ke direktori root proyek, dan jalankan perintah:

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

dimana $AWS_PROFILE_NAME memegang nama profil AWS dari kredensi AWS Anda. Atau, Anda dapat menghapus parameter ini untuk menggunakan profil default. Konfirmasikan penyebaran. Perhatikan nilai QueueUrldan Bucket dari keluaran penyebaran CDK; Anda akan memerlukannya di langkah selanjutnya. AWS CDK membuat aset, mengunggahnya ke akun AWS Anda, dan membuat semua sumber daya infrastruktur. Anda dapat mengamati proses pembuatan sumber daya di CloudFormation konsol AWS. Untuk informasi selengkapnya, lihat CloudFormation dokumentasi AWS dan dokumentasi AWS CDK.

Pengembang, DevOps insinyur

Buat aliran video.

Pada langkah ini, Anda membuat aliran video Kinesis yang akan berfungsi sebagai aliran input untuk pemrosesan video. Pastikan AWS CLI telah diinstal dan dikonfigurasi. Di AWS CLI, jalankan:

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

dimana $AWS_PROFILE_NAME memegang nama profil AWS dari kredensyal AWS Anda (atau hapus parameter ini untuk menggunakan profil default) dan $STREAM_NAME merupakan nama aliran yang valid. 

Atau, Anda dapat membuat aliran video dengan menggunakan konsol Kinesis dengan mengikuti langkah-langkah dalam dokumentasi Kinesis Video Streams. Perhatikan AWS Resource Name (ARN) dari aliran yang dibuat; Anda akan membutuhkannya nanti.

Pengembang, DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Unggah video ke streaming.

Di folder proyek untuk frame-splitter-code aplikasi sampel, buka ProcessingTaskTest.java file di src/test/java/amazon/awscdk/examples/splitter folder. Ganti streamName variabel profileName dan dengan nilai yang Anda gunakan pada langkah sebelumnya. Untuk mengunggah contoh video ke aliran video Kinesis yang Anda buat pada langkah sebelumnya, jalankan:  

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

Atau, Anda dapat mengunggah video Anda dengan menggunakan salah satu metode yang dijelaskan dalam dokumentasi Kinesis Video Streams.

Pengembang, DevOps insinyur

Memulai pemrosesan video.

Sekarang setelah Anda mengunggah video ke aliran video Kinesis, Anda dapat mulai memprosesnya. Untuk memulai logika pemrosesan, Anda harus mengirim pesan dengan detail ke antrian SQS yang dibuat AWS CDK selama penerapan. Untuk mengirim pesan menggunakan AWS CLI, jalankan:

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

dimana $AWS_PROFILE_NAME memegang nama profil AWS dari kredensyal AWS Anda (hapus parameter ini untuk menggunakan profil default), QUEUE_URL adalah QueueUrlnilai dari output AWS CDK, dan MESSAGE merupakan string JSON dalam format berikut: 

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

di STREAM_ARN mana ARN dari aliran video yang Anda buat pada langkah sebelumnya dan BUCKET_NAME merupakan nilai Bucket dari output AWS CDK. 

Mengirim pesan ini memulai pemrosesan video. Atau, Anda dapat mengirim pesan menggunakan konsol Amazon SQS, seperti yang dijelaskan dalam dokumentasi Amazon SQS.

Pengembang, DevOps insinyur

Lihat gambar bingkai video.

Anda dapat melihat gambar yang dihasilkan di bucket s3://BUCKET_NAME/test-output keluaran S3 yang BUCKET_NAME merupakan nilai Bucket dari output AWS CDK.

Pengembang, DevOps insinyur

Sumber daya terkait

Informasi tambahan

Memilih IDE

Kami menyarankan Anda menggunakan IDE Java favorit Anda untuk membangun dan menjelajahi proyek ini.  

Membersihkan

Setelah Anda selesai menjalankan contoh ini, hapus semua sumber daya yang diterapkan untuk menghindari biaya infrastruktur AWS tambahan. 

Untuk menghapus infrastruktur dan aliran video, gunakan dua perintah ini di AWS CLI:

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

Atau, Anda dapat menghapus sumber daya secara manual dengan menggunakan CloudFormation konsol AWS untuk menghapus CloudFormation tumpukan AWS, dan konsol Kinesis untuk menghapus aliran video Kinesis. Perhatikan bahwa cdk destroy tidak menghapus bucket S3 keluaran atau gambar di repositori Amazon Elastic Container Registry (Amazon ECR) (). aws-cdk/assets Anda harus menghapusnya secara manual.

Lampiran

Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip