Blog
Comparisons 9 min read

Best video hosting for online courses in 2026: what 500 GB actually costs on each

A costed comparison of course video hosting — Vimeo, Wistia, Bunny, Cloudflare Stream, Mux, VdoCipher and rehelios — priced against one real library.

rehelios

Engineering

Every “best video hosting for online courses” roundup ranks the same platforms and none of them price the ranking against an actual course. You get a table of features, a vague note that Vimeo is “affordable” and Mux is “for developers,” and no answer to the only question you actually have: what will this cost me once I have fifty hours up and a couple hundred students watching them.

So this post does the arithmetic instead. It picks one concrete library, prices it on every billing model in the market, and then says which platform wins for which kind of course — including the cases where the answer isn’t us.

For a typical course library — 100 hours of 1080p video, about 500 GB stored, 200 students watching 10 hours a month — the same traffic costs roughly $15/month on Bunny Stream, $20 on rehelios, $38 on Mux at basic quality, and $150 on Cloudflare Stream. Per-GB billing wins for course video generally, but the single biggest swing is free allowances: Mux’s first 100,000 delivery minutes each month erase most of its bill at this scale, and Cloudflare has no equivalent.

The library everything below is priced against

Comparisons stay honest when the assumptions are visible, so here are mine:

  • 100 hours of finished course video, encoded 1080p down to 240p as an adaptive ladder. At roughly 5 GB per hour across all renditions, that’s about 500 GB stored.
  • 200 active students, each watching about 10 hours per month. A viewer streams one rendition, not the whole ladder, so at roughly 1 GB per hour watched that’s about 2,000 GB (2 TB) delivered per month.
  • Encoding happens once per video, plus occasional re-encodes when you re-record a lesson.

Note that storage and delivery convert between hours and gigabytes at different ratios — you store the whole ladder, viewers stream one rung of it. Using a single figure for both is the most common error in video cost comparisons.

Your library is not this library. But the shape — a lot of hours sitting in storage, a moderate amount of watching spread across them — is what almost every course catalog looks like, and it’s the shape that decides which billing model treats you well. Swap your own numbers into the video cost calculator when you want the exact figure.

What 500 GB actually costs

PlatformBills byStorageDeliveryEncodingMonthly total
Bunny StreamPer-GB500 × $0.01 = $52,000 × $0.005 = $10Free~$15
reheliosPer-GB500 × $0.02 = $102,000 × $0.005 = $10Free~$20
Mux (basic quality)Per-minute6,000 min × $0.003 = $1820,000 billable min × $0.001 = $20Free on basic~$38
Cloudflare StreamPer-minute6,000 min × $5/1,000 = $30120,000 min × $1/1,000 = $120Included~$150
VimeoPlan tierCapped by plan*Included, fair-use*IncludedPlan price, until you hit the cap
WistiaPlan tierCapped by plan*Included, then overage*IncludedPlan price, plus overages
VdoCipherPlan + usageBundled*Bundled*IncludedPriced for DRM, not for volume

*All competitor rates per public pricing at time of writing — verify before budgeting. Bunny storage is its $0.01/GB rate and delivery its Volume-network rate; the Standard network costs more and varies by region. Mux delivery reflects its first 100,000 minutes per month free, then $0.001/min at 1080p. rehelios figures are our own.

The arithmetic is deliberately visible so you can re-run it when a rate changes. Three things fall out of it, and one of them is not what you’d expect.

Bunny is the cheapest option here, not us. Its storage rate is half ours at list price and its Volume-network delivery matches ours. If cost per byte is the only thing you’re optimising, that’s the honest recommendation, and the rest of this post should be read with that in mind. Where we compete is a single flat global rate with no network tier or region matrix to reason about, plus the automation surface further down.

Mux is far cheaper than its reputation, if basic quality works for you. Encoding on the basic tier is free at all volumes, and the first 100,000 delivery minutes each month are free regardless of resolution. That wipes out most of this scenario’s delivery bill. The tradeoff is real — basic uses a reduced encoding ladder aimed at “simpler video use cases” — so screen-recorded lectures may do fine on it while high-production video won’t. On the plus tier, 1080p encoding runs $0.03125/min, which is about $188 to put 100 hours through.

Delivery is where per-minute billing hurts, not storage. Cloudflare Stream has no free delivery allowance, so all 120,000 minutes bill at $1/1,000 — $120 of a $150 total. A minute of your 1080p lecture and a minute of 4K drone footage cost the same there, which is a poor trade for course video, where runtime is long and bitrate modest.

Best for each kind of course

Ranking platforms 1-through-7 is theatre, because they’re built for different situations. Here’s the honest split:

Best on raw cost — Bunny Stream. Per-GB, free encoding, storage at half our list rate, mature CDN. If price per byte is the only axis you care about and you’re comfortable picking a network tier and region set yourself, Bunny wins this category and it isn’t close. See the Bunny Stream comparison.

Best for predictable cost without configuration — rehelios. One flat global rate for storage and one for delivery, free encoding, no plan cap to outgrow, no network tier or region matrix to model. That’s a simplicity argument rather than a cheapest-per-byte argument, and it’s worth what it’s worth to you. Details on the courses use case.

Best when video is also your marketing — Wistia. Lead capture in the player, heatmaps, CRM integrations, and a product built around converting viewers rather than just serving bytes. You pay plan prices for it, but if your course funnel runs on video, that’s the right thing to pay for. See the Wistia comparison.

Best for a polished player with zero setup — Vimeo. A good branded player, predictable plan pricing, no per-GB arithmetic. It’s the low-effort answer, and for a small catalog it’s a perfectly reasonable one — until the storage cap on your tier becomes the thing you’re managing. See the Vimeo comparison.

Best for contractual DRM — VdoCipher. If a licensing agreement obliges you to ship Widevine or FairPlay, this is a category where the specialists earn their price and the general-purpose platforms don’t compete.

Best for live cohorts and deep QoE data — Mux. If your course includes live sessions and you want per-viewer quality analytics, Mux’s data surface is the strongest in the group. You pay per minute for it, encoding included. See the Mux comparison.

Best if you already run on Cloudflare — Cloudflare Stream. One vendor, one invoice, minimal setup. The per-minute delivery rate is the cost of that simplicity. See the Cloudflare Stream comparison.

Best for agent-driven or automated pipelines — rehelios. If lessons are generated, imported or published by scripts rather than by a person clicking upload, a CLI and MCP server that can run the whole flow in one call matters more than the player skin. More at /agents.

Course video is the clearest case in the market for per-GB billing: large, long-form, and lightly watched relative to how much of it you’re storing.

Three things course video needs that generic hosting doesn’t

Price is the loudest variable, but a course library has requirements a marketing-video host never has to think about.

Per-student access control that you can revoke. A course video is behind a paywall, which means the playback URL cannot be a permanent public link. Signed playback tokens — short-lived JWTs minted per viewer at play time — are the standard answer, and they’re what lets you cut off access when a refund happens. The mechanics are in how signed playback tokens actually work, and there’s a full build in build a token-protected course video player.

Captions, in more than one language. Accessibility obligations aside, captions measurably lift completion on long-form instructional content, and multi-language captions are how a course sells outside its original market. Auto-captions plus VTT/SRT upload should be table stakes, not a tier upgrade.

Completion analytics tied to your own student records. Aggregate view counts tell you nothing useful. What you need is completion rate per lesson, so you can find the module where everyone drops out. That means analytics you can join against your LMS data, not a dashboard chart in someone else’s product.

Cold-start latency, if your students aren’t where your servers are. This is the one people discover late. LearnBase ran into it serving course video across LATAM: the catalog was fine, the player was fine, and first-frame time was still bad enough that students bounced before the lesson started. Edge delivery fixed it. If your audience is geographically far from your origin, test playback from where they actually are before you commit.

What about YouTube unlisted, or the platform my LMS bundles?

Both are legitimate answers in the right situation, and pretending otherwise would make this list useless.

Unlisted YouTube costs nothing and works fine for a free course or a low-stakes lead magnet. It stops working when access control matters: unlisted URLs are shareable by anyone holding them, you can’t revoke per student, YouTube’s branding and recommendations sit on top of your lesson, and you get no completion data tied to your enrollments.

Bundled hosting inside Teachable, Kajabi or Thinkific is the least work by a wide margin, and if you’re happy inside that ecosystem it’s a reasonable place to stay. The tradeoffs are that your video is locked to the platform, the hosting cost is folded invisibly into a plan price you can’t optimise, and migrating later means re-uploading a library you’ve already encoded once. Worth knowing that most hosts, including rehelios, can import an existing library from a URL or S3 bucket without re-uploading the bytes by hand, which makes that migration less painful than it sounds.

Picking one

Start with the shape of your catalog, not the vendor list. If you have a lot of hours and moderate viewing — which describes almost every course — per-GB billing will be materially cheaper than per-minute, and the difference compounds as you add modules. If your video is primarily a marketing surface, buy the marketing features and stop optimising cents. If a contract mandates DRM, that decision is already made for you.

Then check the three course-specific requirements above against whatever you shortlisted, because a platform that’s cheap but can’t revoke a refunded student’s access isn’t cheap, it’s a problem you’ll pay for later.

Our own numbers are on the pricing page and in /pricing.md if you’d rather read them as plain text, and the full vendor-by-vendor breakdown lives on the compare hub. If you want the underlying logic on why the billing models diverge the way they do, that’s video hosting API pricing, compared by billing model — and the same arithmetic run at three catalog sizes, including the points where per-minute billing actually wins, is in the cheapest video hosting, calculated.

Put your first video live today

Create an account, upload a file, and have a fast, embeddable video live in minutes. Pay only for what you store and stream.