А Вы уверены, что таким образом выявите все нужные контейнеры? MPEG4 — весьма упоротый формат, меджика как такового в нём не предусмотрено. В libmagic для его определения читают строки со смещением 4 и 8 байт, и возможных комбинаций довольно много.
У mp4 есть обязательный заголовок? Он же формально потоковый формат и должен декодироваться с любой точки.
В любом случае это медиаконтейнер, внутри которого может если не что попало, но много разных каналов в разных форматах.
А Вы уверены, что таким образом выявите все нужные контейнеры? MPEG4 — весьма упоротый формат, меджика как такового в нём не предусмотрено. В libmagic для его определения читают строки со смещением 4 и 8 байт, и возможных комбинаций довольно много.
На сколько я понял, первые 8 как раз и определяют quicktime-контейнер, что мне и нужно, а следующие уже определяют конкретные подвиды - m4v, m4a, 3gp и т.п. Или я ошибаюсь?
пс
проверка нужна для избежания скармливания не mp4-файла библиотеке libmp4v2.
Ошибаетесь. Первые 4 байта вообще не проверяются и фиг знает, что там может быть. Следующие 4 "ftyp" соответствуют ISO base media file format, то есть MPEG-4 Part 12, или Apple QuickTime.
Ошибаетесь. Первые 4 байта вообще не проверяются и фиг знает, что там может быть. Следующие 4 "ftyp" соответствуют ISO base media file format, то есть MPEG-4 Part 12, или Apple QuickTime.
First block size is 28 (hex: 00 00 00 1C, big-endian, high byte first), size located at offset 0. At offset 28 (hex: 1C) is located the second chunk, which has a size of 8 and type mdat (hex: 6D 64 61 74)
First block size is 28 (hex: 00 00 00 1C, big-endian, high byte first), size located at offset 0. At offset 28 (hex: 1C) is located the second chunk, which has a size of 8 and type mdat (hex: 6D 64 61 74)
Т.е. там не может быть что угодно, как я понимаю.
Процитированный Вами текст относится к конкретному образцу, а не к формату в целом. Из общего описания, несколько выше, следует, что первые 4 байта содержат размер первого фрагмента данных, и никто вроде не обещает, что он не может отличаться от приведённого в примере.
Ошибаетесь. Первые 4 байта вообще не проверяются и фиг знает, что там может быть. Следующие 4 "ftyp" соответствуют ISO base media file format, то есть MPEG-4 Part 12, или Apple QuickTime.