[英]Use specific codec or ffdshow folder with DirectShowLib?
我在C#應用程序中使用DirectShowLib來允許視頻播放。 不幸的是,並非所有系統都提供了不錯的視頻編解碼器,所以我選擇安裝FFDShow作為我的安裝的一部分。 不幸的是,這對於某些用戶似乎不起作用,因為他們已經安裝了多個視頻編解碼器包或正在使用舊版本。 或者,例如,Windows 7不再需要它。
一段時間前,當我使用libvlc玩游戲時,他們允許我用所有受支持的視頻編解碼器指定插件路徑,但是不幸的是,我似乎找不到與DirectShowLib類似的東西。
有沒有辦法將所需的編解碼器庫打包為我的應用程序的一部分並指向該文件夾,或者將FFDShow安裝到特定文件夾中並引用該文件夾?
您可以采取的一種可能方法是使用免注冊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文件必須與應用程序或子目錄位於同一目錄中。 將它們放在鄰居目錄中將無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.