Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Does iods require Object Descriptors to have ESDescriptors? #90

Open
bradh opened this issue Jan 27, 2024 · 3 comments
Open

Does iods require Object Descriptors to have ESDescriptors? #90

bradh opened this issue Jan 27, 2024 · 3 comments

Comments

@bradh
Copy link

bradh commented Jan 27, 2024

ISO/IEC 14496-14:2020 section 6.2 describes the Object Descriptor Box.

I find this a bit hard to follow, but what I have is that the ObjectDescriptor field is either an OD with a special tag (MP4_OD_Tag) or IOD (MP4_IOD_Tag), and that those are defined in ISO/IEC 14496-1:2010 Section 7.2.6. (There is also a special case for the format of the ES descriptor - see ISO/IEC 14496-14:2020 Section 4.1.3, but I don't think that has direct bearing on the question, which I'll get to, I promise).

In ISO/IEC 14496-1:2010 Section 7.2.6 (and in Annex E.4 of that document, which is a bit easier to follow), there is the syntax for ObjectDescriptor (7.2.6.3.1) and InitialObjectDescriptor (7.2.6.4.1).

The way I read that is that at least one ES_Descriptor is required (the valid number of entries in the array is [1..255]), except for the case where its a URL, which it can't be from the restrictions in 14496-14 Section 4.1.2.

Is that a reasonable reading?

If so, there are several conformance sample files (I think 26 in total) that aren't showing the expected number. Examples:

https://github.com/MPEGGroup/FileFormatConformance/blob/main/data/file_features/published/isobmff/03_hinted_gpac.json#L51

https://github.com/MPEGGroup/FileFormatConformance/blob/main/data/file_features/published/isobmff/21_segment_gpac.json#L72

https://github.com/MPEGGroup/FileFormatConformance/blob/main/data/file_features/published/nalu/l-hevc/mhvc_hvc1_lhv1_multiple_tracks_implicit_gpac.json#L59

@cconcolato
Copy link
Contributor

Thanks for the question.

As you note, the Object Descriptor Framework was introduced as part of MPEG-4 Systems. As of today, very few implementations support it. So, if your goal is to be compliant to ISOBMFF, I would simply remove the iods box.

Regarding the detailed part of your question, I would have to check the specs deeper. @jeanlf may be able to answer faster, especially on the contributed files.

@jeanlf
Copy link
Collaborator

jeanlf commented Feb 1, 2024

The empty IOD was a trick used to signal profile and level of audio or visual stream before the mp4 spec was revised to indicate that the ExtensionProfileLevelDescriptor should be used (annex A of 14496-14). I guess we should patch these files indeed, do you have the complete list ?

@bradh
Copy link
Author

bradh commented Feb 1, 2024

I just searched for null Descr entries.

That gave me:

data/file_features/published/isobmff/sg-tl-st_gpac.json:63:          "Descr": null
data/file_features/published/isobmff/18_pssh_v2_gpac.json:56:          "Descr": null
data/file_features/published/isobmff/17_negative_ctso_gpac.json:62:          "Descr": null
data/file_features/published/isobmff/21_segment_gpac.json:72:          "Descr": null
data/file_features/published/isobmff/20_stxt_gpac.json:51:          "Descr": null
data/file_features/published/isobmff/14_large_gpac.json:51:          "Descr": null
data/file_features/published/isobmff/03_hinted_gpac.json:51:          "Descr": null
data/file_features/published/nalu/l-hevc/shvc_hev1_lhe1_multiple_tracks_implicit_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/mhvc_hev1_hev2_multiple_tracks_extractors_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/shvc_hvc1_lhv1_multiple_tracks_implicit_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/lhevc_avc1_lhe1_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/mhvc_hvc1_hvc2_multiple_tracks_extractors_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/lhevc_avc1_lhv1_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/shvc_hvc1_hvc2_multiple_tracks_extractors_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/mhvc_hvc1_lhv1_multiple_tracks_implicit_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/mhvc_hev1_lhe1_multiple_tracks_implicit_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/lhevc_avc3_lhv1_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/lhevc_avc3_lhe1_gpac.json:59:          "Descr": null
data/file_features/published/nalu/l-hevc/shvc_hev1_hev2_multiple_tracks_extractors_gpac.json:59:          "Descr": null
data/file_features/published/nalu/hevc/hevc_hev1_hev2_implicit_gpac.json:59:          "Descr": null
data/file_features/published/nalu/hevc/hevc_hev1_hev2_extractors_gpac.json:59:          "Descr": null
data/file_features/published/nalu/hevc/hevc_tiles_multiple_tracks_gpac.json:56:          "Descr": null
data/file_features/published/nalu/hevc/hevc_hvc1_hvc2_extractors_gpac.json:59:          "Descr": null
data/file_features/published/nalu/hevc/hevc_tiles_multiple_tracks_empty_base_gpac.json:56:          "Descr": null
data/file_features/published/nalu/hevc/hevc_hvc1_hvc2_implicit_gpac.json:59:          "Descr": null
data/file_features/published/nalu/mvc/DDF_10s_25fps_gpac.json:63:          "Descr": null

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants