Opus vs AAC: Which Audio Codec Should You Use for Live Streaming?

Last updated: July 5, 2026 · Reviewed by StreamingVPS.com Engineering Team

Use AAC-LC when your stream travels over RTMP, HLS, or MPEG-DASH — it’s the only audio codec nearly every player, smart TV, and legacy set-top box understands. Use Opus when your stream travels over WebRTC or SRT — it’s mandated by the WebRTC standard (RFC 7587) and delivers comparable perceived quality at 40-50% lower bitrate for speech. In practice, the delivery protocol picks the codec for you far more often than it’s a genuine A/B decision, and the engines we run at StreamingVPS.com (Wowza, Ant Media, NGINX-RTMP, Red5, Flussonic, MistServer) each handle that handoff differently.

Key Takeaways

  • AAC-LC is the required audio codec for RTMP ingest and the safest default for HLS/DASH delivery, since it’s supported by virtually every set-top box, smart TV, and legacy player without a fallback path.
  • Opus is the codec WebRTC standardizes on per RFC 7587 — Wowza and Ant Media both use it natively for sub-second-latency audio, and unlike in HLS, it isn’t an optional extra.
  • At comparable perceived quality, Opus typically needs 40-50% less bitrate than AAC for speech-heavy content (roughly 32-64kbps Opus vs 96-128kbps AAC), though the gap narrows for full-bandwidth music.
  • Apple only added Opus support to its HLS authoring spec with iOS 17 (2023), and only inside fMP4/CMAF containers — AAC still has to ship alongside it for older devices, so pure-Opus HLS isn’t safe in production yet.
  • NGINX-RTMP does zero audio transcoding: whatever codec arrives over RTMP (almost always AAC) leaves unchanged. Wowza and Ant Media both transcode automatically between AAC and Opus when bridging RTMP and WebRTC.

What’s Actually Different Between Opus and AAC?

AAC (Advanced Audio Coding) dates back to 1997 as part of the MPEG-4 standard. It’s a licensed, patent-encumbered codec, but two decades of near-universal hardware decoder support means every smart TV, game console, mobile OS, and legacy set-top box can play it without a fallback. Its most common streaming profile is AAC-LC (Low Complexity); HE-AAC v1/v2 variants exist for very low bitrates but are rarely used in live-streaming pipelines because LC already covers the practical bitrate range engines need.

Opus (RFC 6716, standardized in 2012) is royalty-free and was purpose-built for real-time communication. It merges two codecs internally — SILK (originally from Skype, tuned for speech) and CELT (tuned for music) — and can switch or blend between them per-frame. That hybrid design is why Opus handles both a single voice and a full band without needing separate encoder modes, and why the IETF made it the mandatory-to-implement codec for WebRTC. Opus also supports frame sizes from 2.5ms up to 60ms (RFC 7587), which is part of what makes sub-frame-level latency achievable in WebRTC audio — AAC’s larger frame sizes (typically 1024 samples, ~21ms at 48kHz, often bundled further by the container) simply can’t get that tight.

Which Codec Does Each Streaming Protocol Actually Require?

This is the part that removes most of the “choice” from Opus vs AAC — your delivery protocol usually decides it for you.

Protocol Required / native audio codec Alternatives Notes
RTMP / RTMPS AAC-LC MP3 (legacy, rarely used) No native Opus support in the RTMP spec or in OBS’s RTMP output
HLS (MPEG-TS segments) AAC MP3, AC-3, EAC-3 Opus is not supported inside .ts segments at all
HLS (fMP4 / CMAF segments) AAC Opus (iOS 17+ / modern players only) Apple’s own authoring spec still requires AAC alongside Opus for compatibility
MPEG-DASH AAC or Opus ISOBMFF containers support both; broader player support for Opus than in HLS
WebRTC Opus (RFC 7587, mandatory) G.711 (legacy telephony gateways only) Every WebRTC-compliant browser must ship an Opus decoder
SRT Passthrough (whatever the source sends) SRT doesn’t define an audio codec; it tunnels whatever container/codec you feed it

The practical upshot: if you’re publishing to YouTube, Twitch, or Facebook over RTMP, you’re sending AAC, full stop. If you’re doing a WebRTC broadcast through Ant Media or a Wowza real-time app, you’re sending Opus, full stop. The only place a real decision exists is inside HLS/DASH delivery of a WebRTC-originated stream, where an engine has to transcode one way or the other.

Is Opus Really Better Quality Than AAC at the Same Bitrate?

For speech, generally yes, and it isn’t close at low bitrates. Opus’s SILK component was built from Skype’s speech codec lineage specifically to preserve intelligibility and naturalness of voice at low bitrates, while AAC-LC was tuned more for general-purpose audio and needs more bits to hold up under similar conditions. In our own listening tests pushing a single-host talk-show format (lavalier mic, room tone, no music) through both encoders at 64kbps, Opus retained noticeably more high-frequency detail and less “underwater” artifacting than AAC-LC at the same bitrate. By 128kbps, the gap closed to the point where most listeners on consumer headphones couldn’t reliably tell them apart in a blind A/B.

For full-bandwidth music — a DJ set or a live band — the difference narrows further, and above roughly 160-192kbps both codecs are effectively transparent for most listeners. The quality advantage only matters, though, if the receiving device can actually decode Opus. A hotel-room smart TV running an older WebOS or Tizen build, or a legacy set-top box, has no Opus decoder at all — so for anything you can’t guarantee runs through a modern browser or a current mobile OS, AAC’s universal compatibility outweighs Opus’s bitrate efficiency.

How Do Wowza, Ant Media, and NGINX-RTMP Handle Audio Codecs?

  • Ant Media Server negotiates Opus natively for WebRTC ingest and playback — no configuration needed, since Opus is baked into its WebRTC stack. When that same broadcast needs to go out as HLS or DASH, Ant Media’s Transcoder automatically re-encodes the audio track to AAC so legacy players and TVs can decode it; AAC bitrate is configurable per-application through the web panel or the REST API. When an RTMP source (already AAC) needs to be served over WebRTC, the conversion runs in the opposite direction, from AAC to Opus.
  • Wowza Streaming Engine‘s Transcoder can decode and re-encode both AAC and Opus tracks. For a straightforward RTMP-in, HLS-out pipeline, Wowza passes AAC through with no transcoding overhead at all. When Wowza’s WebRTC (Real-Time Streaming) output is involved, it handles the AAC-to-Opus conversion as part of that output track, the same way it already handles video transcoding for adaptive bitrate ladders.
  • NGINX-RTMP (nginx-rtmp-module) does not touch audio codecs under any circumstances — it’s a pure relay for whatever arrives. If you publish AAC over RTMP, your HLS output is AAC; there’s no Opus option and no transcoding path unless you bolt on an external ffmpeg process via the module’s exec directive to re-encode the audio track yourself before or after nginx-rtmp handles it. This is consistent with NGINX-RTMP’s general lack of built-in media-processing features — the same gap that shows up for DVR, watermarking, and ad-marker insertion in our other engine-comparison posts.

What Bitrate, Sample Rate, and Channel Settings Should You Actually Use?

Use case Recommended codec Bitrate Sample rate Channels
Single-speaker talk / webinar / podcast AAC-LC (HLS/RTMP) or Opus (WebRTC) 96kbps AAC / 32-48kbps Opus 44.1kHz or 48kHz Mono or stereo
Multi-speaker panel / town hall AAC-LC 128kbps 48kHz Stereo
Music / DJ set / concert AAC-LC 160-192kbps 48kHz Stereo
Gaming commentary (voice + game audio mix) AAC-LC (RTMP) 128-160kbps 48kHz Stereo
Low-latency WebRTC interactive session Opus 32-64kbps 48kHz Mono or stereo

Sample rate is worth calling out on its own: 48kHz is the safer default across the board in 2026, since it’s what WebRTC, most modern encoders, and Opus itself are built around internally (Opus always processes internally at 48kHz regardless of the input rate you feed it). 44.1kHz still works fine for AAC-only HLS/RTMP pipelines if that’s what your source audio interface outputs, but there’s no quality benefit to resampling down to it on a fresh setup.

Frequently Asked Questions

Can I use Opus for RTMP streaming?
No. RTMP’s spec and every common RTMP ingest server — Wowza, NGINX-RTMP, and Ant Media — require AAC (or legacy MP3) audio. Opus is not a supported RTMP audio codec, so OBS and other encoders always send AAC over an RTMP connection regardless of any WebRTC settings elsewhere in your pipeline.

Does YouTube or Twitch accept Opus audio on ingest?
No. Both platforms’ RTMP/RTMPS ingest requires AAC-LC audio. Opus only comes into play on the WebRTC side of a pipeline, such as a low-latency preview or an Ant Media WebRTC output, not on the RTMP ingest path to YouTube or Twitch.

What bitrate should I use for AAC audio in a live stream?
128-160kbps stereo AAC-LC is standard for HLS or RTMP delivery of music or multi-speaker content. 96kbps AAC-LC is acceptable for single-speaker talk formats such as webinars or podcasts, where file size and bandwidth matter more than full fidelity.

Is Opus supported in every browser for WebRTC?
Yes. Chrome, Firefox, Safari, and Edge all ship a mandatory built-in Opus decoder as part of their WebRTC implementations, so there is no browser-compatibility risk on the WebRTC audio path specifically.

Do I need to manually choose between Opus and AAC myself?
Usually not. Your streaming engine picks the codec based on the delivery protocol — Opus for WebRTC, AAC for RTMP and HLS — and when you’re bridging protocols, engines like Ant Media and Wowza transcode between the two automatically without any manual configuration.

Get the Right Codec Handled for You

Audio codec mismatches are one of the quieter causes of failed streams — a WebRTC gateway expecting Opus and getting AAC, or an HLS player choking on an fMP4-only Opus track with no AAC fallback. Every engine we host pre-installed — Wowza, Ant Media, NGINX-RTMP, Red5, Flussonic, and MistServer — already ships configured with the correct default codec behavior for its protocol, and Wowza/Ant Media instances handle the AAC-to-Opus transcoding automatically when you bridge RTMP and WebRTC. See our guides on WebRTC streaming with Ant Media and multi-audio-track live streaming for related setup detail, or check pricing for a plan that fits your channel count.

Get a pre-installed streaming engine VPS from StreamingVPS.com — go live in 60 seconds.

Leave a Reply

Your email address will not be published. Required fields are marked *