Delphi XE3 a FMX audio a video

vložil Radek Červinka 5. září 2012 23:03

V nové verzi FireMonkey, jak jsem již psal, je implementována multiplatformní podpora pro audio a video a to jak pro zachytávání, tak pro přehrávání. Na Windows je používán DirectShow, na OSX pro změnu QuickTime.

Základem je jednotka FMX.Media, která obsahuje TVideoCaptureDevice, TAudioCaptureDevice (oboje poděděné z TCaptureDevice), TCaptureDeviceManager, TMediaPlayer (slouží pro přehrávání) a vizuální komponentu TMediaPlayerControl.

Dále ještě TMediaCodecManager, který podporuje správu kodeků. Podporovány jsou:

Windows:

  • audio formáty: .wma, .mp3, .wav.
  • video formáty: .avi, .wmv.

Mac OS:

  • audio formáty: .mp3.
  • video formáty: .mov, .m4v, .mp4.

Kromě toho je zde definován prototyp metody

 TSampleBufferReadyEvent = procedure (Sender: TObject; const ATime: TMediaTime) of object;

Ukáži jednoduchý příklad na zachycení a zobrazení videa. Mějme formulář s následujícími komponentami:

  TForm1 = class(TForm)
    Button1: TButton;
    ImageControl1: TImageControl;
    Button2: TButton;
    Label1: TLabel;
    Button3: TButton;
    Memo1: TMemo;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure SampleBufferReady(Sender: TObject; const ATime: TMediaTime);
  end;

a následující kód:

implementation
var
  VideoCamera : TVideoCaptureDevice = nil;
{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Get access to default video capture device
  VideoCamera := TCaptureDeviceManager.Current.DefaultVideoCaptureDevice;
  if VideoCamera <> nil then
  begin
    VideoCamera.OnSampleBufferReady := SampleBufferReady;
    VideoCamera.StartCapture;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  VideoCamera.StopCapture;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to TCaptureDeviceManager.Current.Count - 1 do
  begin
    Memo1.Lines.Add(TCaptureDeviceManager.Current.Devices[i].Name);
  end;
end;

procedure TForm1.SampleBufferReady(Sender: TObject; const ATime: TMediaTime);
begin
  // just copy frame buffer to TBitmap
  VideoCamera.SampleBufferToBitmap(ImageControl1.Bitmap, True);
  Label1.Text := IntToStr(ATime);
end;

Button1 je začátek zachytávání, Button2 je stop a Button3 je vypíše zařízení pro zachytávání.

FireMonkey video

Metoda SampleBufferReady je vyvolána když je buffer zařízení připraven s daty a uvedený kód ho zobrazí. Samozřejmě s tím bufferem můžete dělat libovolné věci. Např. aplikovat libovolný filtr z FireMonkey před zobrazením nebo uložit data na disk.

Tagy: ,

FireMonkey

Komentáře

6.9.2012 17:29:12 #

Zdeněk Vašků

No hurá. Až to bude pro Android, tak udělám synovi ve FM zvířátka i se zvukem.

Zdeněk Vašků

7.9.2012 10:40:15 #

Jaroslav Dakš

To s těma prstama umím taky, možná by se hodila anketa, aby se zjistilo kdo ještě to umí, s volbama: jen levá ruka, jen pravá, obě, žádná. Počítám, že na noze tohle nikdo neumí...

Jaroslav Dakš

7.9.2012 10:51:08 #

Radekc

To s těmi prsty byl takový skrytý vtípek.

http://ny-image2.etsy.com/il_fullxfull.195154218.jpg

Radekc

7.9.2012 11:48:52 #

Jaroslav Dakš

>> To s těmi prsty byl takový skrytý vtípek.
Tak že to má být pozdrav jsem nevěděl, natož abych tušil co to znamená :-)

Jaroslav Dakš

10.9.2012 0:45:36 #

TLama

DirectShow v Delphi je jednoduchá záležitost i bez DSPacku. Nedávno jsem si hrál s pluginem na přehrávání videa pro InnoSetup. Zabralo to pár hodin a stačily k tomu hlavičkové soubory DS.

http://stackoverflow.com/a/11495362/960757
http://code.google.com/p/inno-media-player/wiki/Reference

TMediaPlayer tedy kromě podporovaných kodeků http://tinyurl.com/DirectShowFormats bude s největší pravděpodobností podporovat přehrávání pomocí všech nainstalovaných kodeků nehledě na formát, protože graph builder dokáže sestavit dekodéry a renderery inteligentním způsobem.

TLama

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců