shaka-project / shaka-packager

A media packaging and development framework for VOD and Live DASH and HLS applications, supporting Common Encryption for Widevine and other DRM Systems.
https://shaka-project.github.io/shaka-packager/
Other
1.9k stars 496 forks source link

Packager Adaptation Set Switching values point to representation IDs instead of Adaptation Set IDs. #1393

Closed vish91 closed 1 month ago

vish91 commented 1 month ago

System info

Operating System: all Shaka Packager Version: latest but also older versions e.g 2.6.6 or before CI/CD rewrite

Issue and steps to reproduce the problem

Packager Command: /bin/packager 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_uhd_hevc_1005.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_uhd_hevc_1005.mp4,drm_label=sd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_uhd_hevc_120.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_uhd_hevc_120.mp4,drm_label=sd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_uhd_hevc_2305.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_uhd_hevc_2305.mp4,drm_label=hd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_uhd_hevc_7005.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_uhd_hevc_7005.mp4,drm_label=uhd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_sdr_110.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_sdr_110.mp4,drm_label=sd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_sdr_1500.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_sdr_1500.mp4,drm_label=sd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_sdr_3000.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_sdr_3000.mp4,drm_label=hd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_sdr_4500.mp4,stream=video,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_sdr_4500.mp4,drm_label=hd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_122_UHD_en-US_2651676_1_eac3_192.mp4,stream=audio,lang=en-US,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_122_UHD_en-US_2651676_1_eac3_192.mp4,drm_label=sd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_122_UHD_en-US_2651676_3_aac_128.mp4,stream=audio,lang=en-US,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_122_UHD_en-US_2651676_3_aac_128.mp4,drm_label=sd,dash_roles=main' 'in=/tmp/2675580/PPCBS_FIRECOUNTRY_122_UHD_fr-FR_2651676_fr_aac_128.mp4,stream=audio,lang=fr,output=/tmp/2675580-out/PPCBS_FIRECOUNTRY_122_UHD_fr-FR_2651676_fr_aac_128.mp4,drm_label=sd,dash_roles=dub' 'in=/tmp/2675580-out/vtt/P4P7LlJERc8kyzNyMbaogfIsTprR_YHz_Bifuf8QnlAQr1cygYQsDCp_1712692994_btc_3.vtt,stream=text,language=en-US,output=/tmp/2675580-out/en-US.vtt,dash_roles=main' 'in=/tmp/2675580-out/vtt/PPCBS_FIRECOUNTRY_fr-FR.vtt,stream=text,language=fr,output=/tmp/2675580-out/fr.vtt,dash_roles=subtitle' 'in=/tmp/2675580-out/vtt/PPCBS_FIRECOUNTRY_fr-FR_fn.vtt,stream=text,language=fr,output=/tmp/2675580-out/fr_fn.vtt,dash_roles=forced-subtitle' --default_language en-US --clear_lead 0 --fragment_duration 6 --mpd_output /tmp/2675580-out/stream.mpd --enable_raw_key_encryption --keys label=audio:key_id=abc123456:key=aaaabbbbcccc,label=sd:key_id=abcxyz1233:key=bbbcccdddd,label=hd:key_id=xyzefg123:key=zzzzzyyyyxxxx,label=uhd:key_id=aaaabbbccc123:key=0000aaa444www --protection_systems Widevine,PlayReady

What is the expected result? The output manifest produced should have multiple adaptation sets for each codec and within each switchable adapation set should be a SupplementalProperty . value ${ID} is the ID of adaptation Set to which player can switch . e.g Adaptation Set ID 0 -> has representation IDs 0,1 Adaptation Set ID 1 -> has representation IDs 2,3 Adaptation Set ID 2 -> has representation IDs 4,5

The switching supplemental property in AdaptationSet ID 0 should be value = 1,2 The switching supplemental property in AdaptationSet ID 1 should be value = 0,2 The switching supplemental property in AdaptationSet ID 2 should be value = 0,1

What happens instead? Shaka Packager switching value is pointing to the representation ID instead of the adaptation Set ID . e.g Adaptation Set ID 0 -> has representation IDs 0,1 Adaptation Set ID 1 -> has representation IDs 2,3 Adaptation Set ID 2 -> has representation IDs 4,5

The switching supplemental property in AdaptationSet ID 0 has value = 2,4 The switching supplemental property in AdaptationSet ID 1 should be value = 1,5 The switching supplemental property in AdaptationSet ID 2 should be value = 1,3

The logic must have some bug where instead of AdaptationSet ID its adding Representation Set ID. Per DASH-IF IOP 3.9.4.8 , the switching supplemental property value should reflect the ID of the adaptation sets. Switching across Adaptation Sets: @schemeIdUri set to urn:mpeg:dash:adaptation-set-switching:2016 and the @value is a comma-separated list of Adaptation Set IDs that may be seamlessly switched 18 to from this Adaptation Set.

joeyparrish commented 1 month ago

Nice catch! Can you send a PR?