【问题标题】:How to parse this Apple-specific MPEG file header?如何解析这个 Apple 特定的 MPEG 文件头?
【发布时间】:2019-10-18 21:08:30
【问题描述】:

我有一个这样开头的 MPEG 文件:

   0:  00 0f 6d 79 5f 66 69 6c  65 6e 61 6d 65 2e 6d 70  ..my_filename.mp
  10:  67 00 04 fc 00 00 f0 00  b2 10 39 a8 b2 10 39 ad  g.........9...9.
  20:  0f 6d 79 5f 66 69 6c 65  6e 61 6d 65 2e 6d 70 67  .my_filename.mpg
  30:  03 92 3b 40 00 00 00 00  03 7a b5 7c 03 7a d7 d0  ..;@.....z.|.z..
  40:  00 4d 6f 6f 56 54 56 4f  44 01 00 01 2a 00 80 00  .MooVTVOD...*...
  50:  00 00 00 00 36 b2 83 00  00 04 fc b2 10 39 a8 b2  ....6........9..
  60:  10 39 ad 00 00 00 00 00  00 00 00 00 00 00 00 00  .9..............
  70:  00 00 00 00 00 00 00 00  00 00 81 81 35 d3 00 00  ............5...
  80:  00 36 b2 83 6d 64 61 74  00 00 01 ba 21 00 01 00  .6..mdat....!...
  90:  05 80 2b 81 00 00 01 bb  00 0c 80 2f d9 04 e1 ff  ..+......../....
  a0:  c0 c0 20 e0 e0 2e 00 00  01 c0 07 ea ff ff ff ff  .. .............

文件开头(前0x80字节)的文件格式是什么,如何解析?

我在MooVTVOD 上进行了 Google 搜索,它看起来与 QuickTime 和 iTunes 相关。

我已经明白的:

  • mdat前面有4个字节的大端文件大小,当.mov包含MPEG时,根据QuickTime .mov file format。

  • 在mdat 之后是MPEG-PS 标头00 00 01 ba。不久之后有 MPEG-PES 标头 00 00 01 c0 指示音频流。

  • 但是,此文件中的前 0x80 字节似乎采用不同的文件文件格式(不是 QuickTime .mov,不是 MPEG-PS,不是 MPEG-PES),我只对这个问题感兴趣以前 0x80 字节的文件格式。

  • VLC 等媒体播放器通常会忽略文件开头的 junk,并在偏移量 0x80 处开始播放 MPEG-PS 流。但是,我对他们忽略的 0x80 字节感兴趣。

【问题讨论】:

标签: file-format quicktime mpeg


【解决方案1】:

文件格式为“Quicktime 电影原子”,其中包含有关媒体文件或媒体本身的元信息。 mdat 是一个媒体数据原子。

媒体原子描述和定义轨道的媒体类型和样本数据。

规格在这里:https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html

你可以用这个 python 脚本来解析它: https://github.com/kzahel/quicktime-parse

或链接问题中提到的此软件: https://archive.codeplex.com/?p=mp4explorer

【讨论】:

  • 感谢您提供指向 QuickTime 文件格式文档的链接。但是,我在这个问题中询问的前 0x80 字节似乎是不同的文件格式。在 QuickTime 格式中,原子的大小是 4 字节大端,我看不到前 0x80 字节中的任何一个。 (这个这个答案没有回答这个问题。)
【解决方案2】:

题中前0x80字节的文件格式为MacBinary II。

根据文件格式描述https://github.com/mietek/theunarchiver/wiki/MacBinarySpecs,不是MacBinary I,因为MacBinary II有data[0x7a] == '\x81'和data[0x7b] == '\x81'(MacBinary I有data[0x7a] == '\x00',MacBinary III有data[0x7a] == '\x82');而且它也不是 MacBinary III,因为那个有 data[0x66 : 0x6a] == 'mBIN'。

CRC 值 data[0x7c : 0x7e] 不正确,因为文件名在发布到 StackOverflow 之前已被修改。仅供参考,使用的 CRC 算法是 CRC16/XMODEM(在 https://crccalc.com/ 上),也实现为 CalcCRC MacBinary.c.

data[0x41 : 0x45] == 'MooV' 是文件type code。根据可从TCDB 下载的 Excel 电子表格,它表示 QuickTime 电影(视频和音频)。

data[0x45 : 0x49] == 'TVOD' 是文件creator code。 TCDB 和this database 表示是QuickTime Player。

有关 MacBinary 的更多信息和链接:http://fileformats.archiveteam.org/wiki/MacBinary

请注意,播放视频不需要所有这些标头:通过删除前 0x88 字节,我们得到一个 MPEG-PS 视频文件,许多视频播放器都可以播放(不仅是 QuickTime Player,而且不仅是在 macOS 上运行的播放器) )。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多