A 135 GB VOD archive for $2–3 per month

The expensive mistake in a VOD archive is storing and serving it in the same HLS format used for the live feed. With six-second segments, one hour of viewing generates roughly 600 requests per viewer, plus repeated playlist fetches.

For a tournament archive estimated at 135 GB, storage itself is almost irrelevant. The Class B line grows through thousands of reads per viewer-hour. My view: HLS is right for a live stream, but it points the billing meter in the wrong direction for this archive.

One match, one MP4, no transcode

MistServer already records the DVR. A match can be cut straight from that recording through playback URL parameters:

?startunix=…&stopunix=…&dl=

The result is a progressive MP4. There is no ffmpeg re-encode step; the server returns the requested time range from the existing recording.

The file goes to Cloudflare R2 and is served on a Cloudflare-proxied custom domain. This changes the unit economics:

→ one MP4 view uses tens of range GETs instead of hundreds of segment reads → a Cloudflare cache hit bills zero Class B operations to R2 → R2 egress costs $0

Cache offload is the entire lever. A popular match reaches the object once, then a nearby Cloudflare edge serves subsequent viewers.

R2 arithmetic, verified July 2026

operationprice
storage$0.015 per GB-month
Class A$4.50 per million operations
Class B$0.36 per million operations
egress$0

The free tier includes 10 GB of storage, 1 million Class A operations and 10 million Class B operations.

For this archive, the calculation is short:

→ 135 GB is roughly $2 per month in storage → about 1.4K match uploads fit inside the free Class A allowance → with a small margin, the total is $2–3 per month

A storage box would cost €30–50 per month before the attention spent on disks, networking and backups. At this scale, the difference is too large to romanticise owning the hardware.

Where the calculation stops holding

Cloudflare's updated terms allow video delivery through its CDN when R2 is the origin. Two constraints remain.

First, this needs a fresh evaluation at multiple terabytes of monthly traffic; a result for 135 GB cannot be stretched across a different scale. Second, if the cache hit rate collapses, the economics collapse with it. Zero egress does not remove Class B requests. Cache hits do.

Related reading