Delphi.cz

Český portál Delphi

Delphi XE3 a FMX audio a video

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.

Datum: 2012-09-05 22:03:00 Tagy: FireMonkey, XE3

FireMonkey