How to self-host a FAST or PPV TV channel on WordPress

WordPress TV channel player embedded on a public blog post, showing a 24/7 linear FAST channel with an unskippable ad break and a PPV unlock prompt in the sidebar

FAST and PPV are the two business models that actually pay for a TV channel. Everything else is a hobby.

FAST stands for Free Ad-Supported Streaming Television. It's the modern descendant of broadcast TV. Linear, always on, free at the point of consumption. Ads are inserted into the stream at fixed positions. Pluto, Tubi, the Roku Channel, Samsung TV Plus all run on this model. The economics are per-impression. You earn while the channel is on air.

PPV is the paywall model. The original form was per-event: pay once to watch one fight, one concert, one keynote. The version most operators run today is subscription. A recurring fee unlocks a members-only channel for as long as the subscription is active. The viewer is in a billing relationship before they ever press play. Revenue is recurring and predictable, and the editorial question shifts from "what one event do we charge for" to "what's worth keeping subscribers tuned in week after week".

Both fit on WordPress because WordPress already does the two hard parts. It manages content. It sells things. What's been missing is the channel layer between them. The piece that turns a folder of MP4 files into a 24/7 linear stream with ads, or into a one-off event behind a Stripe checkout, without renting a streaming platform on top of the one you already have.

This guide is about that piece. What a FAST or PPV channel really costs to self-host on a WordPress site. Where to put the files. How to get the channel running in an afternoon.

Why self-host instead of using a streaming platform

You can launch a FAST or PPV channel on Frequency, Amagi, Wurl, Vimeo OTT, or another OTT platform. They'll do the linear playout, the ad-insertion, the gating, and the analytics. They'll also keep an unbounded share of your inventory, gate-keep which advertisers can buy on you, lock your library into their CMS, and bill you for storage and bandwidth on every hour of programming you've ever produced.

If you already have a WordPress site, you've built half of an OTT operator without knowing it. Your editorial brand, your back-catalogue, your audience email list, your commerce stack all live there. The other half is a channel engine and a player. Both are now plugin-shaped.

Four reasons it's worth running this yourself.

  • You own the URL. The viewer never leaves your domain. The ad slot on the side of your page is yours. The recommended-next viewer journey is yours. Search engines index your site, not someone else's.
  • You own the rate card. A FAST channel run through a platform sells your inventory at the platform's CPM, minus the platform's take. Self-hosted, you sell direct, or via your own ad server (Google Ad Manager, FreeWheel, SpringServe), at your own CPM.
  • You own the gate. For PPV, your existing checkout decides who watches: WooCommerce, Stripe, MemberPress, whatever you already run. No new billing relationship. No platform commission stacked on top of the payment processor's commission.
  • Storage scales linearly, not per-platform. A 10 TB library on a dedicated server costs the same whether you stream it ten times a year or ten times a second. Platform billing scales with success, which is the opposite of what you want from infrastructure.

Storage is where most operators get this wrong. The math:

What it actually takes to store a 24/7 channel

Three numbers set your storage budget. How many hours of unique programming you keep online. How much each hour weighs on disk, source files and ABR ladder both. How fast the library grows month over month.

For a channel transcoded through the iReplay.TV WordPress plugin, one hour of programming weighs roughly this on disk:

  • Source master (the file you uploaded): about 3.5 GB per hour at 8 Mbps H.264 1080p. That's typical archive quality from an edit suite. Lighter if you uploaded a YouTube-grade re-encode, heavier if it's a ProRes or DNxHR master.
  • ABR ladder, transcoded automatically: 1080p at ~7 Mbps, 540p at ~1.8 Mbps, audio-only at 160 Kbps. About 4.0 GB per hour total across the variants.

An hour of programming consumes about 7.5 GB of disk if you keep both the source master and the ABR segments. The source is what you re-encode from when the ladder changes. The ABR is what serves to viewers. Delete the source after transcoding and you halve the number, but you lose the ability to re-ladder if the encoding profile changes, or to re-deliver to a partner who needs a different format.

Apply that to a real library:

Library sizeDisk needed (source + ABR)ABR only
50 hours (a launch slate)~375 GB~200 GB
200 hours (a year of programming)~1.5 TB~800 GB
500 hours (an active editorial channel)~3.8 TB~2 TB
1,000 hours (a deep catalogue)~7.5 TB~4 TB
5,000 hours (a legacy broadcaster's archive)~37 TB~20 TB

The lower bound, ABR only, works if your team is disciplined about archiving masters somewhere else. The editor's NAS, a cold-storage bucket, anything that isn't the channel server. The upper bound is the safer default when your WordPress site is the single source of truth for everything you've produced.

A linear FAST channel in rotation tends to plateau around 200 to 500 hours of active programming. Older material moves out of rotation into archive. A PPV-only operation runs on much less. A few hundred gigabytes covers a year of monthly events.

Where the storage actually lives

Once you know what you need, the question is what to put it on. The tiers, cheapest first.

1. Shared WordPress hosting (~€5–15/mo)

SiteGround, Kinsta starter plans, your existing managed-WP host. Works for testing the plugin with a five-hour slate. Stops working past 50 to 100 hours. Storage quotas top out, the host throttles outbound bandwidth, and the I/O profile of HLS segment serving is not what shared hosts are tuned for. Don't plan a real channel here.

2. Managed VPS (~€20–40/mo)

Hetzner Cloud CPX31, DigitalOcean droplets, Vultr High-Performance, Linode Dedicated 4 GB. 320 GB to 1 TB of SSD, comfortable for around 200 hours of programming and small audiences (under 50 concurrent viewers). The catch is monthly bandwidth: these plans are metered, with 20 to 32 TB included and overage charges or throttling above that. A 24/7 channel that hits real audience numbers leaves the metered VPS tier for bandwidth reasons before it leaves for storage reasons. The exception is OVHCloud VPS, which advertises unmetered bandwidth (with a 250 Mbps speed cap on the higher plans) and ends up roughly comparable to entry-level Dedibox once egress is out of the equation. If you're starting on a VPS and care about not getting surprised by a bandwidth bill, that's the one to pick.

3. OVHCloud bare metal: Rise and Advance lines

Dedicated single-tenant hardware. The right answer once your library outgrows VPS storage caps or your viewer count starts pushing managed VPS bandwidth limits.

  • OVHCloud Rise-1 (~€60–80/mo, current pricing varies): Intel Xeon entry-tier, 32 GB RAM, 2 × 4 TB HDD or 2 × 480 GB SSD, 500 Mbps unmetered. Cost-effective archive tier. Pair the HDD variant with a smaller SSD for hot-segment cache.
  • OVHCloud Advance-1 and Advance-2 (~€100–160/mo): Xeon Scalable or EPYC, 64 to 128 GB RAM, 2 × 960 GB NVMe SSD. The sweet spot for an active FAST channel with a 1 to 4 TB library and steady concurrent traffic. 1 Gbps unmetered uplink.
  • OVHCloud Scale series (€200+/mo): for archives heading into the tens of TB, or operators who need multi-NVMe RAID and higher network throughput.

4. Scaleway bare metal: Dedibox and Elastic Metal

The French alternative; similar tiering, often cheaper at the entry level.

  • Scaleway Dedibox Start (~€40/mo at the time of writing): low-tier dedicated, fine as a Rise-1 substitute for archive-heavy workloads. 500 Mbps unmetered standard.
  • Scaleway Dedibox Pro and Pro-2 (~€80–130/mo): mid-tier with NVMe, comparable to Advance-1. 1 Gbps unmetered uplink.
  • Scaleway Elastic Metal (EM-A210R-NVMe and up) (~€90–200/mo, billed hourly or monthly): bare metal you can spin up and tear down like a cloud VM. 1 Gbps unmetered uplink standard, burstable on higher SKUs. Useful if you're scaling for an event, like a one-off PPV concert weekend, and don't want a permanent fixed-cost machine sitting idle the rest of the year.

Always check current pricing on the provider's site. The bare-metal market moves quarter to quarter, and the SKU lineup changes faster than the names do.

5. Object storage offload (~€8–15/TB/month)

Once your archive crosses the 5 TB mark, push old programming to S3-compatible object storage and keep only the currently-in-rotation assets on the bare-metal hot tier. Options: Scaleway Object Storage, OVHCloud Object Storage S3, Backblaze B2, Cloudflare R2. The plugin doesn't natively pull from object storage today. A rotation cron handles it: pull from S3 on schedule activation, delete from local on schedule expiry. The archive becomes effectively unlimited at a fraction of bare-metal pricing.

Why "unmetered" is the word to look for

The word that keeps appearing in the bare-metal listings above is unmetered. That's not a marketing flourish. It's the line between a 24/7 channel that's financially viable and one that isn't.

A single viewer at 1080p HLS consumes roughly 7 Mbps. Fifty concurrent viewers pulls 350 Mbps sustained. A hundred concurrent pulls 700 Mbps. Over a month, even a modest 100-concurrent channel pushes 30 to 60 TB outbound depending on session length. On metered cloud egress (AWS, GCP, Azure standard) at $0.05 to $0.09 per gigabyte, that's $1,500 to $5,400 a month in bandwidth alone, billed on top of compute and storage. On an unmetered bare-metal plan, the same traffic is included in the base price. The cost stays flat whether you stream to one viewer or a hundred, until you saturate the physical uplink.

That's why every bare-metal tier above quotes its uplink in Mbps or Gbps rather than a monthly transfer cap, and why you should treat any "TB included per month" wording on a hosting plan as a warning, not a feature. The 1 Gbps unmetered figure on the Advance and Dedibox Pro tiers is what carries a real audience through to the point where a CDN actually starts paying for itself.

The practical starting point for most operators is an entry-tier bare-metal box from day one. OVHCloud Rise-1 or Scaleway Dedibox Start, in the €40 to €80 a month range, gives you unmetered bandwidth from the launch slate forward and removes the bandwidth-driven migration from your roadmap entirely. If you'd rather start cheaper on a VPS, pick OVHCloud's VPS line specifically rather than a metered alternative. The upgrade path from any of these to OVHCloud Advance-1 or Scaleway Elastic Metal, once the library crosses 1 TB or peak concurrent crosses ~100 viewers, is a one-time effort that costs nothing in subscriber experience. The plugin's player references segments by URL, so pointing a new origin at the same WordPress site is a DNS change.

Get a FAST or PPV channel running in an afternoon

The deep walkthrough lives in our earlier guide on running a 24/7 WordPress TV channel without YouTube. The short version, for the FAST/PPV reader:

  1. Install the iReplay TV Channel and Radio Station plugin on your WordPress site. Upload the ZIP through Plugins → Add New → Upload Plugin. The plugin is also queued on the WordPress.org directory; once approved, a direct search will install it.
  2. Connect the plugin to an iReplay.TV account. API key and secret are free to generate on the setup page. The free tier allows one channel and five concurrent viewers, enough to test the full pipeline. Paid tiers begin at 25 concurrent viewers and scale to unlimited.
  3. Create your channel. Pick WebTV, give it a name, a handle, a language, an age rating. The handle becomes the shortcode parameter and the public URL slug.
  4. Upload your initial slate. Drag MP4, MOV, MKV, or WebM files onto the dropzone. The plugin chunks the upload so large files survive shared-host timeouts, submits each file to iReplay.TV for HLS transcoding into the ABR ladder, and writes the encoded segments back to your WordPress server. Once you have four ready assets totalling fifteen minutes or more, the scheduler auto-generates a 48-hour lookahead and the channel goes live.
  5. Embed the player. On any post or page: [irptvcr_tv_player channel="your-handle"]. The player is HLS-native on Safari and mobile, falls back to hls.js on Chrome, Firefox, and Edge, and renders segments from your own WordPress domain. The viewer never sees a third-party hostname.

That's the launch. FAST and PPV diverge from here.

Running a FAST channel: making the ads work

A FAST channel earns its keep through ads in the stream. Three approaches, in order of complexity.

Bumpers and house ads as scheduled assets. The simplest model. Upload your sponsor spots as regular video assets, give them weight 10 (or higher than your programming), and the weighted-random scheduler interleaves them at the natural rate. Effective for community-radio-style "brought to you by" placements, affiliate ads, and house promos. Zero ad-server integration. The cost is per-impression precision, since you can't target.

The sponsor-overlay CTA. The plugin ships one always-on overlay per channel: a sponsor link displayed on top of the player, with an optional QR code for mobile-second-screen viewers. Configure it in the channel settings. Works as a permanent affiliate placement, a newsletter call-to-subscribe, or a "sponsored by" banner. Per-asset CTAs (different overlay per video) are on the roadmap.

Server-guided ad insertion and HLS Interstitials. The real FAST monetisation model. Ads are spliced into the linear stream at SCTE-35 markers, the same way a broadcast playout chain handles them. The viewer can't skip because the ad is part of the playing timeline, not an attached pre-roll. iReplay.TV supports both server-guided ad insertion (SGAI) and Apple HLS Interstitials on the backend. Customers with Google Ad Manager, FreeWheel, or SpringServe integrations enable them with a support request. The plugin is agnostic to how the upstream stream is assembled. Once SGAI is wired, your WordPress player receives an ad-decorated playlist transparently.

For a small operator with no ad-server contract yet, start with bumpers and the sponsor overlay. The day a media-buying agency calls about programmatic on your channel, switch on SGAI without touching the WordPress site.

Running a PPV channel: gating the stream

PPV is simpler in infrastructure and more interesting in commerce. The plugin doesn't ship its own paywall, and shouldn't. Your WordPress site already runs whatever paywall stack you need.

  • MemberPress or Restrict Content Pro for subscription access. The canonical model: pay $9 a month, watch the channel. Cancel anytime, lose access at the end of the period.
  • Paid Memberships Pro for tiered subscriber clubs. Free tier sees the FAST grid, paid tier unlocks the premium channel and the back catalogue.
  • WooCommerce Memberships for product-style billing, including one-off purchases if you run occasional per-event PPV alongside the subscription.
  • A custom WooCommerce or Stripe checkout flow for high-touch onboarding when you want a branded landing page rather than a generic membership form.

The pattern is the same in every case. The membership plugin decides who can see the page the channel is embedded on. The plugin's shortcode renders the player for whoever lands on that page. There is no second authorization step. If the visitor is on the page, they're authorised to watch.

The subscription workflow:

  1. Set up your membership plugin with the tiers and pricing you want. The "channel access" tier grants visibility on the page where you'll embed the channel.
  2. Create a WordPress page restricted to that tier, with the channel shortcode ([irptvcr_tv_player channel="your-handle"]) and any subscriber-only welcome copy. The restriction rules live in the membership plugin, not in the iReplay plugin.
  3. Pick the iReplay.TV tier that matches your expected peak concurrent viewers, not your total subscriber count. A subscription channel can carry thousands of paying members on a 100-concurrent-viewer plan, because most subscribers aren't tuned in at the same time. Spoken-word, evergreen, and daypart-skewed content (a morning briefing, an evening commentary) has the most favourable ratio of total subscribers to peak concurrent.

One-off PPV events still work, using the same plumbing. Create a private page with the shortcode and a countdown widget, sell access via WooCommerce or Stripe Checkout, and the product unlock grants the buyer page access. Useful for a launch keynote, a championship final, or a one-night-only concert that sits outside the regular subscription tier. The plugin's concurrent-viewer cap doubles as the seat count for the event, enforced server-side so a leaked URL doesn't oversell.

When FAST and PPV live on the same site

Plenty of operators run both. A public FAST channel as the front of house, building audience and generating ad inventory. A members-only PPV tier behind the same WordPress login, gating premium content, live events, archive deep-cuts. The same plugin, the same iReplay.TV account, two distinct channel handles, two distinct embeds.

The unique-to-WordPress thing here is that the site is the unifying surface. A visitor lands on an article, sees a free FAST embed at the top, scrolls down past a paywalled premium-channel embed, gets a "subscribe to unlock" prompt instead of the player. Two business models stacked on the same audience without paying two platforms.

The hour that starts your channel

The setup work is small. The strategic work is the real lift: which business model fits your audience, what your inventory rate card looks like, how much library to launch with. You can't make those decisions in the abstract. Operators figure them out by running the channel for a quarter and seeing what their audience does with it.

Install the plugin and create a free channel on iReplay.TV. The free tier is enough to upload your launch slate, validate the storage profile on your hosting tier, embed the player on a test page, and decide whether you're running a FAST channel, a PPV channel, or both. Paid plans start at 25 concurrent viewers and scale with your audience.

Running a radio station alongside your TV channel, or instead of one? The same plugin handles audio channels, with the player in audio mode instead of video. See How to run a 24/7 WordPress radio station for the audio-side how-to.

FAQ

Can I switch between FAST and PPV after launch?
Yes. The plugin is the same, the channel is the same. What changes is the WordPress page the embed lives on. A FAST page is public. A PPV page is gated by your membership stack. You can run a single channel in both modes (one public embed, one members-only embed pointing at the same channel handle) if you want the back-catalogue free-with-ads and the latest episode behind a paywall for an exclusive window.

Do I need a CDN?
Not for the first dozens of concurrent viewers. A single bare-metal server with a 1 Gbps uplink handles small-scale traffic comfortably. Past ~200 concurrent viewers on 1080p, a CDN starts paying for itself in viewer latency and origin-server protection. iReplay.TV's higher paid tiers include CDN delivery. Alternatively, put Cloudflare, BunnyCDN, or Fastly in front of your /wp-content/uploads/ireplay/ path. Contact support for specific routing setups.

How do I geo-restrict a PPV event?
Two layers. The simplest: gate the WordPress page itself with a geo-blocking plugin, or your membership tool's geo rules. The stricter one: contact iReplay.TV support to configure stream-token-level geo enforcement, which prevents direct playlist access from non-allowed regions even if the URL leaks.

What about live events with a presenter, not just pre-recorded VOD?
The current plugin handles VOD2Live: programming a 24/7 channel from a library of pre-recorded files. True live insertion (a presenter on air from OBS, Wirecast, or a hardware encoder) is handled by the My TV Channel companion app's timeline feature, which can swap a live feed into the scheduled grid and fall back to the VOD rotation when the live ends. Useful for PPV events with a live opening, or for a FAST channel with a daily live show.

What happens to my channel if my WordPress server goes down?
Segments live on your WordPress server, so a server outage takes the channel offline. The standard mitigations apply: provider-level high-availability (OVHCloud failover IP, Scaleway Load Balancer), object-storage offload with a CDN edge serving cached segments, or a second WordPress install behind a DNS switchover. iReplay.TV's playlist files survive your origin going down, but without segments to point to they don't help. If five-nines uptime matters, especially for a paid PPV event, design the origin tier for it.

Can my advertisers see real numbers, or just plugin estimates?
The plugin reports concurrent viewers and daily aggregate viewer counts in its admin dashboard. For advertiser-grade analytics (IAB-compliant impression counts, viewability, geographic breakdown by ad slot), you'll want an ad-server integration that handles its own measurement: Google Ad Manager, FreeWheel, SpringServe. The plugin's own counts are accurate for operational decisions, not adjudicated for billing third parties.

Need Help With Your Streaming Project?

This article was written by experienced professionals available through iReplay.tv. Whether you need expertise in wordpress fast channel, self-host fast channel, wordpress streaming plugin—our network of specialists can bring your project to life.

Hire a Professional →