1

「 http://directshownet.sourceforge.net/」の DirectShot.Net ラッパーを使用して、多数のビデオ ファイルからフレームを抽出しようとしています。

DxScan サンプル アプリを実行するたびに。「接続を確立するための中間フィルターの組み合わせが見つかりませんでした」というメッセージが表示されます。これは、WMV ファイル、MP4 ファイル、AVI ファイルで発生します。サンプル アプリで指定したメディア。

GSpot コーデック ツールを使用してビデオを開き、グラフをレンダリングするように依頼すると、問題なくレンダリングされます。したがって、マシンは間違いなくコンテンツを再生できます。

私はWin 7 64ビットを使用しています。x64、x86、または Auto を対象として、同じエラーがスローされます。管理者として Visual Studio を実行することを含みます。

以下の Romain R が提案するように、サンプル コードを修正して、ビデオ メディア タイプを含む正しいピンを見つけようとしました。

私は使用しています:

            IEnumPins epins;
            capFilter.EnumPins(out epins);
            IntPtr fetched = Marshal.AllocCoTaskMem(4);
            IPin[] pins = new IPin[1];
            while (epins.Next(1, pins, fetched) == 0)
            {
                PinInfo pinfo;
                pins[0].QueryPinInfo(out pinfo);
                IEnumMediaTypes mtypes;
                pins[0].EnumMediaTypes(out mtypes);
                AMMediaType[] types = new AMMediaType[1];
                while(mtypes.Next(1, types, new IntPtr()) == 0){
                    var majorType = types[0].majorType;
                    if (majorType == MediaType.Video)
                    {
                         //This is never reached
                    }
                }
            }

MP4 ファイルの場合、上記のコメント行にヒットすることはありません。ただし、WMV ファイルの場合、デモは正しく実行されるようになりました。

おそらく、これは適切な MP4 ファイル フィルタが見つからないためです。コンテンツは Windows Media Player で正常に再生されるため、これは不明瞭です。

これは考えられる原因ですか?

4

1 に答える 1

0

DxScanサンプルは、信頼できない方法でフィルター グラフを作成しています。特に、メディア ファイルに提供されたソース フィルターから取得した最初のピンがビデオ ピンであると想定しています。いつもそうであるとは限りません。より良いグラフ構築アプローチがうまく機能するはずです。どの行でエラーが発生したかを確認するために、手順を実行することをお勧めします。おそらく、Sample Grabber Filter の入力ピンの接続になります。

アップデート。元のフィルターに入力ピンがなく、その間にストリームをビデオ フレームとオーディオ サンプルに変換するパーサー/デマルチプレクサー フィルターと呼ばれる追加のフィルターが必要になる場合があることに注意してください。DirectShow API はRender*、このチェーンの必要なリンクと、DxScan が行っている直接接続を提案するという点で、グラフの作成を支援するメソッドを提供します。

つまり、DxScan は開始するのに最適なサンプルではない可能性があります。ネイティブ API の MSDN サンプル/リファレンスは、おそらく DirectShow を使い始めるのに適しています。

プレイグラウンドと主要な調査および API 探索ツールは、DirectShow.NET ラッパー ライブラリ サンプルではなく、Windows SDK の GraphEdit (GraphStudio、または代替の改善されたオプションとしてGraphStudioNext ) である必要があります。

コンテンツは Windows Media Player で正常に再生されるため、これは不明瞭です。

WMP は再生に DirectShow を使用しません。

于 2013-02-25T15:20:54.147 に答える