← Back to experience

Case study · DarkHorse · 2023 - 2025

Rebuilding video processing around HLS

Moved a sports video platform from server-side downloading and stitching of very large files to one-time HLS conversion with clips composed in the browser.

~90%
less backend processing time
~70%
lower infrastructure cost
500K+
video plays

Problem

Every request for a clip downloaded the full match video (5 to 20 GB), trimmed it with FFmpeg and stitched the result on the server. It was slow and expensive for 500+ clubs and 20K+ athletes.

My role

I was tech lead of the 8-person software team and shared the architecture decisions with one other full-stack engineer. I built the custom multi-video player.

Approach

  • Convert each MP4 to HLS once, at ingestion.
  • Compose clips in the browser from HLS segments instead of producing new files on the server.
  • Build a player that plays a list of HLS clips in sequence with player-tracking boxes kept in sync.
  • Trigger ingestion from partner webhooks on S3, CloudFront, Lambda, SNS/SQS and Fargate (Pixellot and BeyondPulse as primary engineer; Veo, Trace and Hudl as contributor).

Result

Backend processing time fell by about 90% and infrastructure cost by about 70%. The platform served 500K+ video plays.

Next.jsTypeScriptHLSFFmpegAWS S3CloudFrontLambdaSNS / SQSFargateMongoDB