Cita:
Empezado por Casimiro Notevi
¿Ambas usan el mismo navegador?
|
No usa el navegador para reproducir la cámara, aunque como digo el componente en si ya está compilado, el código de la unidad a compilar es este:
Código:
unit Main;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
FMX.ExtCtrls, FMX.Surfaces, FMX.StdCtrls, FMX.Edit, FMX.Controls.Presentation,
VideoStream;
type
TFormMain = class(TForm)
ImageViewer: TImageViewer;
Panel: TPanel;
EditUrl: TEdit;
ButtonStartStop: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ButtonStartStopClick(Sender: TObject);
private
{ Private declarations }
VideoClient: TVideoClient;
BitmapSurface: TBitmapSurface;
WasRealignContent: Boolean;
procedure ImageAvailable(JpegImage: TByteDynArray);
public
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
{$R *.fmx}
procedure TFormMain.FormCreate(Sender: TObject);
begin
BitmapSurface := TBitmapSurface.Create;
VideoClient := TVideoClient.Create;
VideoClient.OnImageAvailable := ImageAvailable;
end;
procedure TFormMain.FormDestroy(Sender: TObject);
begin
VideoClient.Free;
BitmapSurface.Free;
end;
procedure TFormMain.ButtonStartStopClick(Sender: TObject);
begin
if not VideoClient.Active then
begin
VideoClient.Url := EditUrl.Text;
VideoClient.Active := True;
ButtonStartStop.Text := 'Stop';
EditUrl.Enabled := False;
end
else
begin
VideoClient.Active := False;
ButtonStartStop.Text := 'Start';
EditUrl.Enabled := True;
end
end;
procedure TFormMain.ImageAvailable(JpegImage: TByteDynArray);
var Stream: TBytesStream;
begin
Stream := TBytesStream.Create(TBytes(JpegImage));
try
TBitmapCodecManager.LoadFromStream(Stream, BitmapSurface);
finally
Stream.Free;
end;
ImageViewer.Bitmap.Assign(BitmapSurface);
// workaround for Android
if not WasRealignContent then
begin
ImageViewer.RealignContent;
WasRealignContent := True;
end;
end;
end.
Saludos.