Skip to content

Different role flags combined in one TrackGroup #2148

@git1904

Description

@git1904

Hello
I have this Question to make for some time now about this error playing an MPD

``

java.lang.IllegalStateException: Different role flags combined in one TrackGroup: '0' (track 0) and '100000000000010' (track 1)
at androidx.media3.common.TrackGroup.logErrorMessage(TrackGroup.java:233)
at androidx.media3.common.TrackGroup.verifyCorrectness(TrackGroup.java:208)
at androidx.media3.common.TrackGroup.(TrackGroup.java:96)
at androidx.media3.exoplayer.dash.DashMediaPeriod.buildPrimaryAndEmbeddedTrackGroupInfos(DashMediaPeriod.java:708)
at androidx.media3.exoplayer.dash.DashMediaPeriod.buildTrackGroups(DashMediaPeriod.java:529)
at androidx.media3.exoplayer.dash.DashMediaPeriod.(DashMediaPeriod.java:160)
at androidx.media3.exoplayer.dash.DashMediaSource.createPeriod(DashMediaSource.java:580)
at androidx.media3.exoplayer.source.MaskingMediaPeriod.createPeriod(MaskingMediaPeriod.java:131)
at androidx.media3.exoplayer.source.MaskingMediaSource.onChildSourceInfoRefreshed(MaskingMediaSource.java:214)
at androidx.media3.exoplayer.source.WrappingMediaSource.onChildSourceInfoRefreshed(WrappingMediaSource.java:154)
at androidx.media3.exoplayer.source.WrappingMediaSource.onChildSourceInfoRefreshed(WrappingMediaSource.java:49)
at androidx.media3.exoplayer.source.CompositeMediaSource.lambda$prepareChildSource$0$androidx-media3-exoplayer-source-CompositeMediaSource(CompositeMediaSource.java:117)
at androidx.media3.exoplayer.source.CompositeMediaSource$$ExternalSyntheticLambda0.onSourceInfoRefreshed(D8$$SyntheticClass:0)
at androidx.media3.exoplayer.source.BaseMediaSource.refreshSourceInfo(BaseMediaSource.java:90)
at androidx.media3.exoplayer.dash.DashMediaSource.processManifest(DashMediaSource.java:937)
at androidx.media3.exoplayer.dash.DashMediaSource.onUtcTimestampResolved(DashMediaSource.java:864)
at androidx.media3.exoplayer.dash.DashMediaSource.access$500(DashMediaSource.java:99)
at androidx.media3.exoplayer.dash.DashMediaSource$1.onInitialized(DashMediaSource.java:852)
at androidx.media3.exoplayer.util.SntpClient$NtpTimeCallback.onLoadCompleted(SntpClient.java:325)
at androidx.media3.exoplayer.upstream.Loader$LoadTask.handleMessage(Loader.java:487)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.os.HandlerThread.run(HandlerThread.java:67)

The MPD xml have the following AdaptationSets, Representations and Roles ( removed some xml to make it better readable it contains DRM )

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:cenc="urn:mpeg:cenc:2013"
    xmlns:mspr="urn:microsoft:playready"
    profiles="urn:mpeg:dash:profile:isoff-live:2011"
    type="dynamic"
    availabilityStartTime="1970-01-01T00:00:00Z"
    publishTime="2025-02-15T01:56:56Z"
    timeShiftBufferDepth="PT20S"
    minimumUpdatePeriod="PT2S"
    maxSegmentDuration="PT2.006S"
    minBufferTime="PT6S">
    <Period id="1" start="PT0S">
        <AdaptationSet id="1" group="1" bitstreamSwitching="true" segmentAlignment="true" contentType="video" mimeType="video/mp4" maxWidth="1280" maxHeight="720" par="16:9" maxFrameRate="50" startWithSAP="1">
            <SegmentTemplate timescale="10000000" media="S!d2EPREFTSF9BVkNfRlVMTEhEEgJU.v...wEWBJ8_/QualityLevels($Bandwidth$)/Fragments(video=$Time$)">
                <SegmentTimeline>
                    <S t="17395845890304560" d="20000000" r="9"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation id="dzEUrgef" bandwidth="503316" codecs="avc1.4d4029" width="384" height="216" frameRate="25" sar="1:1"/>
            <Representation id="dzF6FA6f" bandwidth="922746" codecs="avc1.4d4029" width="640" height="360" frameRate="25" sar="1:1"/>
            <Representation id="dzHhehif" bandwidth="1604321" codecs="avc1.4d4029" width="704" height="396" frameRate="25" sar="1:1"/>
            <Representation id="dzEAADCf" bandwidth="3145728" codecs="avc1.640029" width="1280" height="720" frameRate="50" sar="1:1"/>
        </AdaptationSet>
        <AdaptationSet id="2" group="32" bitstreamSwitching="true" segmentAlignment="true" contentType="video" mimeType="video/mp4" maxWidth="1280" maxHeight="720" par="16:9" maxFrameRate="50" startWithSAP="1" codingDependency="false">
            <EssentialProperty schemeIdUri="http://dashif.org/guidelines/trickmode" value="1"/>
            <Role schemeIdUri="urn:mpeg:dash:role:2011" value="alternate"/>
            <SegmentTemplate timescale="10000000" media="S!d2EPREFTSF9BVkNfRlVMTEhEEgJU.v...wEWBJ8_/QualityLevels($Bandwidth$)/Fragments(trickmode=$Time$)">
                <SegmentTimeline>
                    <S t="17395845890304560" d="20000000" r="9"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation id="trickmodedzEUrgef" bandwidth="503316" codecs="avc1.4d4029" width="384" height="216" frameRate="1" sar="1:1" maxPlayoutRate="25"/>
            <Representation id="trickmodedzF6FA6f" bandwidth="922746" codecs="avc1.4d4029" width="640" height="360" frameRate="1" sar="1:1" maxPlayoutRate="25"/>
            <Representation id="trickmodedzHhehif" bandwidth="1604321" codecs="avc1.4d4029" width="704" height="396" frameRate="1" sar="1:1" maxPlayoutRate="25"/>
            <Representation id="trickmodedzEAADCf" bandwidth="3145728" codecs="avc1.640029" width="1280" height="720" frameRate="1" sar="1:1" maxPlayoutRate="50"/>
        </AdaptationSet>
        <AdaptationSet id="3" group="2" bitstreamSwitching="true" segmentAlignment="true" contentType="audio" mimeType="audio/mp4" lang="por">
            <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
            <SegmentTemplate timescale="48000" media="S!d2EPREFTSF9BVkNfRlVMTEhEEgJU.v...wEWBJ8_/QualityLevels($Bandwidth$)/Fragments(audio_482_por=$Time$)">
                <SegmentTimeline>
                    <S t="83500060274012" d="96256"/>
                    <S d="95232"/>
                    <S d="96256" r="2"/>
                    <S d="95232"/>
                    <S d="96256" r="2"/>
                    <S d="95232"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation id="dyHiAZ8." bandwidth="96000" codecs="mp4a.40.2" audioSamplingRate="48000"/>
        </AdaptationSet>
        <AdaptationSet id="4" group="2" bitstreamSwitching="true" segmentAlignment="true" contentType="audio" mimeType="audio/mp4" lang="AUD">
            <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            <Role schemeIdUri="urn:mpeg:dash:role:2011" value="alternate"/>
            <SegmentTemplate timescale="48000" media="S!d2EPREFTSF9BVkNfRlVMTEhEEgJU.v...wEWBJ8_/QualityLevels($Bandwidth$)/Fragments(audio_483_AUD=$Time$)">
                <SegmentTimeline>
                    <S t="83500060274012" d="96256"/>
                    <S d="95232"/>
                    <S d="96256" r="2"/>
                    <S d="95232"/>
                    <S d="96256" r="2"/>
                    <S d="95232"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation id="dyHjAZ8." bandwidth="96000" codecs="mp4a.40.2" audioSamplingRate="48000"/>
        </AdaptationSet>
        <AdaptationSet id="5" group="8" bitstreamSwitching="true" segmentAlignment="true" contentType="text" mimeType="application/mp4" lang="887">
            <Role schemeIdUri="urn:mpeg:dash:role:2011" value="alternate"/>
            <SegmentTemplate timescale="10000000" media="S!d2EPREFTSF9BVkNfRlVMTEhEEgJU.v...wEWBJ8_/QualityLevels($Bandwidth$)/Fragments(887_0=$Time$)">
                <SegmentTimeline>
                    <S t="17395845890304560" d="20000000" r="9"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation id="dxFknw.." bandwidth="100" codecs="stpp"/>
        </AdaptationSet>
        <AdaptationSet id="6" group="8" bitstreamSwitching="true" segmentAlignment="true" contentType="text" mimeType="application/mp4" lang="885">
            <Role schemeIdUri="urn:mpeg:dash:role:2011" value="alternate"/>
            <SegmentTemplate timescale="10000000" media="S!d2EPREFTSF9BVkNfRlVMTEhEEgJU.v...wEWBJ8_/QualityLevels($Bandwidth$)/Fragments(885_1=$Time$)">
                <SegmentTimeline>
                    <S t="17395845890304560" d="20000000" r="9"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation id="dxFlnw.." bandwidth="101" codecs="stpp"/>
        </AdaptationSet>
    </Period>
</MPD>

I don't understand exactly what the error means and if this can be "ignored"
I did search before come here and didnt find anything related to this, i saw that the expection is not throwing error it just print the error but the video is not playing.
I know that editing the mpd on-fly works by creating a custom datasource to remove the <Role tags... but is that the only way? :(

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions