1

WMV ファイルからビデオ コーデック情報を取得するのに苦労しています。私はC#で.Net 2.0を使用しています(古いことは知っていますが、必須です)。この情報がどこにあるのかわかりませんが、DirectShowLib を他のものと一緒に使用する方法を調べました。

参考までに、ここに私が取得しようとしているものの写真があります: http://imgur.com/yNSKo

サード パーティの 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 を追加したら、コーデックの Hex を見つけて比較するだけでした。これは、毎回探しているのと同じ特定のコーデックがある場合にのみ機能します。少なくとも、コーデックの 16 進値を取得するのに役立ち、WMP のファイル プロパティから 16 進値をビデオ コーデックに関連付けることができます。

これが、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 に答える