Dolby Atmos support

How Dolby Atmos (E-AC-3 JOC) is detected and signaled

When ingesting E-AC-3 audio tracks, Dolby Atmos is detected by parsing the JOC (Joint Object Coding) extension from the stream and signaling to content_info.json.

Detection by source type

Source typeDetection method
MP4Read dec3 box from the file’s sample entry
MPEG2-TSParse addbsi field from E-AC-3 syncframes
DASH On-Demand/HLS fMP4Read dec3 box from the init segment
Live recording (CBM)Propagate existing codec_specific from content_info.json

Manifest-level signaling (DASH SupplementalProperty, HLS CHANNELS) is not used for detection because it derives from the dec3 box and may not always be present.

Output

When JOC is detected, the 2-byte JOC extension (flag_ec3_extension_type_a + complexity_index_type_a) is written into the dec3 box of the output CMAF init segment. Downstream consumers (repackaging, players) can read Atmos info directly from the init segment without parsing the elementary stream.

[ec-3] size=19
  channel_count = 2
  sample_size = 16
  sample_rate = 48000
  [dec3] size=15
    data_rate = 192
    num_ind_sub = 0
    [substream 0]
      fscod = 0 (48000 Hz)
      bsid = 16
      bsmod = 0
      acmod = 7 (L, C, R, Ls, Rs)
      lfeon = 1
    flag_ec3_extension_type_a = 1
    complexity_index_type_a = 16

For standard E-AC-3 without Atmos, flag_ec3_extension_type_a and complexity_index_type_a are absent from the dec3 box.

Also, extension_type and complexity_index are added to the codec_specific field of the audio variant in content_info.json:

"variants": [
  {
    "media_type": "audio",
    "subtype": "ec-3",
    "name": "audio_ec-3_en_768kbps",
    "codec_specific": {
      "channel_configuration": "f801",
      "extension_type": "JOC",
      "complexity_index": "16"
    }
  }
]

For standard E-AC-3 without Atmos, those boxes/fields are absent from init segments and content_info.json. The channel_configuration field is always present for AC-3/E-AC-3 tracks regardless of Atmos.

Limitations

  • Backward-compatible carriage, e.g. independent substream is AC-3 and the dependent substream is E-AC-3, is not supported for JOC detection.
  • E-AC-3 in packed audio of HLS is not supported for JOC detection.