C#:从WMV文件中检索视频编解码器信息

时间:2012-07-16 23:09:41

标签: c# video format codec wmv

我很难从WMV文件中检索视频编解码器信息。我在C#中使用.Net 2.0(我知道它已经老了......但它是必需的)。我已经看过使用DirectShowLib amoungst其他的东西,虽然我找不到在哪里找到这些信息。

参考,这是我想要获得的图片:http://imgur.com/yNSKo

我想避免使用第三方dll,但如果我必须,我会。如果有人可以提供帮助,我将非常感谢这些信息!

这是一些代码(尽管我认为它不值得在盐中加权):

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

1 个答案:

答案 0 :(得分:1)

好的,我找到了答案。我使用:http://www.codeproject.com/Articles/36338/Export-Windows-Media-Player-Music-Metadata-to-XML作为指南。我添加了WMP.dll作为参考来获取此信息。一旦我添加了WMP.dll,我所做的就是找到编解码器的Hex并进行比较。这只有在您每次都具有相同的特定编解码器时才有效。它至少可以帮助您为编解码器拉出十六进制,并且可以将十六进制值与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;
    }