Einzelnen Beitrag anzeigen

ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#7

AW: WebCam via Stream senden

  Alt 19. Sep 2012, 21:52
Okay, etwas geht dennoch nicht Hier etwas Code:

Client:

Delphi-Quellcode:
procedure TFormMain.FormActivate(Sender: TObject);
var
  DeviceList: TStringList;
begin
  if fActivated then
    Exit;

  fActivated := true;

  DeviceList := TStringList.Create;
  fVideoImage.GetListOfDevices(DeviceList);

  if not DeviceList.Count < 1 then
  begin
    fVideoImage.VideoStart(DeviceList[0]);
    Timer1.Enabled := true;
  end;
end;

procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  fVideoImage.VideoStop;
end;

procedure TFormMain.FormCreate(Sender: TObject);
begin
  TCPClient.Connect;
  fActivated := false;
  fVideoImage := TVideoImage.Create;
  fVideoBitmap := TBitmap.Create;
  PaintBox1.Align := alClient;
  fVideoImage.SetDisplayCanvas(PaintBox1.Canvas);
  fVideoImage.OnNewVideoFrame := OnNewVideoFrame;
end;

procedure TFormMain.SendStream(pic: TBitmap);
var
  MStream: TMemoryStream;
begin
  MStream := TMemoryStream.Create;

  try
    pic.SaveToStream(MStream);
    MStream.Position := 0;
    try
      TCPClient.Socket.Write(MStream, 0, true);
    except
    end;
  finally
    MStream.Free;
  end;
end;

procedure TFormMain.OnNewVideoFrame(Sender: TObject; Width: integer;
  Height: integer; DataPtr: pointer);
begin
  fVideoImage.GetBitmap(fVideoBitmap);
  SendStream(fVideoBitmap);
  fVideoImage.VideoStop; //Erstmal fehlerfrei nur ein Einzelbild erhalten.
end;

procedure TFormMain.Timer1Timer(Sender: TObject);
begin
  //SendStream(fVideoBitmap);
end;
Server:

Delphi-Quellcode:
procedure TForm1.TCPServerExecute(AContext: TIdContext);
var
  Data: string;
  FStream: TMemoryStream;
  bmp: TBitmap;
begin
  FStream := TMemoryStream.Create;

  try
    AContext.Connection.Socket.ReadStream(FStream);
    FStream.Position := 0;
  finally
    try
      FStream.Read(Data, 1000000);
    finally
      //bmp.LoadFromStream(FStream);
      JvImage1.LoadFromStream(FStream);
      FStream.Free;
    end;
  end;
end;
Irgendwo schimmelt der Server immer ab, sobald ein Stream gesendet wird, bleibt das Ding hängen Also da steht dann: "CamServer.exe funktioniert nicht mehr", eine dieser Windows-Fehlermeldungen, also keine Exception im Programm oder so. Und ich weiß nicht genau, wie ich die Bitmap die ich bekomme enzeigen lassen soll, oben ist der Code ohne komprimieren, ich will erstmal ein Bild sehen.

Danke
Lukas
  Mit Zitat antworten Zitat