如何通过幻数检测来查看WMA和WMV文件之间的区别?

时间:2012-03-28 15:01:58

标签: c# .net audio video magic-numbers

我正试图根据魔术数字来嗅探文件的类型。在一些googling之后,我发现了以下信息:

WMA:

  

主要协会: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

WMV:

  

主要关联: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字节。

4 个答案:

答案 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。

查找以下字节(按预先顺序排列):

  1. AspectRatio(UTF-16)
  2. WindowsMediaVideo(UTF-16)
  3. WMV3(ASCII)
  4. DeviceConformanceTemplate MP@ML(UTF-16)
  5. 在标题区域中预览此元数据标记的任何将文件标识为WMV。因此,在最坏的情况下,您需要在1024字节区域中执行大约8次搜索(包括所有DeviceConformanceTemplate类型)以检测WMV,并且在最佳情况下,搜索以检测WMV。

    其他方式是parse headerAsfMojo可能有帮助),这可能是一些典型的8K字节,但一般不受限制。我假设标题信息必须在audion和视频数据之间进行distingush(但我不是100%肯定)。我更喜欢这种方式,如果解析不可能,则回退到“hacky”解决方案。

答案 2 :(得分:1)

如前所述,WMVWMA 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