Open bradh opened 8 months ago
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.
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 ?
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
Hi all,
I agree that having no descriptors seems to be wrong as described above, however additionally 14496-14, section 6.2.3 (semantics of the 'iods' box) says:
The contents of this box are formed by taking an object descriptor or initial object descriptor and:
- changing the tag to MP4_OD_Tag or MP4_IOD_Tag as appropriate for this object.
- replacing the ES descriptors with ES_ID_Inc referencing the appropriate track
So having a ES_ID_Inc pointing to a ES_Descriptor within a 'esds' box in a track seems to be a valid option as well.
The files listed above without any descriptors at all still need fixing I believe.
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