This video explains how to design a system like YouTube, focusing on how videos are uploaded and streamed. It covers the challenges of handling large video files and converting them into many different versions for various devices and internet speeds. The video also discusses how these different video versions are stored and delivered efficiently so users can watch videos smoothly.

Key Takeaways

1

YouTube processes an enormous amount of video content, with 500 hours uploaded every minute, making its engineering complex.

2

To handle large video uploads, the system uses pre-signed URLs, allowing clients to upload directly to blob storage without burdening API servers.

3

Large videos are split into smaller chunks (5-10 MB) and uploaded in parallel using a multipart upload approach, which also supports resumable uploads.

4

The video processing pipeline converts each uploaded video into many versions (different resolutions, codecs, and containers) to ensure playback compatibility across various devices and network conditions.

5

Video processing is modeled as a Directed Acyclic Graph (DAG), splitting videos into segments and processing them in parallel across many workers for efficiency.

6

Modern video streaming uses adaptive bitrate streaming, where players download small video segments and switch between different quality versions based on network bandwidth.

7

Manifest files guide the player, listing available formats and segment URLs, allowing for seamless transitions and instant seeking.

8

Video segments are stored in Content Delivery Networks (CDNs) worldwide, ensuring geographic proximity to viewers for lower latency and better streaming.

9

Key design principles for a scalable system like YouTube include direct uploads, parallel workflows using DAGs, and adaptive streaming.

System Design: Design YouTube

ByteByteGo
Feedback