# lekhanj/netflix-streaming architecture

> Architecture diagram of the GitHub repository lekhanj/netflix-streaming, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lekhanj/netflix-streaming
- Repository: https://github.com/lekhanj/netflix-streaming

## Overview

This is an event-driven video platform: an admin uploads raw video, asynchronous services encode HLS renditions and update catalog readiness, then clients obtain signed playback access. The README documents six qualities, catalog search/filtering, Redis caching, and playlist rewriting. Sampled source confirms upload, encoding, catalog operations, and streaming URL generation; consumer wiring and some deployment integrations rely on the README and tree, so omitted arrows indicate unverified implementation details.

Main entry points: [`encoding-service/src/main/java/com/netflix/encodingservice/service/EncodingService.java`](https://github.com/lekhanj/netflix-streaming/blob/main/encoding-service/src/main/java/com/netflix/encodingservice/service/EncodingService.java) (HLS Encoder), [`streaming-service/src/main/java/com/netflix/streamingservice/service/StreamingService.java`](https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/service/StreamingService.java) (Streaming Service), [`streaming-service/src/main/java/com/netflix/streamingservice/controller/StreamingController.java`](https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/controller/StreamingController.java) (Streaming API), [`video-service/src/main/java/com/netflix/videoservice/service/VideoService.java`](https://github.com/lekhanj/netflix-streaming/blob/main/video-service/src/main/java/com/netflix/videoservice/service/VideoService.java) (Upload Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Video Ingest"]
  node_video_api["Upload API"]
  node_video_service["Upload Service<br/>[VideoService.java]"]
end

subgraph group_process["Encoding Pipeline"]
  node_upload_event["Upload Consumer"]
  node_encoding["HLS Encoder"]
end

subgraph group_catalog["Movie Catalog"]
  node_content_api["Catalog API"]
  node_content_logic["Catalog Service"]
  node_movie_repo["Movie Repository"]
  node_content_events["Video Event Consumer"]
end

subgraph group_delivery["Stream Delivery"]
  node_stream_api["Streaming API"]
  node_stream_logic["Streaming Service"]
  node_stream_events["Encoded Event Consumer"]
end

node_admin(("Admin / Client"))
node_raw_s3[("AWS S3")]
node_kafka["Kafka Topics"]
node_ffmpeg["FFmpeg"]
node_encoded_s3[("HLS Objects")]
node_postgres[("Movie Database")]
node_redis[("Redis Cache")]

node_admin -->|"uploads video"| node_video_api
node_video_api -->|"calls"| node_video_service
node_video_service -->|"stores raw video"| node_raw_s3
node_video_service -->|"publishes uploaded event"| node_kafka
node_kafka -->|"dispatches upload event"| node_upload_event
node_upload_event -->|"starts encoding"| node_encoding
node_encoding -->|"downloads source"| node_raw_s3
node_encoding -->|"runs HLS encoding"| node_ffmpeg
node_encoding -->|"uploads renditions"| node_encoded_s3
node_encoding -->|"publishes encoded event"| node_kafka
node_kafka -->|"dispatches video events"| node_content_events
node_content_events -->|"updates lifecycle"| node_content_logic
node_content_api -->|"calls"| node_content_logic
node_content_logic -->|"reads and writes"| node_movie_repo
node_movie_repo -->|"persists movies"| node_postgres
node_admin -->|"manages catalog"| node_content_api
node_admin -->|"requests playback"| node_stream_api
node_stream_api -->|"reads playlist key"| node_redis
node_stream_api -->|"requests signed access"| node_stream_logic
node_stream_logic -->|"reads and caches URLs"| node_redis
node_stream_logic -->|"reads playlists"| node_encoded_s3
node_stream_logic -->|"presigns object access"| node_encoded_s3
node_kafka -->|"dispatches encoded event"| node_stream_events
node_stream_events -->|"stores playlist key"| node_redis
node_stream_logic -->|"returns signed response"| node_stream_api

click node_video_api "https://github.com/lekhanj/netflix-streaming/blob/main/video-service/src/main/java/com/netflix/videoservice/controller/VideoController.java"
click node_video_service "https://github.com/lekhanj/netflix-streaming/blob/main/video-service/src/main/java/com/netflix/videoservice/service/VideoService.java"
click node_upload_event "https://github.com/lekhanj/netflix-streaming/blob/main/encoding-service/src/main/java/com/netflix/encodingservice/service/VideoUploadedEventConsumer.java"
click node_encoding "https://github.com/lekhanj/netflix-streaming/blob/main/encoding-service/src/main/java/com/netflix/encodingservice/service/EncodingService.java"
click node_content_api "https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/controller/ContentController.java"
click node_content_logic "https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/service/ContentService.java"
click node_movie_repo "https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/repository/MovieRepository.java"
click node_content_events "https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/service/VideoUploadedEncodedEventConsumer.java"
click node_stream_api "https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/controller/StreamingController.java"
click node_stream_logic "https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/service/StreamingService.java"
click node_stream_events "https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/service/VideoEncodedEventConsumer.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_video_api,node_video_service,node_admin toneBlue
class node_upload_event,node_encoding,node_raw_s3,node_encoded_s3,node_postgres,node_redis toneAmber
class node_content_api,node_content_logic,node_movie_repo,node_content_events toneMint
class node_stream_api,node_stream_logic,node_stream_events toneRose
class node_kafka,node_ffmpeg toneIndigo
```

## Components

### Video Ingest

- [Upload API](https://github.com/lekhanj/netflix-streaming/blob/main/video-service/src/main/java/com/netflix/videoservice/controller/VideoController.java): `video-service/src/main/java/com/netflix/videoservice/controller/VideoController.java`
- [Upload Service](https://github.com/lekhanj/netflix-streaming/blob/main/video-service/src/main/java/com/netflix/videoservice/service/VideoService.java): `video-service/src/main/java/com/netflix/videoservice/service/VideoService.java`

### Encoding Pipeline

- [Upload Consumer](https://github.com/lekhanj/netflix-streaming/blob/main/encoding-service/src/main/java/com/netflix/encodingservice/service/VideoUploadedEventConsumer.java): `encoding-service/src/main/java/com/netflix/encodingservice/service/VideoUploadedEventConsumer.java`
- [HLS Encoder](https://github.com/lekhanj/netflix-streaming/blob/main/encoding-service/src/main/java/com/netflix/encodingservice/service/EncodingService.java): `encoding-service/src/main/java/com/netflix/encodingservice/service/EncodingService.java`

### Movie Catalog

- [Catalog API](https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/controller/ContentController.java): `content-service/src/main/java/com/netflix/contentservice/controller/ContentController.java`
- [Catalog Service](https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/service/ContentService.java): `content-service/src/main/java/com/netflix/contentservice/service/ContentService.java`
- [Movie Repository](https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/repository/MovieRepository.java): `content-service/src/main/java/com/netflix/contentservice/repository/MovieRepository.java`
- [Video Event Consumer](https://github.com/lekhanj/netflix-streaming/blob/main/content-service/src/main/java/com/netflix/contentservice/service/VideoUploadedEncodedEventConsumer.java): `content-service/src/main/java/com/netflix/contentservice/service/VideoUploadedEncodedEventConsumer.java`

### Stream Delivery

- [Streaming API](https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/controller/StreamingController.java): `streaming-service/src/main/java/com/netflix/streamingservice/controller/StreamingController.java`
- [Streaming Service](https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/service/StreamingService.java): `streaming-service/src/main/java/com/netflix/streamingservice/service/StreamingService.java`
- [Encoded Event Consumer](https://github.com/lekhanj/netflix-streaming/blob/main/streaming-service/src/main/java/com/netflix/streamingservice/service/VideoEncodedEventConsumer.java): `streaming-service/src/main/java/com/netflix/streamingservice/service/VideoEncodedEventConsumer.java`

### Other components

- **Admin / Client**
- **AWS S3**
- **Kafka Topics**
- **FFmpeg**
- **HLS Objects**
- **Movie Database**
- **Redis Cache**

## Connections

- Admin / Client → Upload API: uploads video
- Upload API → Upload Service: calls
- Upload Service → AWS S3: stores raw video
- Upload Service → Kafka Topics: publishes uploaded event
- Kafka Topics → Upload Consumer: dispatches upload event
- Upload Consumer → HLS Encoder: starts encoding
- HLS Encoder → AWS S3: downloads source
- HLS Encoder → FFmpeg: runs HLS encoding
- HLS Encoder → HLS Objects: uploads renditions
- HLS Encoder → Kafka Topics: publishes encoded event
- Kafka Topics → Video Event Consumer: dispatches video events
- Video Event Consumer → Catalog Service: updates lifecycle
- Catalog API → Catalog Service: calls
- Catalog Service → Movie Repository: reads and writes
- Movie Repository → Movie Database: persists movies
- Admin / Client → Catalog API: manages catalog
- Admin / Client → Streaming API: requests playback
- Streaming API → Redis Cache: reads playlist key
- Streaming API → Streaming Service: requests signed access
- Streaming Service → Redis Cache: reads and caches URLs
- Streaming Service → HLS Objects: reads playlists
- Streaming Service → HLS Objects: presigns object access
- Kafka Topics → Encoded Event Consumer: dispatches encoded event
- Encoded Event Consumer → Redis Cache: stores playlist key
- Streaming Service → Streaming API: returns signed response
