← Immersive Audio Model and Formats (IAMF) decoding support

v153 · media · audio · shipped

the iamf.* codecs parameter

The codecs string that tells MSE an MP4 source contains an IAMF immersive-audio track — its grammar, profile fields, sub-codec elements, and exactly how Chromium's parser accepts or rejects it. Defined by IAMF §6.4 on top of RFC 6381; parsed in Chromium by ParseIamfCodecId. Identity: chromestatus.com/feature/5113656292540416.

Support gating applies

This string only reports supported where the IAMF build and the kIamfAudioDecoding runtime feature allow it — see the overview warn-block for the current flag state and the v152/v153 dual listing.

grammar

Per IAMF §6.4, the codecs parameter string for an IAMF track SHALL be:

iamf.<primary_profile>.<additional_profile>.<sub-codec codecs elements>
  1. The first element is the fourcc iamf.
  2. The second element indicates the primary_profile — three digits in the range 0 to 255.
  3. The third element indicates the additional_profile — three digits in the range 0 to 255.
  4. The fourth element (and any additional elements) SHALL be the elements of the codecs parameter string the stream would carry in its own track, unencapsulated.

The spec's own examples: iamf.xxx.yyy.Opus, iamf.xxx.yyy.mp4a.40.2, iamf.xxx.yyy.fLaC, iamf.xxx.yyy.ipcm, where xxx/yyy are the three-digit profile fields.

Source: IAMF §6.4 Codecs Parameter String (quoted); RFC 6381.

field reference

FieldContract
primary_profileThree decimal digits, 0–255. Values: 0 = IA Simple Profile, 1 = IA Base Profile, 2 = IA Base-Enhanced Profile (added in IAMF v1.1.0), 3–255 reserved for future profiles. Simple and Base comply with IAMF v1.0.0-errata.
additional_profileSame three-digit mapping. An additional profile the IA Sequence complies with; if the sequence only complies with the primary profile, this field SHALL be set to the same value as primary_profile (hence e.g. iamf.000.000.opus).
sub-codec element(s)The codecs string of the audio stream as if carried in its own track: opus (Opus), mp4a.40.2 (AAC-LC — object type indication 40, audio object type 2), fLaC (FLAC), ipcm (LPCM).
Source: IAMF §6.4; profile values per IAMF §4 Profiles and the Codec Config OBU profile semantics.

chromium parser behavior

Chromium's ParseIamfCodecId (compiled when IAMF audio is enabled) accepts a string as IAMF when:

Strings that fail parsing are simply not recognized as IAMF (support queries fall through to “unrecognized codec id”). A code comment (crbug.com/438106645) records that profile handling after parsing is still to be completed, “especially if [IAMF streams] end up containing xHE-AAC audio” — so profile fields currently identify the family rather than gate fine-grained capability.

Source: audio_codecs.cc — ParseIamfCodecId; mime_util_internal.cc — fetched 2026-07-29.

examples

StringReading
iamf.000.000.opusSimple profile only, Opus substream — the minimal modern spelling
iamf.001.001.mp4a.40.2Base profile, AAC-LC substream
iamf.000.000.fLaCSimple profile, FLAC substream (case per the spec's example)
iamf.000.000.ipcmSimple profile, LPCM (uncompressed) substream
iamf.002.002.opusBase-Enhanced profile (IAMF v1.1.0), Opus substream

Rejected by the Chromium parser (non-exhaustive): iamf.0.0.opus (profile fields must be three digits), iamf.256.000.opus (profile > 255), iamf.000.000.vorbis (sub-codec not in the accepted set), iamf.000.000.mp4a (mp4a requires the 40.2 fields), and any string with extra elements beyond the length cap.

// Feature-detect a specific packaging before fetching media:
const candidates = [
  'audio/mp4; codecs="iamf.000.000.opus"',
  'audio/mp4; codecs="iamf.001.001.mp4a.40.2"',
];
const supported = candidates.find((m) => MediaSource.isTypeSupported(m));
if (!supported) throw new Error('no supported IAMF packaging');
const sourceBuffer = mediaSource.addSourceBuffer(supported);
Source: grammar per IAMF §6.4; acceptance/rejection behavior per ParseIamfCodecId.

usage context

The parameter appears wherever an MP4 MIME type is declared for MSE: MediaSource.isTypeSupported(mime) support queries and MediaSource.addSourceBuffer(mime). Chromium registers the iamf and iamf.* codec patterns for both audio/mp4 and video/mp4 containers (stream_parser_factory.cc), so an IAMF audio track can ride alongside video in the same MP4 or be delivered audio-only. It has no meaning for direct file playback (<audio src>), which does not route through the IAMF-capable parser in the sources read — delivery is MSE-only, matching the explainer’s framing (“zero changes to existing MSE workflows”).

Source: stream_parser_factory.cc; mime_util_internal.cc.

compatibility

Interim table. No BCD or web-features entry exists for the iamf codecs string (2026-07-29); rows are compiled from the linked primary sources.

BrowserSupportEvidence
Chrome153 (desktop, Android, WebView) per listing; flag-state caveat appliesmilestone=153 listing; flag state
EdgeNot separately reportedChromium-based; no separate position on the record
FirefoxNo signalChromeStatus API record
SafariNo signalChromeStatus API record
Source: links above, fetched 2026-07-29.

security and privacy

Source: audio_codecs.cc; mime_util_internal.cc.

see also