1

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

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

我想避免使用第 3 方 dll,但如果我必须这样做的话。如果有人可以提供帮助,我将不胜感激!

这是一些代码(尽管我认为它不值得盐分):

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

1 回答 1

1

好的,我找到了答案。我使用: 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;
    }
于 2012-07-18T07:49:03.373 回答