AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi WMV/WMA und DRM *hmz*

WMV/WMA und DRM *hmz*

Ein Thema von Peter666 · begonnen am 23. Mai 2009
Antwort Antwort
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

WMV/WMA und DRM *hmz*

  Alt 23. Mai 2009, 22:40
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

Theoretisch sollte für die Wiedergabe von DRM Material ja folgender Code ausreichen:

Delphi-Quellcode:
  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;
Hinweise und Links zu obiger Lib nehme ich dankbar entgegen :wub:

Peter
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz