en faite j'utilise le code suivant et je voudrais ke si l'utilisateur clique sur Record ke l'on enregistre sa video en local soit en mp3 ou mp4 svp aider moi
unit uMain;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, FMX.Media,
FMX.Platform, FMX.Objects, FMX.Layouts, FMX.Memo;
type
TCameraComponentForm = class(TForm)
CameraComponent1: TCameraComponent;
btnStartCamera: TButton;
btnStopCamera: TButton;
lblCameraType: TLabel;
cbCameraFlashType: TLabel;
imgCameraView: TImage;
btnFrontCamera: TSpeedButton;
btnBackCamera: TSpeedButton;
btnOn: TSpeedButton;
btnOff: TSpeedButton;
btnAuto: TSpeedButton;
Capture: TSpeedButton;
SaveDialog1: TSaveDialog;
RecordButton: TSpeedButton;
procedure btnStartCameraClick(Sender: TObject);
procedure btnStopCameraClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure CameraComponent1SampleBufferReady(Sender: TObject;
const ATime: Int64);
procedure btnFrontCameraClick(Sender: TObject);
procedure btnBackCameraClick(Sender: TObject);
procedure btnOnClick(Sender: TObject);
procedure btnOffClick(Sender: TObject);
procedure btnAutoClick(Sender: TObject);
procedure CaptureClick(Sender: TObject);
procedure RecordButtonClick(Sender: TObject);
private
{ Private declarations }
procedure GetImage;
public
{ Public declarations }
function AppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
end;
var
CameraComponentForm: TCameraComponentForm;
implementation
{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}
procedure TCameraComponentForm.FormCreate(Sender: TObject);
var
AppEventSvc: IFMXApplicationEventService;
begin
{ by default, we start with Front Camera and Flash Off }
{ cbFrontCamera.IsChecked := True;
CameraComponent1.Kind := FMX.Media.TCameraKind.ckFrontCamera;
cbFlashOff.IsChecked := True;
if CameraComponent1.HasFlash then
CameraComponent1.FlashMode := FMX.Media.TFlashMode.fmFlashOff;
}
{ Add platform service to see camera state. }
if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then
AppEventSvc.SetApplicationEventHandler(AppEvent);
end;
procedure TCameraComponentForm.Timer1Timer(Sender: TObject);
begin
imgCameraView.Repaint;
end;
{ Make sure the camera is released if you're going away.}
function TCameraComponentForm.AppEvent(AAppEvent: TApplicationEvent;
AContext: TObject): Boolean;
begin
case AAppEvent of
TApplicationEvent.WillBecomeInactive:
CameraComponent1.Active := False;
TApplicationEvent.EnteredBackground:
CameraComponent1.Active := False;
TApplicationEvent.WillTerminate:
CameraComponent1.Active := False;
end;
end;
procedure TCameraComponentForm.btnAutoClick(Sender: TObject);
begin
{ turn on automatic control of Flash, if supported }
if CameraComponent1.HasFlash then
CameraComponent1.FlashMode := FMX.Media.TFlashMode.AutoFlash;
end;
procedure TCameraComponentForm.btnBackCameraClick(Sender: TObject);
begin
{ select Back Camera }
CameraComponent1.Active := False;
CameraComponent1.Kind := FMX.Media.TCameraKind.BackCamera;
CameraComponent1.Active := True;
end;
procedure TCameraComponentForm.btnFrontCameraClick(Sender: TObject);
begin
{ select Front Camera }
CameraComponent1.Active := False;
CameraComponent1.Kind := FMX.Media.TCameraKind.FrontCamera;
CameraComponent1.Active := True;
end;
procedure TCameraComponentForm.btnOffClick(Sender: TObject);
begin
{ turn off Flash, if supported }
if CameraComponent1.HasFlash then
CameraComponent1.FlashMode := FMX.Media.TFlashMode.FlashOff;
end;
procedure TCameraComponentForm.btnOnClick(Sender: TObject);
begin
{ turn on Flash, if supported }
if CameraComponent1.HasFlash then
CameraComponent1.FlashMode := FMX.Media.TFlashMode.FlashOn;
end;
procedure TCameraComponentForm.btnStartCameraClick(Sender: TObject);
begin
{ turn on the Camera }
CameraComponent1.Active := True;
end;
procedure TCameraComponentForm.btnStopCameraClick(Sender: TObject);
begin
{ turn off the Camera }
CameraComponent1.Active := False;
showMessage(CameraComponent1.GetNamePath);
end;
procedure TCameraComponentForm.CameraComponent1SampleBufferReady(
Sender: TObject; const ATime: Int64);
begin
TThread.Synchronize(TThread.CurrentThread, GetImage);
// imgCameraView.Width := imgCameraView.Bitmap.Width;
// imgCameraView.Height := imgCameraView.Bitmap.Height;
end;
procedure TCameraComponentForm.CaptureClick(Sender: TObject);
var fs: TFileStream;
s: TMemoryStream;
buf: TBytes;
begin
if SaveDialog1.Execute then
imgCameraView.Bitmap.SaveToFile(SaveDialog1.FileName+'.png');
fs := TFileStream.Create('record.mp4',fmCreate);
s := TMemoryStream.Create;
try
//Image1.Picture.Graphic.SaveToStream(s);
imgCameraView.MultiResBitmap.SaveToStream(s);
SetLength(buf, s.Size);
s.Position := 0;
s.ReadBuffer(buf[0], s.Size);
//fs.WriteBuffer(, SizeOf(Integer)); <-here how do I save an integer which represents the size of the buffer? (so that when reading back i read this first.)
fs.WriteBuffer(buf[0], s.Size);
finally
s.Free;
fs.Free;
end;
end;
procedure TCameraComponentForm.GetImage;
begin
CameraComponent1.SampleBufferToBitmap(imgCameraView.Bitmap, True);
end;
{$R *.fmx}
var
recording:Boolean;
procedure TCameraComponentForm.RecordButtonClick(Sender: TObject);
begin
// svp aider moi
end;
end.
27 nov. 2014 à 15:58