我正试图根据魔术数字来嗅探文件的类型。在一些googling之后,我发现了以下信息:
主要协会:Windows Media
公司:Microsoft 公司
文件分类:音频
Mime类型: audio / x-ms-wma,video / x-ms-asf
识别字符Hex:30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C
主要关联:Windows Media文件
公司:Microsoft 公司
Mime类型:video / x-ms-wmv
识别字符 Hex:30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C
音频和视频都使用这些幻数。如何检测我是否拥有这一个或另一个。注意:我不能使用扩展名,我只有System.IO.Stream
字节。
答案 0 :(得分:1)
来自MSDN:
ASF文件与WMV或WMA文件之间的唯一区别是 文件扩展名和MIME类型。 WMV文件的MIME类型是 video / x-ms-wmv,对于WMA,它是audio / x-ms-wma。的MIME类型 ASF是video / x-ms-asf。文件的基本内部结构是 相同。
答案 1 :(得分:1)
这取决于你的嗅探器应该有多好以及性能如何。如果您可以分析大约1024个字节,那么您可以搜索特定于WMV文件的一些其他元数据。如果没有这样的数据,你可以认为它是一个WMA。
查找以下字节(按预先顺序排列):
在标题区域中预览此元数据标记的任何将文件标识为WMV。因此,在最坏的情况下,您需要在1024字节区域中执行大约8次搜索(包括所有DeviceConformanceTemplate
类型)以检测WMV,并且在最佳情况下,搜索以检测WMV。
其他方式是parse header(AsfMojo可能有帮助),这可能是一些典型的8K字节,但一般不受限制。我假设标题信息必须在audion和视频数据之间进行distingush(但我不是100%肯定)。我更喜欢这种方式,如果解析不可能,则回退到“hacky”解决方案。
答案 2 :(得分:1)
如前所述,WMV
和WMA
filea共享相同的格式 - Advanced Systems Format (ASF)
。那么,您可以在MS网站(it is available)上查看ASF格式规范,但它不适合胆小的人。
要告诉文件内部的内容,您可能希望使用Windows Media Reader Object
实例化WMCreateReader function并使用IWMHeaderInfo
接口来检索有关该文件的信息。
WindowsMedia.NET
Library将为您提供从C#使用此API所需的定义(它可能还有有用的示例)。
答案 3 :(得分:0)
只要查看幻数,您就无法区分 - 幻数是容器格式Advanced Systems Format(ASF)。
ASF可能包含任意数量的流,包括音频和视频流。仅当存在至少一个视频流时,您才会将该文件视为WMV文件。
如果您想要区分WMA和WMV(而不仅仅是ASF),则必须解析媒体文件,例如:使用AsfMojo。