Hi,
beim Lesen der FMX.Media.Win ist mir aufgefallen, dass die Kameraklasse zwar einen VMR9 Allocator/Presenter nutzt, damit man die Bilddaten als Bitmap erhält, aber die TWindowsMedia Klasse nicht. Also dachte ich mir probierst du doch mal den Allocator/Presenter in einem normalen Videographen zu verwenden.
Delphi-Quellcode:
function GetPin(const Filter: IBaseFilter; out Pin: IPin; Dir:
TPinDirection = PINDIR_INPUT): Boolean;
var
EPins: IEnumPins;
pPin: IPin;
f: Int64;
d: TPinDirection;
begin
result := false;
Pin := nil;
if not assigned(Filter) then
exit;
if SUCCEEDED(Filter.EnumPins(EPins)) then
while EPins.Next(1, pPin, @f) = S_OK do
if SUCCEEDED(pPin.QueryDirection(d)) and (d = Dir) then
begin
Pin := pPin;
result := true;
break;
end;
end;
procedure TForm3.LoadFromFile(const AFilename: String);
var
Filter: IBaseFilter;
Pin: IPin;
begin
if FAILED(CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, FGraphBuilder)) then
exit;
FGraphBuilder.QueryInterface(IID_IMediaControl, FMediaControl);
FVMRRenderer := TVMRRenderer.Create;
FVMRRenderer.SampleBufferReady := VMRRendererSampleReady;
if SUCCEEDED(FGraphBuilder.AddSourceFilter(PChar(AFileName),'Source', Filter)) and
(FVMRRenderer.AddToGraph(FGraphBuilder)) and
(GetPin(Filter, Pin, PINDIR_OUTPUT)) and SUCCEEDED(FGraphBuilder.Render(Pin)) then
FMediaControl.Run;
end;
Das oben stehende mein Testcode und erstaunlicherweise geht der nicht. Sobald MediaControl.Run ausgeführt wird gibt es irgendwo eine
Exception. Hat sich damit jemand schon mal beschäftigt? Ich hatte bis jetzt Alcinoe von Github als Player und da gehen nur iOS und Android.
Peter