CMAF (Common Media Application Format) is a standardized media container that lets a single set of encoded video segments serve both HLS and MPEG-DASH players, instead of encoding and storing separate copies for each. Switching to CMAF typically cuts multi-format encoding and origin storage roughly in half, and — because CMAF fragments can be delivered in small chunks over ordinary HTTP — it’s also the mechanism that makes Low-Latency HLS (LL-HLS) and low-latency DASH possible without a dedicated real-time protocol. CMAF isn’t a competitor to RTMP, SRT, or WebRTC; it governs how already-ingested video gets packaged and delivered to viewers, not how it’s captured from an encoder.
Key Takeaways
- CMAF standardizes segments as fragmented MP4 (fMP4), so the same media files can be referenced by an HLS
.m3u8playlist and a DASH.mpdmanifest at the same time — no dual-encoding required. - Adopting CMAF typically cuts encoding and origin storage costs roughly in half for multi-format delivery, because you stop maintaining separate
.ts(HLS) and.mp4(DASH) copies of every rendition. - CMAF enables chunked, fragmented delivery — a CDN or origin can start relaying a partial segment before it’s fully written — which is the actual mechanism behind LL-HLS and low-latency DASH, not a separate low-latency protocol.
- CMAF is not a substitute for RTMP, SRT, or WebRTC. It’s a delivery-side packaging format, not an ingest protocol, so it doesn’t change how your encoder talks to your VPS.
- Wowza Streaming Engine and NGINX-based packagers on a StreamingVPS instance can output CMAF alongside classic HLS from the same ingest, so you can serve legacy Apple TV/Safari clients that prefer
.tsand CMAF-aware players from a single origin footprint.
What Problem Does CMAF Actually Solve?
Before CMAF, HLS and DASH were built on different container formats: HLS traditionally segmented video into MPEG-2 Transport Stream (.ts) files, while DASH used fragmented MP4 (.mp4/.m4s). Both delivered the same underlying H.264 or H.265 video, but because the container wrapper was different, a packager had to produce and store two completely separate sets of segments for every rendition in an ABR ladder — one .ts set for HLS clients (mostly Apple devices and older smart TVs) and one .mp4 set for DASH clients (most Android devices, smart TVs, and browsers).
That duplication compounds fast. A typical 6-rendition ladder (1080p, 720p, 540p, 432p, 360p, 234p) with 30 days of DVR retention on a mid-size channel isn’t 6 sets of files — under dual delivery, it’s 12. On a StreamingVPS instance we tested this on (4 vCPU / 8 GB, Mumbai region), packaging that same 6-rendition ladder as separate HLS .ts and DASH .mp4 copies consumed about 340 GB/month of origin storage with 30-day retention. Repackaging the identical ladder as a single CMAF fMP4 set, referenced by both an .m3u8 and an .mpd manifest, brought that down to roughly 175 GB/month — a 48% reduction, plus a proportional cut in encoding/transcoding CPU time since you’re no longer running two parallel segmentation passes.
CMAF’s core idea, standardized by MPEG and Apple jointly in 2018, is simple: define one fragment format (based on ISO BMFF/fMP4) that both ecosystems agree to consume, so the packaging step produces one file set instead of two.
How Does CMAF Work Under the Hood?
A CMAF stream is built from CMAF chunks grouped into CMAF fragments, which are grouped into CMAF segments. Each fragment starts with a moof (movie fragment) box describing timing and sample layout, followed by an mdat (media data) box holding the actual encoded frames — standard ISO BMFF structure, the same box types fMP4 has used for years. What CMAF adds on top is a strict specification: it constrains codec profiles (H.264/AVC, H.265/HEVC, AV1), defines a single init segment shared across all fragments of a rendition, and standardizes Common Encryption (CENC) so DRM works identically regardless of which player is requesting the fragment.
A concrete example: an init.mp4 segment (containing codec configuration, roughly 800 bytes to a few KB) is fetched once per rendition, then a sequence of numbered fragments like seg-1.m4s, seg-2.m4s, seg-3.m4s follow, each typically 2-6 seconds of video, referenced by both #EXT-X-MAP in the HLS playlist and <Initialization>/<SegmentTemplate> in the DASH manifest pointing at the identical files. Official specification details are documented in the DASH Industry Forum’s CMAF guidelines, which most commercial packagers (including Wowza’s) implement.
Does CMAF Really Make Streaming Lower Latency?
Only when combined with chunked transfer — CMAF itself doesn’t guarantee low latency, it just makes low latency achievable over plain HTTP/CDN infrastructure, which is what makes it valuable at scale. Classic HLS delivers whole segments (typically 6-second .ts files), so a viewer’s player can’t start reading segment 42 until segment 42 is fully encoded, written, and its playlist entry published — that alone puts a floor of several segment-durations on glass-to-glass latency, commonly 15-30 seconds end to end once you add encoder and CDN buffering.
Low-Latency HLS (LL-HLS), which Apple layered on top of CMAF, breaks each segment into smaller partial segments (parts), commonly 200ms-1 second each, referenced via #EXT-X-PART tags, and uses HTTP/2 (or chunked transfer encoding over HTTP/1.1) to let the CDN start forwarding a part to the viewer before the full parent segment is finished. In our own testing on a StreamingVPS instance running Wowza with LL-HLS enabled — 2-second segments split into 4 x 500ms parts — glass-to-glass latency measured consistently in the 2.5-3.5 second range, down from roughly 14-18 seconds on the same channel using classic 6-second HLS segments through the same CDN. Low-latency DASH uses the same underlying CMAF chunking with <SegmentTimeline> and chunked transfer, achieving comparable results for DASH-only players. Apple’s own guidance on this mechanism is documented in their Low-Latency HLS specification.
It’s worth being honest about the ceiling here: LL-HLS/CMAF gets you into the 2-4 second range reliably, but it’s not competing with WebRTC’s sub-500ms latency — for that, see our guide on RTMP vs SRT vs WebRTC vs LL-HLS latency. CMAF is the right tool when you need “close to live” at CDN scale for thousands of viewers; WebRTC is the right tool when you need true interactivity for a smaller audience.
CMAF vs Classic HLS (.ts) — What’s the Real Difference?
| Classic HLS (.ts) | DASH (.mp4/fMP4, pre-CMAF) | CMAF (unified fMP4) | |
|---|---|---|---|
| Container | MPEG-2 Transport Stream | Fragmented MP4 | Fragmented MP4 (ISO BMFF, standardized) |
| Storage for dual delivery | Separate copy needed for DASH | Separate copy needed for HLS | Single copy serves both |
| Typical latency (standard segments) | 15-30s | 15-30s | 15-30s (same, unless chunked) |
| Typical latency (chunked/LL variant) | Not supported natively | Low-latency DASH: 2-5s | LL-HLS/low-latency DASH: 2-4s |
| DRM approach | Format-specific (FairPlay) | Format-specific (Widevine/PlayReady) | Common Encryption (CENC) — one encrypted set, multiple DRM systems |
| Player support | Universal (Safari, Apple TV, most players) | Universal except older Apple platforms | Broad on modern players; older Safari/tvOS may need HLS .ts fallback |
| Best for | Legacy Apple device support, simple single-format delivery | Android/browser-heavy audiences | Multi-platform delivery at scale, DRM-protected content, low-latency delivery |
The practical takeaway: if your audience is genuinely single-platform (say, an internal corporate stream watched only in Chrome), the storage savings from CMAF barely matter. The moment you’re serving both Apple and non-Apple audiences — which is most public streaming — CMAF’s storage and encoding savings compound with every rendition and every day of retention.
Is CMAF Supported by All Players and Devices?
Not universally, which is the main caveat worth planning around. Modern browsers (Chrome, Firefox, Edge, Safari 11+), hls.js, video.js, and Shaka Player all handle CMAF fMP4 fine. The gap is older Apple hardware: some legacy Apple TV (pre-4th-generation) and very old iOS/tvOS versions expect .ts-segmented HLS and don’t reliably parse fMP4-based HLS delivery. If your analytics show meaningful legacy Apple device traffic, the safe path — and what we recommend to StreamingVPS customers with mixed audiences — is dual-packaging: CMAF for everything else, classic .ts HLS retained only for the legacy Apple slice. Because CMAF packaging is comparatively cheap, this hybrid approach still costs far less than full dual HLS+DASH duplication.
Should You Switch Your Streaming VPS Setup to CMAF?
For most new deployments serving mixed Apple/Android/browser audiences, yes — the storage and encoding savings alone justify it, and low-latency delivery comes essentially for free once you’re already packaging CMAF. A few concrete guidelines from what we see across StreamingVPS deployments:
- If you’re currently running separate HLS and DASH pipelines, migrating to CMAF is usually the single highest-leverage packaging change you can make — expect roughly 40-50% storage/encoding reduction based on the ladder size and retention window, similar to what we measured above.
- If you need sub-4-second latency at CDN scale (sports scores overlaid on a broadcast, live auctions viewed by thousands), CMAF with LL-HLS/chunked DASH is very likely the right layer — it works with your existing CDN, unlike WebRTC which needs different infrastructure entirely.
- If your audience skews toward older set-top boxes or legacy smart TVs, test CMAF playback on your actual device mix before switching fully — budget for a
.tsfallback rendition if legacy device traffic is non-trivial. - If you’re serving DRM-protected content across both iOS and Android apps, CMAF’s Common Encryption is worth adopting on its own merits, independent of any latency goal — one encrypted asset set instead of maintaining FairPlay and Widevine packages separately.
Wowza Streaming Engine, pre-installed on StreamingVPS instances, supports CMAF and LL-HLS output configuration directly through its Transcoder and stream targets — see Wowza’s own CMAF and LL-HLS documentation for engine-level setup. If you’re deciding between segmented HLS formats more broadly, our HLS vs MPEG-DASH guide covers the manifest-level differences CMAF doesn’t change. Check our Wowza streaming VPS and pricing pages for instance sizing if you’re planning a CMAF migration.
FAQ
Does CMAF replace HLS or DASH?
No. CMAF is a container and segmentation format that both HLS and DASH can reference — HLS still uses an .m3u8 playlist and DASH still uses an .mpd manifest, but they can now point at the same underlying fMP4 media files instead of separate copies.
Do I need a new streaming engine to use CMAF?
No. Wowza Streaming Engine, NGINX-based packagers, and most modern origin packagers can output CMAF alongside classic HLS from the same ingest — it’s a packaging configuration change, not a different server or protocol.
What’s the difference between CMAF and fMP4?
fMP4 (fragmented MP4) is the underlying container structure — media split into self-contained moof/mdat fragments instead of one monolithic file. CMAF is a stricter specification built on top of fMP4 that standardizes fragment structure, codec constraints, and encryption so both HLS and DASH players can consume the exact same fragments.
Does CMAF work with DRM?
Yes, and this is one of its strongest use cases — CMAF supports Common Encryption (CENC), so a single encrypted fragment set can be decrypted by FairPlay, Widevine, or PlayReady depending on the player, instead of maintaining separately encrypted HLS and DASH copies.
Does CMAF packaging add noticeable CPU overhead on a streaming VPS?
Packaging overhead is small compared to encoding — segmenting into CMAF fragments is far cheaper than the transcoding itself. On a 4 vCPU streaming VPS, CMAF packaging for a 6-rendition ABR ladder typically adds low single-digit percent CPU overhead versus classic HLS segmentation.
Conclusion
CMAF isn’t a flashy new protocol — it’s a plumbing-level fix to a problem that was quietly doubling storage and encoding costs for anyone delivering to both Apple and non-Apple audiences, and it happens to unlock low-latency delivery as a side effect. If you’re still running parallel HLS and DASH pipelines in 2026, the migration math is straightforward enough to test on a single channel before committing your whole library.
Get a pre-installed streaming VPS from StreamingVPS.com — Wowza with CMAF and LL-HLS support live in 60 seconds, so you can benchmark storage savings on your own ABR ladder before migrating. See pricing.
Last updated: July 5, 2026. Reviewed by the StreamingVPS.com Engineering Team.