Java 21 · Spring Boot
In progress
Distributed Video Transcoding Platform
Four Spring Boot services, GPU-accelerated FFmpeg, and 8x the throughput
Four services implemented; JWT auth and refresh tokens wired
Overview
A Java microservice platform for transcoding video: REST APIs for conversion with configurable codec, bitrate, frame rate and resolution per job, across H.264, H.265, AV1 and VP9, in CPU or GPU mode.
Four services split by responsibility — auth, transcoding, file and notification — with FFmpeg GPU acceleration raising throughput 8x over the CPU path. The distributed shape is the point of the project as much as the transcoding is: a message queue, a cache, object storage, a gateway and a monitoring stack around the services.
Long-running jobs sit behind an event-driven Kafka pipeline with Redis caching job state, which is what keeps API latency independent of media duration. A request is accepted and queued rather than held open for the length of the encode.
Stack
- Language
- Java 21 (LTS), Spring Boot 3.3
- Services
- auth · transcoding · file · notification
- Transcoding
- FFmpeg, GPU-accelerated
- Messaging
- Kafka for async job dispatch
- Cache
- Redis for job state
- Storage
- MinIO, S3-compatible
- Database
- PostgreSQL
- Monitoring
- Prometheus and Grafana
Decisions Worth Explaining
Async through Kafka, not a held-open request
Transcoding runtime scales with media duration. Accepting and queueing the job keeps the API contract predictable and lets the worker pool absorb bursts.
GPU as a mode, not a fork
CPU and GPU paths share one API surface, with separate compose files for the hardware variants, so the client does not change when the hardware does.
Split by responsibility from the start
Four services rather than one, because the queue, the gateway and the observability were the subject of the exercise.
What Is Not Done
- The monitoring stack is composed but not exercised under real load.
- The 8x figure is measured on one GPU and one source profile, not across a matrix.
- No CI.