This is a research guide based on cited documentation. It is not a report of firsthand testing. Our editorial method

Why one MP4 buffers

When you upload a lesson to the media library and embed it, the browser downloads that one file. If it was exported at 6 Mbps and a student on hotel Wi-Fi or a mobile connection gets 3 Mbps, the player cannot keep up and stalls. There is no lower-quality version to fall back to.

It also means every viewer pulls the full-quality file from your web server. On a 1080p export, a student on a phone downloads the same bytes as one on a desktop monitor, and that traffic competes with PHP requests on the host that runs your LMS.

Encoding several versions on the WordPress host is usually not an option either. Kinsta, for example, bans server-based video conversion plugins and packages such as FFmpeg and points customers to an external service.

How HLS works

HTTP Live Streaming is defined in RFC 8216 (August 2017). A multivariant playlist (the RFC calls it a Master Playlist) lists variant streams, "each of which describes a different version of the same content" at a particular bitrate. Each variant has a media playlist, which is a list of short media segments. The RFC says clients should switch between variant streams to adapt to network conditions.

Apple's HLS authoring specification sets the practical parameters: target durations should be 6 seconds, segments must not exceed the target by more than 0.5 seconds, key frames should appear every two seconds, and you must provide multiple bitrates of video. Because every segment starts with a key frame, the player can change rendition at a segment boundary without restarting the video.

Delivery needs no special server. MDN notes that adaptive streaming over HTTP requires no special server-side components: playlists and segments are ordinary files served by a web server or CDN. MDN says HLS is built into iOS and macOS and works on Safari and most Android devices, while MPEG-DASH playback relies on a JavaScript player and Media Source Extensions; check your player's browser support for everything else.

PieceWhat it isCourse-site consequence
Multivariant playlistIndex of all renditions with their bitrates and resolutionsThe URL you embed in the lesson
Variant (rendition)The lesson encoded at one bitrate and resolutionMore renditions mean more storage
Media playlistList of segments for one renditionOne per rendition
SegmentA few seconds of video, about 6 seconds in Apple's specHundreds of small files per lesson
PlayerMeasures throughput and picks the next segment's renditionStudents on slow links drop quality instead of buffering

The bitrate ladder

Apple publishes one possible set of H.264 variants for 16:9 content. It calls this a suggestion rather than a requirement, and recommends 2000 kbit/s as the default starting variant. The table reproduces its ladder; frame rates up to 30 fps apply to the lower rungs, and the upper rungs keep the source frame rate.

ResolutionBitrate (kbit/s)Approx. GB per hour of video
416 x 2341450.07
640 x 3603650.16
768 x 4327300.33
768 x 43211000.50
960 x 54020000.90
1280 x 72030001.35
1280 x 72045002.03
1920 x 108060002.70
1920 x 108078003.51
All nine renditions25,64011.54

Storage and bandwidth math

GB per hour is bitrate in kbit/s multiplied by 3,600 seconds and divided by 8,000,000. At 7,800 kbit/s that is 3.51 GB per hour. Storing all nine rungs of Apple's ladder takes about 11.54 GB per hour, roughly 3.3 times the top rendition alone. A 20-hour course is about 70 GB at the top rung only, or about 231 GB with the full ladder.

Bandwidth works the other way. Each student downloads only the segments they watch, at the rendition the player picks. A student who watches one hour at the 2,000 kbit/s default uses about 0.9 GB; at the 1080p top rung, about 3.5 GB. If 200 students each watch the full 20 hours at 2,000 kbit/s, delivery is about 3,600 GB.

Managed video services change the billing unit. Cloudflare Stream bills on minutes stored and minutes delivered, at $5 per month per 1,000 minutes of storage capacity and $1 per 1,000 minutes delivered, with encoding free and the extra quality levels it generates not counted against storage. Bunny Stream lists free encoding, storage from $0.01 per GB, delivery from $0.005 per GB and a $1 monthly minimum; its pricing page does not say how renditions count toward storage.

  • Cloudflare Stream, 20-hour course: 1,200 minutes stored needs two 1,000-minute increments, $10 per month.
  • Cloudflare Stream, 200 students watching all 20 hours: 240,000 minutes delivered, $240.
  • Bunny Stream, the same 3,600 GB delivered at the listed from-price of $0.005 per GB: $18, before storage and before any regional price differences.

Who needs HLS and who can skip it

HLS earns its complexity when students watch on phones or variable connections, lessons are long, or video is a large share of what you sell. It also takes bulk video traffic off the server that runs WordPress.

You can skip it for a handful of short screen recordings exported at a modest bitrate, for audiences on reliable office connections, or when an existing video platform already does adaptive streaming for you. In that last case the question is not whether to build HLS but which host's pricing unit (minutes or gigabytes) fits your viewing pattern.

Checklist before you move lessons to HLS

Treat the change as a migration with acceptance tests, not a settings toggle.

  • Measure total hours of video and expected viewing hours per month; both drive cost.
  • Decide on a ladder; fewer rungs cut storage if you encode and host yourself.
  • Test playback on an iPhone, an Android phone and a desktop browser on a throttled connection.
  • Confirm that the LMS still records progress or completion with the new player before switching every lesson.
  • Check access control: playlists and segments are plain files, so signed or tokenised URLs matter for paid content.
  • Keep original masters outside the WordPress host.

Questions before you decide

How long are HLS segments?

Apple's HLS authoring specification says target durations should be 6 seconds, with segments nominally 6 seconds and never more than 0.5 seconds over the target.

Does HLS need a special streaming server?

No. MDN says adaptive streaming over HTTP requires no special server-side components; playlists and segments are ordinary files that a web server or CDN can deliver.

Does storing several renditions multiply storage cost?

If you encode and store them yourself, yes: Apple's nine-rung example ladder totals about 25.6 Mbps, about 3.3 times the top rendition. Cloudflare Stream bills storage by minutes of video and says its generated quality levels do not consume storage.

Sources & verification

Product details and prices can change. Check the linked provider before buying.

  1. IETF RFC 8216: HTTP Live Streaming Accessed 30 Oct 2026
  2. Apple Developer: HLS authoring specification for Apple devices Accessed 30 Oct 2026
  3. MDN: setting up adaptive streaming media sources Accessed 30 Oct 2026
  4. Cloudflare Stream: pricing Accessed 30 Oct 2026
  5. Bunny Stream: pricing Accessed 30 Oct 2026
  6. Kinsta docs: banned and incompatible plugins Accessed 30 Oct 2026

Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.