c# - 如何通过魔数(Magic Number)检测查看 WMA 和 WMV 文件之间的差异?

标签 c# .net audio video magic-numbers

我正在尝试根据魔数(Magic Number)来嗅探文件的类型。经过一些googling我找到了以下信息:

WMA:

Primary association: Windows Media
Company: Microsoft Corporation
File classification: Audio
Mime type: audio/x-ms-wma, video/x-ms-asf
Identifying characters Hex: 30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

WMV:

Primary association: Windows Media File
Company: Microsoft Corporation
Mime type: video/x-ms-wmv
Identifying characters Hex: 30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

这些神奇的数字可用于音频和视频。我如何检测我是否拥有其中之一。注意:我无法使用扩展,我只有一个带有字节的 System.IO.Stream

最佳答案

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

查找以下字节(按首选顺序):

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

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

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

关于c# - 如何通过魔数(Magic Number)检测查看 WMA 和 WMV 文件之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910313/

相关文章:

c# - 如何以编程方式清除 Windows 下的回收站?

java - 如何使用 java 检测 wav 文件中是否存在单词/音频静音?

c++ - C++中的UE4播放时间

actionscript-3 - 合并多个原始声音数据并将其保存到ActionScript 3.0中的一个文件中

C#通过传入字段类型来组合方法?

c# - 应用程序是否执行 Console.WriteLine ("Test");在编译版本?

c# - 如何将字符串转换为键

c# - 在 C#/.net 中是否支持 .Z 压缩

c# - 如何使用 Lucene.NET 构建自动完成/建议?

.net - 如何使用不是 SystemSecuredString 的密码创建新的 PSDrive?