如何讓directshow 不使用系統的任何解碼器? 系統解碼器往往與自己呼叫的解碼器不兼容?
像 迅雷看看 APlayer 控制元件 就沒有使用 任何系統的解碼器 這是怎么做到的呢? 還是重寫了 DirectShow 的 Grahp???
uj5u.com熱心網友回復:
不懂!支持一個!uj5u.com熱心網友回復:
"像 迅雷看看 APlayer 控制元件 就沒有使用 任何系統的解碼器"不知道你根據什么來說的
uj5u.com熱心網友回復:
傳聞已久的百度手機作業系統(官方未定性)“易平臺”官方網站已經上線,將在百度世界2011進行發布uj5u.com熱心網友回復:
directshow 的filter 一般是 xxx.ax,實際上是一個 active x 組件,你可以用 LoadLibrary 把它讀入 我這有段代碼你可以參考前提是,你開發時還是要注冊一下你的解碼器的,這樣取得解碼器的 class id 比較容易,然后帶上這個解碼器.ax, 運行時用下面這段代碼載入后 ,FitlerGraph.AddFilter 進去,然后再用 FilterGraph.RenderFile 或 Render(Pin) ,FilterGraph 會首選你已加入的 Filter, 或者,你自已全部搞定 Connect
function TFilterProp.CreateFilterFromFile: IBaseFilter;
var
SaveCurrDir: string;
DllGetClassObject: TDllGetClassObject;
ClassFactory: IClassFactory;
begin
if Length(FFileName) = 0 then Exit;
if IsEqualGUID(FClassGUID, GUID_NULL) then Exit;
SaveCurrDir := GetCurrentDir;
try
SetCurrentDir(ExtractFilePath(FFileName));
FHLib := LoadLibrary(PChar(FFileName));
if FHLib = 0 then Exit;
DllGetClassObject := GetProcAddress(FHLib, 'DllGetClassObject');
if not Assigned(DllGetClassObject) then
begin
FreeLibrary(FHlib);
FHlib := 0;
Exit;
end;
DllGetClassObject(FClassGUID, IClassFactory, ClassFactory);
if not Assigned(ClassFactory) then
begin
FreeLibrary(FHlib);
FHlib := 0;
Exit;
end;
ClassFactory.CreateInstance(nil, IBaseFilter, Result);
if not Assigned(Result) then
begin
FreeLibrary(FHlib);
FHlib := 0;
end;
finally
SetCurrentDir(SaveCurrDir);
end;
end;
上面代碼來至于 http://sourceforge.net/projects/ddshow/?source=directory
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/124532.html
上一篇:視頻格式轉化問題
下一篇:win7系統DLL遠程注入 藍屏
