我正在尝试根据魔数(Magic Number)来嗅探文件的类型。经过一些googling我找到了以下信息:
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
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。
查找以下字节(按首选顺序):
- 长宽比 (UTF-16)
- WindowsMediaVideo (UTF-16)
- WMV3 (ASCII)
- 设备一致性模板 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/