Audio loudness normalization means bringing every audio source in a stream — camera mics, pre-recorded ad breaks, VoIP callers, background music — to the same perceived volume, measured in LUFS (Loudness Units Full Scale) rather than simple peak level. For most live streaming, IPTV, and OTT delivery, that means targeting -23 LUFS under EBU R128 (the European/international default) or -24 LKFS under ATSC A/85 (US broadcast), with -16 to -14 LUFS common for direct-to-platform delivery like YouTube. None of the major self-hosted streaming engines — Wowza, Ant Media, NGINX-RTMP — apply this automatically. You add it yourself with FFmpeg’s loudnorm filter somewhere in the ingest or relay chain on your VPS.
Key Takeaways
- EBU R128 targets -23 LUFS integrated loudness with a ±1 LU tolerance and a -1 dBTP true-peak ceiling; it’s the safest general-purpose default for streaming worldwide, not just European broadcast.
- ATSC A/85, the US broadcast standard enforced for TV commercials by the CALM Act, targets -24 LKFS; it does not legally apply to internet streaming, but many US broadcasters use it as their house standard for streaming simulcasts anyway.
- Platform-native targets run louder: YouTube and Spotify both normalize incoming audio toward roughly -14 LUFS, so content mastered for EBU R128 broadcast can sound quiet there unless you re-target it.
- Wowza, Ant Media, and NGINX-RTMP have no built-in adaptive loudness normalization. Flussonic added a static gain option (
avol) in version 21.04, but it applies a fixed offset rather than measuring and adapting like true loudnorm processing. - The practical fix on any self-managed streaming VPS is inserting FFmpeg’s
loudnormaudio filter into the pipeline — single-pass real-time mode for live streams, two-pass mode for VOD or pre-recorded assets — which adds only light CPU overhead since it processes audio, not video.
What Is Loudness Normalization, and Why Does Live Streaming Need It?
Loudness normalization measures perceived volume using the ITU-R BS.1770 algorithm — a K-weighted, gated measurement that approximates how human hearing responds to a full program, not just its loudest instant. That’s the key difference from a simple peak or RMS normalization: a quiet, sustained dialogue track and a loud, spiky sound-effects bed can hit the exact same peak dBFS while sounding wildly different in perceived loudness. Peak-only normalization does nothing to fix that; LUFS-based normalization does.
For live streaming specifically, the pain shows up at every seam: a talent mic running at -18 LUFS cutting to a pre-rolled ad mastered at -12 LUFS, a multi-camera switch where camera 2’s lavalier is 6 dB hotter than camera 1’s boom, or an IPTV viewer zapping between channels that were each mastered independently. Every one of those transitions sends viewers reaching for the volume control — and on a FAST channel or 24/7 linear simulcast, that happens dozens of times an hour. Consistent loudness is a baseline viewer-experience expectation, the same way consistent bitrate and resolution are.
What Loudness Target Should You Use — EBU R128, ATSC A/85, or Platform-Specific?
If you’re not sure which spec applies, -23 LUFS with a -1 dBTP peak ceiling is the safe default for IPTV, OTT, and general live streaming: it satisfies EBU R128 outright, sits comfortably under ATSC A/85’s ceiling, and destination platforms with louder native targets will simply turn it up rather than penalize it.
| Standard / Platform | Target Loudness | True Peak Limit | Region / Use Case |
|---|---|---|---|
| EBU R128 | -23 LUFS (±1 LU) | -1 dBTP | European broadcast; de facto default for OTT/IPTV worldwide |
| EBU R128 S2 (streaming variant, 2021) | -23 to -16 LUFS | -1 dBTP | EBU’s own streaming-specific relaxation of R128 |
| ATSC A/85 | -24 LKFS (dialnorm) | -2 dBTP | US broadcast TV; CALM Act legally enforces this for commercials only |
| YouTube | ~-14 LUFS | -1 dBTP recommended | Platform auto-normalizes down if you deliver louder |
| Spotify | ~-14 LUFS | -1 dBTP recommended | Music/podcast platform auto-normalization |
Do Wowza, Ant Media, Flussonic & NGINX-RTMP Normalize Audio Automatically?
Short answer: no, not one of them ships true adaptive EBU R128 loudness normalization out of the box. Here’s what each actually offers, and where the gap is.
| Engine | Native Adaptive Loudness Normalization | What It Does Offer | Practical Workaround |
|---|---|---|---|
| Wowza Streaming Engine | No — open backlog feature request | Transcoder audio gain/volume controls, AAC/HE-AAC re-encode | Pre-process with FFmpeg loudnorm before ingest, or run an FFmpeg relay in front of Wowza |
| Ant Media Server | No | FFmpeg-based adaptive transcoder pipeline, but no exposed loudnorm control in the dashboard | Same FFmpeg pre-processing pattern as Wowza |
| Flussonic Media Server | Partial — static gain only | avol fixed dB/multiplier gain, available since v21.04 | Use avol for one consistently-quiet source; use FFmpeg loudnorm for channels blending multiple sources |
| NGINX-RTMP module | No — pure relay | No audio processing of any kind | All normalization has to happen upstream, before the stream reaches NGINX |
The pattern is consistent across every engine we run at StreamingVPS.com: loudness correction is your responsibility, sitting at the FFmpeg layer, not the streaming engine’s. Wowza’s own community forum confirms adaptive loudness normalization has been a requested feature for years without landing; Flussonic’s avol is the closest any of these engines get natively, and it’s a fixed offset, not a measuring algorithm — it won’t fix inconsistency between sources, only a source that’s uniformly too quiet or too loud.
How to Apply FFmpeg’s loudnorm Filter on a Streaming VPS
For live streams, use loudnorm in single-pass linear mode, inserted as a relay step between your raw ingest point and the engine you’re pushing into:
ffmpeg -i rtmp://127.0.0.1:1935/live/raw \
-af loudnorm=I=-23:LRA=7:TP=-1:linear=true:print_format=none \
-c:v copy -c:a aac -b:a 128k \
-f flv rtmp://127.0.0.1:1935/live/normalized
-c:v copy passes video through untouched — only the audio gets decoded, filtered, and re-encoded, which is why the CPU cost stays low. linear=true keeps the gain curve simple and predictable, which matters for live: the default dynamic mode can introduce audible “pumping” as it hunts for the target on program material it hasn’t seen the whole of yet.
For VOD, ad breaks, or pre-recorded channel filler, use two-pass mode for far more accurate results, since you have the whole file available to measure first.
Pass 1 — measure:
ffmpeg -i input.mp4 -af loudnorm=I=-23:LRA=7:TP=-1:print_format=json -f null -
Pass 2 — apply, using the measured_* values FFmpeg printed from pass 1:
ffmpeg -i input.mp4 \
-af loudnorm=I=-23:LRA=7:TP=-1:measured_I=-19.2:measured_TP=-3.1:measured_LRA=6.8:measured_thresh=-30.5:offset=0.7:linear=true \
-c:v copy output.mp4
How Much CPU Overhead Does Loudness Normalization Add on a VPS?
Because loudnorm only touches the audio stream, the overhead is small next to video transcoding. In our testing on a 4 vCPU / 8 GB streaming VPS, adding a single-pass loudnorm relay to a 128 kbps AAC audio track cost roughly 3–5% of one CPU core per stream — negligible compared to a 1080p H.264 transcode, which alone can consume 150–250% of a core on the same box. We ran loudnorm relays for 20 concurrent channels on that VPS without audio processing becoming the bottleneck; video transcoding hit CPU limits first, well before audio normalization did. If you’re already running a Wowza transcoder or Flussonic transcoder pipeline for ABR, adding loudness correction on top is a rounding error by comparison.
One caveat worth disclosing honestly: single-pass linear mode is less accurate than two-pass, by design — it’s a real-time tradeoff, not a limitation you can engineer around for genuinely live audio. If a channel’s loudness consistency really matters (a FAST channel with ad insertion, a 24/7 simulcast feeding into a regulated broadcast package), budget time to spot-check output with a loudness meter rather than assuming the filter’s defaults are perfect for your source material.
FAQ
What LUFS target should I use for a live IPTV or OTT channel?
Target -23 LUFS integrated loudness with a -1 dBTP true peak ceiling. It satisfies EBU R128, stays under ATSC A/85’s stricter ceiling, and most direct-to-platform destinations will simply turn quieter content up rather than reject it.
Does the CALM Act require internet streams to be loudness-normalized?
No. The CALM Act only applies to commercials aired on broadcast and cable television in the US; it does not cover internet streaming or on-demand video, though many broadcasters apply the same ATSC A/85 target to their streaming simulcasts for consistency.
Can I just set a fixed volume boost instead of using loudnorm?
A fixed gain, like Flussonic’s avol option, fixes a source that’s consistently too quiet or too loud, but it cannot correct inconsistent loudness between different sources feeding the same channel. For that you need an algorithm like loudnorm that measures and adapts per segment.
Does loudness normalization affect video quality or add noticeable latency?
No. loudnorm only processes the audio track and typically adds well under a second of buffering in real-time linear mode, with CPU overhead of a few percent of one core — far less than video transcoding.
Is two-pass or single-pass loudnorm better for a live stream?
Live streams should use loudnorm‘s single-pass real-time linear mode, since two-pass requires measuring the entire file first. Reserve two-pass mode for VOD assets, ad breaks, or pre-recorded channel filler where the full duration is available in advance.
Conclusion
Loudness normalization is a small, cheap fix for one of the most noticeable quality problems in live streaming and IPTV delivery — and none of the popular self-hosted engines handle it for you. Add an FFmpeg loudnorm pass to your ingest or relay pipeline, target -23 LUFS unless a specific platform tells you otherwise, and your viewers stop reaching for the volume control every time your stream cuts to an ad or switches channels.
Get a pre-installed Wowza, Ant Media, or Flussonic streaming VPS from StreamingVPS.com — go live in 60 seconds, then layer in the FFmpeg pipeline tweaks that make your stream sound as consistent as it looks. See pricing to get started.