我必须设计一个检测mp4文件的模块。如果将获得任何随机文件作为输入,则必须告诉它是否是mp4文件。在哪里可以找到mp4文件头的规范?尝试使用谷歌搜索,但除签名外找不到其他内容。关于模块的C编程的其他技巧吗?
您可以检查扩展名或文件签名(幻数)
http://www.garykessler.net/library/file_sigs.html
http://en.wikipedia.org/wiki/List_of_file_signatures
00 00 00 18 66 74 79 70 33 67 70 35 .... ftyp 3gp5 MPEG-4视频文件
或者,如果您使用的是Unix / Linux,则可以从程序中解析file(1)的输出。
编辑:
您无需扫描整个文件即可识别它,签名即可,但是,如果需要的话,请注意MP4是其他格式的container,这意味着您可能需要知道关于MP4及其包含的其他格式,这里有一些信息:http://en.wikipedia.org/wiki/MPEG-4_Part_14
我会使用类似libffmpeg的方法来做到这一点。
ISO基本媒体文件格式是免费提供的,MP4文件格式是“基本媒体格式”的扩展,在大多数情况下,它足以理解“基本媒体格式”。尝试谷歌将返回一个标准。
要检测文件是否为MP4,您需要读取前8个字节,其中包含(前4个字节为ATOM的大小,后4个字节为“ FTYP”)。之后,它包含大品牌和兼容商标-如果它们之一是ISOM,则肯定是MP4文件。因此,您只需要解析最初的几个字节即可确认MP4文件。
您还可以查看“ mp4v2-1.9.1”代码以了解MP4格式。
这是一种容器格式。 The specification is here。
即使手头有规范,您仍然需要做很多工作来支持程序中所有要表示的容器。设置切合实际的要求。