The following are high-level system designs for difference scenarios for streaming media. Each design includes the problem statement (the initial request), an architecture diagram of the solution, and the steps involved when using the solution.
Video Management
Problem: build a video streaming application, such as YouTube, that allows for video uploading by Admins and delivery of videos.
Solution:
- Admin will upload the video files and metadata.
- Video will be processed (transcoding, chunking, etc).
- Processed video output will be stored and pushed to the CDN.
- Metadata will be sent via the queue to a Metadata API.
- During processing, all events are recorded in an Admin service for tracking, including once the video processing is complete.
- End-user client will call the Metadata API for all video metadata.
- End-user client will make additional calls to other API services, such as a user management or recommendation system.
- Video will be accessed and streamed from CDN.
Diagram:

Video On Demand
Problem: build a supply chain, such as what is used for Netflix, for video streaming that collects media and prepares for streaming delivery.
Solution:
- The input into this solution is a video mezzanine file.
- Video is delivered from external sources.
- Video is ingested and stored.
- Information added to the queue for processing.
- The transcoder picks up the video from the queue.
- Video is transcoded.
- Video is packaged.
- Video is stored on the origin server and pushed out to CDN.
- The output of this solution is a packaged video file using HLS, MPEG-DASH, or other codecs.
Diagram:

Live Video Streaming
Problem: build a setup for live video streaming.
Solution:
- The input into this solution is a live video from a source such as a camera.
- Video is delivered from external sources.
- Video is encoded and stored.
- Video is then transcoded.
- Transcoder sends notification information to the Admin service for monitoring.
- Video is then packaged.
- Video is stored on the origin server and pushed out to CDN.
- The output of this solution is a packaged video file using HLS, MPEG-DASH, or other codecs.
Diagram:
