2

我正在尝试根据幻数来嗅探文件的类型。经过一番谷歌搜索后,我发现了以下信息:

世界气象组织:

主要关联:Windows Media
公司:Microsoft Corporation
文件分类:音频
Mime 类型:音频/x-ms-wma、视频/x-ms-asf
识别字符十六进制:30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

WMV:

主要关联:Windows Media 文件
公司:Microsoft Corporation
Mime 类型:video/x-ms-wmv
识别字符 Hex:30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

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

4

4 回答 4

1

来自MSDN

ASF 文件与 WMV 或 WMA 文件之间的唯一区别是文件扩展名和 MIME 类型。WMV 文件的 MIME 类型是 video/x-ms-wmv,而对于 WMA,它是 audio/x-ms-wma。ASF 的 MIME 类型是 video/x-ms-asf。文件的基本内部结构是相同的。

于 2012-03-28T15:13:34.837 回答
1

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

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

  1. 纵横比 (UTF-16)
  2. WindowsMediaVideo (UTF-16)
  3. WMV3 (ASCII)
  4. DeviceConformanceTemplate MP@ML (UTF-16)

在标头区域中存在任何此元数据标记将文件标识为 WMV。因此,在最坏的情况下,您需要DeviceConformanceTemplate在 1024 字节区域中执行大约 8 次搜索(包括所有类型)来检测 WMV,在最好的情况下,需要执行 1 次搜索来检测 WMV。

其他方法是解析标头AsfMojo可能有帮助),它可以是一些典型的 8K 字节,但通常不限于此。我假设标题信息必须足以区分三极管和视频数据(但我不是 100% 确定)。我更喜欢这种方式,如果无法解析,则回退到“hacky”解决方案。

于 2012-03-28T16:14:40.103 回答
1

如前所述,WMVWMAfilea 共享相同的格式 - Advanced Systems Format (ASF). 好吧,您可以在 MS 网站上查看 ASF 格式规范(它是可用的),但它不适合胆小的人。

要知道文件中的内容,您可能希望Windows Media Reader Object使用WMCreateReader 函数进行实例化,并使用IWMHeaderInfo接口来检索有关文件的信息。

WindowsMedia.NET将为您提供从 C# 使用此 API 所需的定义(它可能也有有用的示例)。

于 2012-03-28T16:24:37.190 回答
0

您将无法仅查看幻数来分辨差异 - 幻数是容器格式,即高级系统格式(ASF)。

ASF 可以包含任意数量的流,包括音频和视频流。只有存在至少一个视频流时,您才会将该文件视为 WMV 文件。

如果您确实想区分 WMA 和 WMV(而不仅仅是 ASF),您将不得不解析媒体文件,例如使用AsfMojo

于 2012-03-28T15:11:33.323 回答