我正在尝试根据幻数来嗅探文件的类型。经过一些googling之后,我发现了以下信息:

WMA:



WMV:



音频和视频都使用这些幻数。如何检测是否有一个。注意:我不能使用扩展名,我只有带有字节的System.IO.Stream

最佳答案

这取决于您的嗅探器应该有多好以及性能应该有多好。如果您可以分析一些1024字节,则可以搜索一些其他特定于WMV文件的元数据。如果没有此类数据,则可以假定它是WMA。

按优先顺序查找以下字节:

  • AspectRatio(UTF-16)
  • WindowsMediaVideo(UTF-16)
  • WMV3(ASCII)
  • DeviceConformanceTemplate MP@ML(UTF-16)

  • 在 header 区域中将这些元数据标记中的任何一个标记为文件标识为WMV。因此,在最坏的情况下,您将需要在1024个字节的区域中执行大约8次搜索(包括所有DeviceConformanceTemplate的类型)以检测WMV,而在最佳情况下则需要进行1次搜索以检测WMV。

    另一种方法是到parse header(AsfMojo可能会有所帮助),它可以是一些典型的8K字节,但通常不受限制。我认为 header 信息必须足以区分音频数据和视频数据(但我不确定100%)。我更喜欢这种方式,如果无法解析,则退回到“hacky”解决方案。

    10-08 04:53