Skip to content

Dolby <AudioChannelConfiguration value="F800"> results in an exception #688

@dimitar71

Description

@dimitar71

Version

Media3 1.1.1

More version details

All Exoplayer 2.18.7+ versions have this problem.

Devices that reproduce the issue

  • Chromecast
  • Nvidia Shield
  • Sony TV with Android TV
  • majority of Android TV-related boxes

Devices that do not reproduce the issue

  • Mobile-related devices, e.g. Pixel phones

Reproducible in the demo app?

Not tested

Reproduction steps

Find a schemeIdUri="tag:dolby.com,2014:dash:audio_channel_configuration:2011" manifest which value is not one of the supported ones in DashManifestParser.parseDolbyChannelConfiguration():

  • "4000" - 1 audio channel
  • "a000" - 2 audio channels
  • "f801" - 6 audio channels
  • "fa01" - 8 audio channels

For example value="F800" in:
<AudioChannelConfiguration schemeIdUri="tag:dolby.com,2014:dash:audio_channel_configuration:2011" value="F800"></AudioChannelConfiguration>

Expected result

A good approach would be parsing and returning a valid number, not Format.NO_VALUE.

Actual result

This results in a 100% reproducible IllegalArgumentException from within Exoplayer.

This may need to be parsed properly, and return a safe audio channels value by default, e.g. 2.
Also, it is a good idea to be properly documented in the Exoplayer documentation/references.

For us, F800 defines 5-channel audio.

Based on https://ott.dolby.com/OnDelKits/DDP/Dolby_Digital_Plus_Online_Delivery_Kit_v1.5/Documentation/Content_Creation/SDM/help_files/topics/ddp_mpeg_dash_c_mpd_auchlconfig.html, Alternative AudioChannelConfiguration scheme section:

The value element is a four-digit hexadecimal representation of the 16-bit bit field, which describes the channel assignment of the referenced Dolby Digital Plus bitstream according to the table. Bit 0, which indicates the presence of the L channel, is the most-significant bit of the AudioChannelConfiguration descriptor.

This means any value, not just above 4 would be valid.

Also, in DashManifestParser.parseDolbyChannelConfiguration(), the coverage is 1, 2, 6 and 8 audio channels.
It does not cover 5 and 7 audio channels for example.

One option would be checking range of values rather one value per channel configuration.

Media

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011" xmlns:cenc="urn:mpeg:cenc:2013" type="dynamic" availabilityStartTime="1970-01-01T00:00:00Z" publishTime="2023-09-30T06:30:19Z" minimumUpdatePeriod="PT2S" minBufferTime="PT2S" timeShiftBufferDepth="PT21600S">
<Period id="id_PT1695835287S" start="PT1695835287.000S">
  <AdaptationSet id="0" mimeType="video/mp4" contentType="video" segmentAlignment="true" startWithSAP="1">
  <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="1419d680-1dd2-11b2-8054-024152444953"/>
  <ContentProtection value="Widevine" schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
  <cenc:pssh>AAAAOHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABgSEBQZ1oAd0hGygFQCQVJESVNI49yVmwY=</cenc:pssh>
  </ContentProtection>
    <SegmentTemplate presentationTimeOffset="16958352870000555" timescale="10000000" initialization="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t16958352870000555_init.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2" media="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t$Time$.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2">
      <SegmentTimeline>
        <S d="20020000" t="16960535977927555" r="899"/>
      </SegmentTimeline>
    </SegmentTemplate>
    <Representation id="video_0" bandwidth="5240000" width="1280" height="720" codecs="avc1.640020" scanType="progressive"></Representation>
    <Representation id="video_1" bandwidth="2880000" width="960" height="540" codecs="avc1.64001F" scanType="progressive"></Representation>
    <Representation id="video_2" bandwidth="2060000" width="854" height="480" codecs="avc1.4D401F" scanType="progressive"></Representation>
    <Representation id="video_3" bandwidth="1400000" width="640" height="360" codecs="avc1.4D401E" scanType="progressive"></Representation>
    <Representation id="video_4" bandwidth="980000" width="480" height="270" codecs="avc1.42E015" scanType="progressive"></Representation>
    <Representation id="video_5" bandwidth="580000" width="320" height="180" codecs="avc1.42E00D" scanType="progressive"></Representation>
    <Representation id="video_6" bandwidth="3700000" width="1280" height="720" codecs="avc1.64001F" scanType="progressive"></Representation>
  </AdaptationSet>
  <AdaptationSet id="1" mimeType="audio/mp4" contentType="audio" lang="en" segmentAlignment="true" startWithSAP="1">
    <AudioChannelConfiguration schemeIdUri="tag:dolby.com,2014:dash:audio_channel_configuration:2011" value="F800"></AudioChannelConfiguration>
  <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="1419d680-1dd2-11b2-8054-024152444953"/>
  <ContentProtection value="Widevine" schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
  <cenc:pssh>AAAAOHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABgSEBQZ1oAd0hGygFQCQVJESVNI49yVmwY=</cenc:pssh>
  </ContentProtection>
    <SegmentTemplate presentationTimeOffset="16958352870000555" timescale="10000000" initialization="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t16958352870000555_init.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2" media="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t$Time$.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2">
      <SegmentTimeline>
        <S d="22400000" t="16960535979733777" r="1"/>
        <S d="15680000" t="16960553901973777"/>
        <S d="22400000" t="16960553917653777" r="1"/>
        <S d="15680000" t="16960553962453777"/>
        <S d="22400000" t="16960553978133777"/>
      </SegmentTimeline>
    </SegmentTemplate>
    <Representation id="audio1299_0" bandwidth="400000" codecs="ac-3" audioSamplingRate="48000"></Representation>
  </AdaptationSet>
  <AdaptationSet id="2" mimeType="audio/mp4" contentType="audio" lang="en" segmentAlignment="true" startWithSAP="1">
    <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
  <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="1419d680-1dd2-11b2-8054-024152444953"/>
  <ContentProtection value="Widevine" schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
  <cenc:pssh>AAAAOHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABgSEBQZ1oAd0hGygFQCQVJESVNI49yVmwY=</cenc:pssh>
  </ContentProtection>
    <SegmentTemplate presentationTimeOffset="16958352870000555" timescale="10000000" initialization="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t16958352870000555_init.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2" media="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t$Time$.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2">
      <SegmentTimeline>
        <S d="23466666" t="16960535978227111"/>
        <S d="11733333" t="16960553784627111"/>
        <S d="23466667" t="16960553796360444"/>
        <S d="23466666" t="16960553819827111"/>
        <S d="14080000" t="16960553843293777"/>
        <S d="23466667" t="16960553857373777" r="1"/>
        <S d="11733333" t="16960553904307111"/>
        <S d="23466667" t="16960553916040444"/>
        <S d="23466666" t="16960553939507111"/>
        <S d="14080000" t="16960553962973777"/>
        <S d="23466667" t="16960553977053777"/>
      </SegmentTimeline>
    </SegmentTemplate>
    <Representation id="audio1300_0" bandwidth="100000" codecs="mp4a.40.2" audioSamplingRate="48000"></Representation>
  </AdaptationSet>
  <AdaptationSet id="3" mimeType="video/mp4" contentType="video" segmentAlignment="true" startWithSAP="1">
   <EssentialProperty schemeIdUri="http://dashif.org/guidelines/trickmode" value="0" />
    <SegmentTemplate presentationTimeOffset="16958352870000555" timescale="10000000" initialization="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t16958352870000555_init.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2" media="h_0803afc9add619e106d0f7ace2467f0ae1_$RepresentationID$_$Bandwidth$_t$Time$.mp4?device_profile=dash_cenc_verimatrix%26seg_size=2">
      <SegmentTimeline>
        <S d="20020000" t="16960535977927555" r="899"/>
      </SegmentTimeline>
    </SegmentTemplate>
    <Representation id="trk_0" bandwidth="753000" maxPlayoutRate="16" codingDependency="false" width="1280" height="720" codecs="avc1.64001F" frameRate="19/30" scanType="progressive"></Representation>
  </AdaptationSet>
</Period>
<UTCTiming schemeIdUri="urn:mpeg:dash:utc:direct:2014" value="2023-09-30T06:29:57Z"/>
</MPD>

Bug Report

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions