xbmc / inputstream.adaptive

kodi inputstream addon for several manifest types
Other
443 stars 239 forks source link

Atmos + 5.1 in same set support #1577

Open matthuisman opened 3 weeks ago

matthuisman commented 3 weeks ago

Describe the feature

In Kodi 21 - the below still only adds the 5.1 rep set. The Atmos is no where to be found. I've had to keep my proxy enabled that pulls out the atmos into its own adaptionset

<AdaptationSet subsegmentAlignment="true" subsegmentStartsWithSAP="1" id="2" lang="en" contentType="audio">
    <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="01008cdc-b959-8130-cf60-da54230e5e65" value="cenc"/>
    <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95">
        <cenc:pssh>AAA...</cenc:pssh>
    </ContentProtection>
    <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
        <cenc:pssh>AAA....</cenc:pssh>
    </ContentProtection>
    <Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="258610" codecs="ec-3" id="a11">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="6"/>
        <BaseURL>a/1_791d8c/a11.mp4</BaseURL>
        <SegmentBase timescale="48000" presentationTimeOffset="390379990" indexRange="658-30593">
            <Initialization range="0-657"/>
        </SegmentBase>
    </Representation>
    <Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="642610" codecs="ec-3" id="a13">
        <SupplementalProperty schemeIdUri="tag:dolby.com,2018:dash:EC3_ExtensionType:2018" value="JOC"/>
        <SupplementalProperty schemeIdUri="tag:dolby.com,2018:dash:EC3_ExtensionComplexityIndex:2018" value="16"/>
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="6"/>
        <BaseURL>a/1_791d8c/a13.mp4</BaseURL>
        <SegmentBase timescale="48000" presentationTimeOffset="390379990" indexRange="660-30595">
            <Initialization range="0-659"/>
        </SegmentBase>
    </Representation>
</AdaptationSet>

Motivation

support atmos correctly in MAX

Are you willing to contribute in development?

No

Should a possible backport be considered?

No

CastagnaIT commented 3 weeks ago

you need to verify if both representation's are atmos before, have you verified if the first representation its really an atmos despite its missing the SupplementalProperty JOC ? it could be a oversight of the provider that forgot only to add JOC on repr?

if not, on dolby specs the normal 5.1 stream and atmos stream must be placed on differents AdaptationSet's

matthuisman commented 3 weeks ago

the first rep is not atmos. 2nd rep is atmos

HBO does this. If its not actually correct - I can keep with my method to pull the ATMOS to its own adapation set :)

CastagnaIT commented 3 weeks ago

i have investigated a bit better so in the past i took as reference this example: 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_xmp_single_av_atmos.html but that example was not multibitrate, and i didn't notice that exists other examples, the documentation is not so explicit about this...

this is a multibitrate example https://ott.dolby.com/OnDelKits/DDP/Dolby_Digital_Plus_Online_Delivery_Kit_v1.5/Test_Signals/example_streams/DASH/OnDemand/MPD/Holi_25fps_example_1_clean.mpd thats similar to your mpd

for multibitrate cases when the bitrate start to decreasing, the atmos characteristics start to be less or none atmos requires high bitrates to be fully supported in a stream

so imo it's right to keep everything in a single AdaptationSet since at lower bitrate (for worst network condition cases) is equal to less or none characteristics

if network condition is good ISA should be able to select the higher bandwidth audio repr (bandwidth="642610" in your mpd) and set atmos label to the audio track using the "fixed resolution" stream selection, it force select the higher audio bitrate so atmos label should be shown, this can be a sure confirmation

but yes, if you want to allow users to select lower bitrates streams from GUI that are without atmos characteristics, it is right to hack the manifest to split streams in to differents AdaptationSet's, but why?