0

ビデオの再生を可能にするために、C#アプリケーションでDirectShowLibを使用しています。残念ながら、すべてのシステムが適切なビデオコーデックを提供しているわけではないため、インストールの一部としてFFDShowをインストールすることにしました。残念ながら、これは特定のユーザーには機能しないようです。これは、すでにいくつかのビデオコーデックパックがインストールされているか、古いバージョンを使用しているためです。または、たとえば、Windows7はもはやそれを必要としません。

しばらく前にlibvlcで遊んだとき、サポートされているすべてのビデオコーデックでプラグインパスを指定することができましたが、残念ながら、DirectShowLibに似たものを見つけることができないようです。

必要なコーデックライブラリをアプリケーションの一部としてパックしてそのフォルダを指す方法、またはFFDShowを特定のフォルダにインストールしてそのフォルダを参照する方法はありますか?

4

1 に答える 1

2

考えられるアプローチの 1 つは、登録不要の COM を使用することです。サブコンポーネントの特定のグループ (FFDShow コンポーネントを含むサブディレクトリなど) を使用していることをマニフェスト ファイルで指定します。そのサブディレクトリにある DLL のマニフェストも作成する必要があります。主な落とし穴は、次のように C# からオブジェクトをインスタンス化する必要があることです。

DsGuid MicrosoftDemux = new DsGuid("{AFB6C280-2C41-11D3-8A60-0000F81E0E4A}");
var demux = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(MicrosoftDemux));

フィルターを取得したら、それをグラフに追加したり、他のインターフェイスにキャストしたり、やりたいことが何でもできます。

FFDShow コンポーネントのマニフェスト ファイルを作成するには、regsvr42 を使用できます (この回答で説明されています: 登録用のマニフェスト ファイルの生成 フリー COM

これを使用して、登録せずに DirectShow フィルターを使用することに成功しました。COM ファイルは、アプリケーションと同じディレクトリまたはサブディレクトリに配置する必要があることに注意してください。それらを隣接するディレクトリに配置しても機能しません。

于 2011-02-17T23:33:54.153 に答える