如何解析这个 Apple-specific MPEG 文件 header?
How to parse this Apple-specific MPEG file header?
我有一个这样开头的 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 相关。
我已经了解的内容:
根据QuickTime .mov file format当.mov包含MPEG时mdat
前面有4个字节的big endian文件大小
在mdat
之后有MPEG-PS header 00 00 01 ba
. Shortly after there is the MPEG-PESheader00 00 01 c0
表示音频流。
但是,这个文件的前 0x80 个字节似乎是不同的文件格式(不是 QuickTime .mov,不是 MPEG-PS,不是 MPEG-PES),并且在这个问题中我只对第一个 0x80 字节的文件格式感兴趣。
VLC 等媒体播放器通常会忽略文件开头的 junk,并在偏移量 0x80 处开始播放 MPEG-PS 流。但是,我对他们忽略的 0x80 字节感兴趣。
文件格式为 "Quicktime movie atom,",其中包含有关媒体文件或媒体本身的元信息。 mdat
是媒体数据原子。
Media atoms describe and define a track’s media type and sample data.
规范在这里: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
问题中前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]
不正确,因为文件名在发布到 Whosebug 之前已被修改。仅供参考,使用的 CRC 算法是 CRC16/XMODEM(在 https://crccalc.com/ 上),也作为 CalcCRC 实现
MacBinary.c.
data[0x41 : 0x45] == 'MooV'
是文件 type code. According to the Excel spreadsheet downloadable from TCDB,它表示 QuickTime 电影(视频和音频)。
data[0x45 : 0x49] == 'TVOD'
是文件creator code. TCDB and this database表示是QuickTime Player
有关 MacBinary 的更多信息和链接:http://fileformats.archiveteam.org/wiki/MacBinary
请注意,所有这些 headers 都不是播放视频所必需的:通过删除前 0x88 字节,我们得到一个 MPEG-PS 视频文件,许多视频播放器都可以播放(不仅是 QuickTime Player , 而不仅仅是 macOS 上的玩家 运行).
我有一个这样开头的 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 相关。
我已经了解的内容:
根据QuickTime .mov file format当.mov包含MPEG时
mdat
前面有4个字节的big endian文件大小在
mdat
之后有MPEG-PS header00 00 01 ba
. Shortly after there is the MPEG-PESheader00 00 01 c0
表示音频流。但是,这个文件的前 0x80 个字节似乎是不同的文件格式(不是 QuickTime .mov,不是 MPEG-PS,不是 MPEG-PES),并且在这个问题中我只对第一个 0x80 字节的文件格式感兴趣。
VLC 等媒体播放器通常会忽略文件开头的 junk,并在偏移量 0x80 处开始播放 MPEG-PS 流。但是,我对他们忽略的 0x80 字节感兴趣。
文件格式为 "Quicktime movie atom,",其中包含有关媒体文件或媒体本身的元信息。 mdat
是媒体数据原子。
Media atoms describe and define a track’s media type and sample data.
规范在这里: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
问题中前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]
不正确,因为文件名在发布到 Whosebug 之前已被修改。仅供参考,使用的 CRC 算法是 CRC16/XMODEM(在 https://crccalc.com/ 上),也作为 CalcCRC 实现
MacBinary.c.
data[0x41 : 0x45] == 'MooV'
是文件 type code. According to the Excel spreadsheet downloadable from TCDB,它表示 QuickTime 电影(视频和音频)。
data[0x45 : 0x49] == 'TVOD'
是文件creator code. TCDB and this database表示是QuickTime Player
有关 MacBinary 的更多信息和链接:http://fileformats.archiveteam.org/wiki/MacBinary
请注意,所有这些 headers 都不是播放视频所必需的:通过删除前 0x88 字节,我们得到一个 MPEG-PS 视频文件,许多视频播放器都可以播放(不仅是 QuickTime Player , 而不仅仅是 macOS 上的玩家 运行).