如何使用幻数检测来查看WMA和WMV文件之间的差异

本文关键字:文件 WMV 之间 WMA 何使用 检测 | 更新日期: 2023-09-27 18:29:21

我正试图根据幻数来探查文件的类型。经过一些谷歌搜索,我发现了以下信息:

WMA:

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

WMV:

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

音频和视频都使用这些神奇的数字。我怎样才能检测到我是否有一个或另一个。注意:我不能使用扩展,我只有一个带字节的System.IO.Stream

如何使用幻数检测来查看WMA和WMV文件之间的差异

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

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

  1. AspectRatio(UTF-16)
  2. WindowsMediaVideo(UTF-16)
  3. WMV3(ASCII)
  4. 设备一致性模板MP@ML(UTF-16)

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

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

来自MSDN:

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

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

要了解文件内部的内容,您可能需要使用WMCreateReader函数实例化Windows Media Reader Object,并使用IWMHeaderInfo接口来检索有关文件的信息。

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

仅仅看幻数是无法区分的-幻数是容器格式,即高级系统格式(ASF)。

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

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