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

C#:从WMV文件检索视频编解码器信息,c#,video,format,codec,wmv,C#,Video,Format,Codec,Wmv,我很难从WMV文件中检索视频编解码器信息。我正在C#中使用.NET2.0(我知道它很旧,但它是必需的)。我在其他方面也考虑过使用DirectShowLib,不过我就是找不到在哪里可以找到这些信息 以下是我希望获得的图片,以供参考: 我想避免使用第三方dll的,但如果我必须,我会。如果有人能帮忙,我将非常感谢您提供的信息 下面是一些代码(尽管我认为它不值得在salt中使用): 好的,我找到答案了。我用:作为向导。我添加了WMP.dll作为参考以获得此信息。一旦我添加了WMP.dll,我所做的就是找

我很难从WMV文件中检索视频编解码器信息。我正在C#中使用.NET2.0(我知道它很旧,但它是必需的)。我在其他方面也考虑过使用DirectShowLib,不过我就是找不到在哪里可以找到这些信息

以下是我希望获得的图片,以供参考:

我想避免使用第三方dll的,但如果我必须,我会。如果有人能帮忙,我将非常感谢您提供的信息

下面是一些代码(尽管我认为它不值得在salt中使用):


好的,我找到答案了。我用:作为向导。我添加了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;
    }
private bool WMPCodecCheck(字符串文件名)
{
尝试
{
WindowsMediaPlayer wmp=新WindowsMediaPlayer();
wmp.mediaCollection.add(文件名);
IWMPMedia currentWMV=wmp.newMedia(文件名);
媒体=wmp.mediaCollection;
this.codecType=media.getMediaAtom(“FourCC”);
iwmplaylist mediaList=null;
IWMPMedia媒体项目;
mediaList=media.getByAttribute(“MediaType”、“Video”);
对于(int i=0;i
好的,我找到了答案。我用:作为向导。我添加了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;
    }
private bool WMPCodecCheck(字符串文件名)
{
尝试
{
WindowsMediaPlayer wmp=新WindowsMediaPlayer();
wmp.mediaCollection.add(文件名);
IWMPMedia currentWMV=wmp.newMedia(文件名);
媒体=wmp.mediaCollection;
this.codecType=media.getMediaAtom(“FourCC”);
iwmplaylist mediaList=null;
IWMPMedia媒体项目;
mediaList=media.getByAttribute(“MediaType”、“Video”);
对于(int i=0;i
TagLib Sharp是一个可能适合您的第三方dll。一个可能适合您的第三方dll是TagLib Sharp。