![]() |
WMV/WMA und DRM *hmz*
Hi,
ich habe heute krampfhaft versucht DRM geschützte Formate über Directshow abzuspielen. Das Problem was ich habe ist folgendes: Ich finde auf der MSDN Seite nirgends eine Version der wmvcore.lib in welcher WMCreateCertificate zu finden ist :wall: Theoretisch sollte für die Wiedergabe von DRM Material ja folgender Code ausreichen:
Delphi-Quellcode:
Hinweise und Links zu obiger Lib nehme ich dankbar entgegen :wub:
TKeyProvider = class(TInterfacedObject, IServiceProvider)
function QueryService(const rsid, iid: TGuid; out Obj): HResult; stdcall; end; ... function TKeyProvider.QueryService(const rsid, iid: TGuid; out Obj): HResult; stdcall; var punkCert: IUnknown; LibHandle: Cardinal; WMCreateCertificate: function(out pUnkCert: IUnknown): HRESULT; stdcall; begin result := E_NOINTERFACE; if (isEqualGUID(rsid, IID_IWMReader)) then begin LibHandle := LoadLibrary('wmvcore.dll'); // <-- Jaja ich weiß, da war die Funktion mal drin... if (LibHandle > 0) then begin WMCreateCertificate := GetProcAddress(LibHandle, 'WMCreateCertificate'); if assigned(WMCreateCertificate) then begin result := WMCreateCertificate(punkCert); if SUCCEEDED(result) then IUnknown(obj) := punkCert; end; end else result := E_FAIL; freeLibrary(LibHandle); end; end; function TForm1.AddKeyProvider(const pGraph: IGraphBuilder): HRESULT; var ObjectWithSite: IObjectWithSite; const IID_IObjectWithSite: TGuid = '{FC4801A3-2BA9-11CF-A229-00AA003D7352}'; begin result := pGraph.QueryInterface(IID_IObjectWithSite, ObjectWithSite); if SUCCEEDED(result) then result := ObjectWithSite.SetSite(FProvider); end; procedure TForm1.LoadFromFile(const Filename: string); var Filter: IBaseFilter; source: IFileSourceFilter; EP: IEnumPins; outPin: IPin; ff: ULONG; begin FProvider := TKeyProvider.Create; CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IFilterGraph2, FGraph); CoCreateInstance(CLSID_WMAsfReader, nil, CLSCTX_INPROC, IID_IBaseFilter, Filter); Fgraph.AddFilter(Filter, 'ASF Source'); AddKeyProvider(FGraph); Filter.QueryInterface(IID_IFileSourceFilter, source); Source.Load(PWideChar(WideString(Filename)), nil); Filter.EnumPins(EP); EP.Reset; while EP.Next(1, outpin, @ff) = S_OK do FGraph.Render(outpin); EP := nil; FGraph.QueryInterface(IID_IMediaControl, FMC); FMC.Run; end; Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz