wmv, wma 的判斷方式, 是利用這篇參考資料進行實作的:
http://www.microsoft.com/windows/windowsmedia/forpros/format/asfspec.aspx
裡面有一篇非常詳細的 asf 檔案格式的描述, 根據這篇的描述, 我們可以進行程式實作來判定 asf 及 wmv 和 wma, 主要的判定是利用 header 中的 stream type 來進行判斷的, 首先先讀出 asf 的格式檔頭, 讀出 guid 如下: (c#)
Guid guidASF_Header_Object = new Guid("75B22630-668E-11CF-A6D9-00AA0062CE6C"); Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(stream); Guid guidTemp; byte[] arrbyteGuid = new byte[guidSize]; arrbyteGuid = br.ReadBytes(guidSize); guidTemp = new Guid(arrbyteGuid); if (guidTemp == guidASF_Header_Object) // this file is asf format { // ..... }
上面確定為 asf format (可能是 wmv 也可能是 wma), 接下來再進行確認其內容是否有 audio 及 video 的狀況, 來判定應為 wmv 或 wma.
我們必須先找出 header object 為 ASF_Stream_Properties_Object 的內容為 ASF_Audio_Media 或 ASF_Video_Media 的狀況, 通常 wma 僅有 ASF_Audio_Media, 而 wmv 為 ASF_Audio_Media 及 ASF_Video_Media 都存在, 所以就繼續找出 stream 的 type 即可, 程式碼在此, 給大家研究看看, 節省大家在判定這些檔案的時間囉!
checkASF.zip