Architecture overview - Video on Demand on AWS

Architecture overview

The AWS CloudFormation template deploys a workflow that ingests source videos, or source videos and metadata files. When you upload a source video only, encoding options are defined in the AWS CloudFormation template at launch, and are applied to every video the solution encodes. When you upload a source video and metadata file, encoding parameters for each source video are defined in the metadata file, allowing customers to apply encoding options on a video-by-video basis.

Architecture diagram

Deploying this solution builds the following environment in the AWS Cloud.

Video on Demand on AWS architecture

video on demand architecture

The high-level process flow for the solution components deployed with the AWS CloudFormation template is as follows:

  1. An Amazon S3 bucket for source media files. Content is eventually stored in Amazon S3 Glacier according to the Amazon S3 lifecycle policy.

  2. AWS Step Functions, which creates ingest, processing, and publishing step functions.

  3. AWS Lambda functions that perform the work of each step, and process error messages. For a description of the 10 Lambda functions, refer to the README.md file on the GitHub repository.

  4. An Amazon DynamoDB table to store data captured through the workflow.

  5. AWS Elemental MediaConvert to transcode media files from their source format.

  6. Amazon CloudWatch for logging and Amazon CloudWatch Events rules for AWS Elemental MediaConvert notifications.

  7. Amazon SNS topics to send encoding, publishing, and error notifications.

  8. AWS Elemental MediaPackage (optional) to create video streams formatted to play on several devices from a single video input, and protect content from unauthorized use through content encryption and digital rights management.

  9. An Amazon S3 bucket for storing destination media files.

  10. An Amazon CloudFront distribution to deliver your video content to end users.

  11. An Amazon SQS queue to capture the workflow outputs.