2011-02-13 23 views
0

我在C#應用程序中使用DirectShowLib來允許視頻播放。不幸的是,並非所有系統都提供了體面的視頻編解碼器,所以我選擇安裝FFDShow作爲我的安裝的一部分。不幸的是,這似乎不適用於某些用戶,因爲他們已經安裝了幾個視頻編解碼器包或正在使用舊版本。或者,例如,Windows 7不再需要它。在DirectShowLib中使用特定的編解碼器或ffdshow文件夾?

前段時間我在玩libvlc時,他們允許我用所有支持的視頻編解碼器指定插件路徑,但不幸的是我似乎無法找到類似於DirectShowLib的東西。

有沒有辦法要麼打包所需的編解碼器庫,我的應用程序和點的一部分到該文件夾​​,或者安裝的FFDShow到一個特定的文件夾和參考誰的呢?

回答

2

你可以採取的一種可能的方法是使用免註冊的COM。您可以在清單文件中使用特定的子組件組(例如包含FFDShow組件的子目錄)。您還需要爲該子目錄中的DLL創建清單。主要的疑難雜症是你必須實例化從C#與此類似對象:

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

一旦你的過濾器,你可以把它添加到您的圖形,轉換爲其他接口,或者其他任何你想做的事。

爲了幫助創建的FFDShow部件清單文件,你可以使用regsvr42(在這個答案說明:Generate Manifest Files for Registration Free COM

我已經成功地使用這種用DirectShow過濾器而無需註冊他們有一點要記住的是COM文件必須與您的應用程序或子目錄位於相同的目錄中。將它們放在相鄰目錄中將不起作用

相關問題