2012-07-16 71 views
1

我很難從WMV文件中檢索視頻編解碼器信息。我在C#中使用.Net 2.0(我知道它是舊的..但它是必需的)。我已經着眼於使用DirectShowLib其他的東西,雖然我無法找到在哪裏找到這些信息。C#:從WMV文件中檢索視頻編解碼器信息

僅供參考,下面是我所期待獲得一個畫面:http://imgur.com/yNSKo

我想避免使用第三方DLL的,但如果我必須我會的。如果有人能幫忙,我會非常感謝這些信息!

下面是一些代碼(雖然我不認爲這是值得其重量的鹽):

 WindowsMediaPlayer wmp = new WindowsMediaPlayer(); 
     IWMPMedia mediaInfo = wmp.newMedia(fileName); 
     MessageBox.Show(mediaInfo.getItemInfo("WM/Codec")); 
+0

一個可能適合你的第三方dll是TagLib-Sharp。 https://github.com/mono/taglib-sharp – Arithmomaniac 2012-07-16 23:29:16

回答

0

好,我找到了答案。我用:http://www.codeproject.com/Articles/36338/Export-Windows-Media-Player-Music-Metadata-to-XML作爲指導。我添加了WMP.dll作爲獲取此信息的參考。一旦我添加了WMP.dll,我所做的就是找到編解碼器的十六進制,並將其與之比較。這隻有在您每次都使用相同的特定編解碼器時才能正常工作。至少它可以幫助您拉取編解碼器的十六進制,並且可以將WMP中文件屬性的十六進制值與視頻編解碼器相關聯。

我希望這可以幫助下一個嘗試在WMV中查找特定編解碼器的人。

private bool WMPCodecCheck(string fileName) 
    { 
     try 
     { 
      WindowsMediaPlayer wmp = new WindowsMediaPlayer(); 
      wmp.mediaCollection.add(fileName); 
      IWMPMedia currentWMV = wmp.newMedia(fileName); 
      media = wmp.mediaCollection; 

      this.codecType = media.getMediaAtom("FourCC"); 

      IWMPPlaylist mediaList = null; 

      IWMPMedia mediaItem; 
      mediaList = media.getByAttribute("MediaType", "Video"); 

      for (int i = 0; i < mediaList.count; i++) 
      { 
       mediaItem = mediaList.get_Item(i); 
       if (mediaItem.sourceURL.Equals(fileName)) 
       { 
        if (_hasCodec.Equals(GetCodec(mediaItem))) 
        { 
         //MessageBox.Show("Codec Exists!"); 
         wmp.mediaCollection.remove(mediaItem, true); 
         return true; 
        } 
       } 
      } 
      wmp.mediaCollection.remove(currentWMV, true); 
      return false; 
     } 
     catch (Exception e) 
     { 
      Log.LogToFile("Codec Read Error." + e, LogType.Exception); 
     } 
     return false; 
    } 
    private string GetCodec(IWMPMedia mediaItem) 
    { 
     // Has Codec = 877474375 
     // No Codec = 861293911 
     string codec = mediaItem.getItemInfoByAtom(codecType); 
     if (string.IsNullOrEmpty(codec)) 
     { 
      codec = mediaItem.getItemInfoByAtom(codecType); 
     } 
     //MessageBox.Show("Codec Hex Value: " + codec); 
     return codec; 
    }