← Chrome 153 reference

v153 · media · audio · shipped

Immersive Audio Model and Formats (IAMF) decoding support

Limited availability

  • Chrome · 153 (desktop, Android, WebView — milestone listing)
  • Edge · not separately reported (Chromium-based)
  • Firefox · no signal
  • Safari · no signal

Not on the Baseline register: the ChromeStatus API record marks the Web Feature ID as “Missing feature”, a webstatus.dev query returns zero matches, and BCD has no IAMF entry (all verified 2026-07-29).

Native decoding and playback of the Immersive Audio Model and Formats (IAMF) — the Alliance for Open Media's open, royalty-free spatial audio format — inside HTML media elements via Media Source Extensions (MSE). IAMF bitstreams carry channel-based, scene-based, and object-based audio presentations in an MP4 container; the browser demuxes and decodes them with the built-in iamf_tools software decoder and renders to the device's headphone or speaker layout. There is no new JavaScript API: existing MSE workflows gain a new supported codecs string family, iamf.*.

Read before relying on this — dual listing and flag-state caveats Source: media_switches.cc (kIamfAudioDecoding); M153 branch media_switches.cc; media_options.gni; stream_parser_factory.cc; iamf_audio_decoder.cc — all fetched 2026-07-29.

at a glance

What it isBrowser-native decoding of IAMF (Immersive Audio Model and Formats) audio tracks packaged in ISO-BMFF (MP4), exposed through the standard MSE pipeline
Milestone listingChrome 153 — Enabled by default (listing, verified 2026-07-29; also in the v152 listing as a developer trial — see the warn-block)
Developer surfaceNo new JS API. MediaSource.isTypeSupported() and addSourceBuffer() accept audio/mp4/video/mp4 with an iamf.* codecs parameter; playback, controls, and events are the ordinary HTML media element ones
ContainerISO-BMFF MP4; the track's sample description carries an IA Sample Entry (AudioSampleEntry('iamf')) with a mandatory IA Configuration Box (iacb) holding the descriptor OBUs
Profiles0 = Simple, 1 = Base (both per IAMF v1.0.0-errata), 2 = Base-Enhanced (added in v1.1.0); 3–255 reserved
Sub-codecs in IAMFOpus (opus), AAC-LC (mp4a.40.2), FLAC (fLaC), LPCM (ipcm)
RenderingSoftware decode via iamf_tools; output mixed for the device's layout — mono, stereo (incl. binaural for headphones), 5.1, 7.1; 5.1.4 and 7.1.4 only when the separately-gated high-channel-layout support is enabled, otherwise discrete 10/12-channel
Encrypted contentNot supported — encrypted configurations are rejected during decoder initialization
WPTNone found (2026-07-29); Chromium exercises the path with its own test bitstreams
ChromeStatus5113656292540416 — Immersive Audio Model and Formats (IAMF) decoding support (Blink component Blink>Media>Audio; tracking bug crbug.com/535279329)
Source: chromestatus.com/feature/5113656292540416; AOM IAMF specification; Chromium implementation files linked per-section.

reference routes

the iamf.* codecs parameter

Full grammar of the codecs string — profile fields, sub-codec elements, valid and invalid examples, and how Chromium parses it for isTypeSupported().

why it exists

Before native IAMF support, sites wanting immersive audio had two main options, per the feature explainer:

IAMF is the Alliance for Open Media's answer: an open, royalty-free container-and-model standard for channel-based, scene-based (Ambisonics), and object-based audio, with a reference implementation (iamf-tools) that Chrome embeds. Native decoding lets the browser render one standard bitstream to arbitrary headphone and surround-speaker setups, so media providers only need to package content with an IAMF-enabled encoder. The explainer notes that initial support focuses on royalty-free multichannel beds and surround audio, with native object-based streams (elements repositioned in real time) planned for future iterations.

Source: Native IAMF MP4 Playback explainer; ChromeStatus API record — summary.

how it works: container and playback path

IAMF reaches the renderer as an audio track inside a standard MP4 file, per IAMF §6 (IAMF in ISO-BMFF):

  1. The track's sample description box (stsd) carries an IA Sample EntryAudioSampleEntry('iamf') — which contains a mandatory IA Configuration Box (iacb, configurationVersion = 1) holding the sequence's descriptor OBUs. (The explainer loosely calls iacb the “sample entry descriptor box”; per the spec the sample entry type is iamf and iacb is the configuration box inside it.)

The encapsulation in spec syntax (IAMF §6.2, quoted):

class IASampleEntry extends AudioSampleEntry('iamf') {
  IAConfigurationBox ia_configuration_box;
}

class IAConfigurationBox extends Box('iacb') {
  unsigned int (8) configurationVersion = 1;
  leb128() configOBUs_size;
  unsigned int (8 x configOBUs_size) configOBUs;
}

Playback path, end to end:

  1. The page appends MP4 segments through MSE: MediaSource.isTypeSupported()addSourceBuffer()SourceBuffer.appendBuffer(). When the declared codecs string matches iamf/iamf.*, Chromium's MSE stream-parser factory builds its MP4 stream parser with has_iamf = true (stream_parser_factory.cc).
  2. The demuxed IA Samples feed IamfAudioDecoder, a software decoder built on the bundled iamf_tools library (built in by default — media_use_iamf_tools = true in media_options.gni; no platform/hardware IAMF path is enabled, enable_platform_iamf_audio = false).
  3. The decoder renders to a target hardware layout: it decodes for the device's output layout, emitting signed-32-bit PCM, and records whether it down-mixed, up-mixed, or passed the mix through. Direct file playback (<audio src>) does not use this path — the FFmpeg demuxer has no IAMF handling in the sources read — so delivery is via MSE.
Source: IAMF §6 ISO-BMFF encapsulation; stream_parser_factory.cc; mime_util_internal.cc; iamf_audio_decoder.cc; media_options.gni — fetched 2026-07-29.

syntax: the codecs parameter

The developer-facing string is the codecs parameter of the MSE MIME type, defined by IAMF §6.4 on top of RFC 6381:

iamf.<primary_profile>.<additional_profile>.<sub-codec elements>

# e.g. IAMF (simple profile only) carrying an Opus substream:
audio/mp4; codecs="iamf.000.000.opus"

Profile fields are three digits each (0–255): 0 Simple, 1 Base, 2 Base-Enhanced, 3–255 reserved. The sub-codec element is the codecs string the stream would have outside IAMF: opus, mp4a.40.2 (AAC-LC), fLaC, or ipcm. The full field-by-field grammar, Chromium's parser rules, and worked valid/invalid strings are on the child page: the iamf.* codecs parameter.

Source: IAMF §6.4 Codecs Parameter String; audio_codecs.cc — ParseIamfCodecId.

decoding and rendering behavior

Once a stream initializes, IamfAudioDecoder (iamf_audio_decoder.cc) imposes a concrete behavior contract:

AspectBehavior (from source)
Initialization rejectsNon-IAMF codec (kUnsupportedCodec); any encrypted configuration (kUnsupportedEncryptionMode); missing descriptor extra-data (kUnsupportedConfig, “requires extra_data descriptors”)
Output formatSigned 32-bit little-endian PCM (kInt32LittleEndian is verified at init)
Output layoutsIAMF output layouts map to Chromium channel layouts: mono (Sound System Extension 0.1.0); stereo (ITU 0.2.0 and IAMF binaural — headphone rendering arrives as stereo); 5.1 (Sound System B 0.5.0); 7.1 (Sound System I 0.7.0)
High channel counts5.1.4 (Sound System D 4.5.0) and 7.1.4 (Sound System J 4.7.0) map to the high-channel layouts only when kEnableHighChannelLayouts is enabled — itself FEATURE_DISABLED_BY_DEFAULT at trunk (2026-07-29); otherwise the stream falls back to discrete 10- or 12-channel output
Mix reportingDecoder records down-mix / up-mix / no-mix against the configured output layout via UMA; other IAMF layouts log an “Unsupported IAMF layout” warning and fail initialization
Sample-rate / frame limitsOutput sample rate must sit within Chromium's global audio limits; zero or oversized frame sizes are rejected

Decoder support for AudioCodec::kIAMF is compiled in when IAMF audio is enabled at build time (IsDecoderIamfBuiltInAudioType() in supported_types.cc) and — per media_options.gni — gated at runtime by the kIamfAudioDecoding feature (see the warn-block for its current state).

Source: iamf_audio_decoder.cc; supported_types.cc; media_switches.cc — fetched 2026-07-29.

examples

Capability detection and MSE setup for an IAMF (simple profile, Opus substream) audio track:

const mime = 'audio/mp4; codecs="iamf.000.000.opus"';

if (!MediaSource.isTypeSupported(mime)) {
  // No IAMF decoding in this browser/build — fall back to a flat mix.
  throw new Error('IAMF playback not supported');
}

const mediaSource = new MediaSource();
const audio = document.querySelector('audio');
audio.src = URL.createObjectURL(mediaSource);

mediaSource.addEventListener('sourceopen', async () => {
  const sourceBuffer = mediaSource.addSourceBuffer(mime);
  const segment = await fetch('/media/immersive-segment.mp4');
  sourceBuffer.appendBuffer(await segment.arrayBuffer());
  sourceBuffer.addEventListener('updateend', () => audio.play(), { once: true });
}, { once: true });

Try real bitstreams: Chromium's own test files include an IAMF stereo and an IAMF 7.1.4 sample, and AOMedia hosts an IAMF binaural web demo (verified 200, 2026-07-29). The sister Chrome Platform Showcase route for this feature returned 404 at fetch time (2026-07-29), so no live embed is included here — the snippets above and the AOMedia demo are the runnable path.

Source: snippet follows the standard MSE flow per the explainer (“zero changes to existing MSE workflows”); codec string per IAMF §6.4.

web platform tests

No upstream WPT coverage was found for IAMF playback: there is no IAMF-named test under wpt/media-source, and the mediasource-is-type-supported suite does not enumerate an iamf string (both checked 2026-07-29). Chromium exercises the decoder with its own media test data (the crsrc bitstreams linked above) and the iamf_audio_decoder_unittest.cc unit suite.

Source: repository listings fetched 2026-07-29.

browser compatibility

Interim table. There is no BCD entry for IAMF anywhere under browser-compat-data and no webstatus.dev feature (zero matches, 2026-07-29). Rows below are compiled from the linked primary sources, not from BCD.

BrowserSupportEvidence
Chrome153 (desktop, Android, WebView) — Enabled by default per listing; see flag-state caveatmilestone=153 listing; API record; flag state
EdgeNot separately reportedChromium-based; no separate position on the ChromeStatus record
FirefoxNo signalChromeStatus API record vendor views
SafariNo signalChromeStatus API record vendor views
Source: chromestatus.com/feature/5113656292540416; queries linked above, fetched 2026-07-29.

security and privacy

Source: iamf_audio_decoder.cc; explainer.

specifications

DocumentStatus
AOMedia — Immersive Audio Model and Formats (IAMF)Latest approved version, v1.1.0 (canonical). The ChromeStatus record marks standards maturity “Published standard”. Adds the Base-Enhanced profile (2).
IAMF v1.0.0 (-errata)The version Chromium's codec-string parser cites; Simple (0) and Base (1) profiles comply with it
Native IAMF MP4 Playback — explainerMotivation and MSE-delivery framing; short
RFC 6381 — The 'Codecs' and 'Profiles' ParametersBase grammar the IAMF codecs parameter builds on
Source: documents fetched 2026-07-29.

see also