AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WebCam via Stream senden

Ein Thema von ByTheTime · begonnen am 18. Sep 2012 · letzter Beitrag vom 30. Sep 2012
Antwort Antwort
ByTheTime

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

AW: WebCam via Stream senden

  Alt 19. Sep 2012, 21:26
Danke an euch, ich versuche es so, das sieht schonmal ganz gut aus
Lukas
  Mit Zitat antworten Zitat
ByTheTime

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

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
ByTheTime

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

AW: WebCam via Stream senden

  Alt 21. Sep 2012, 19:14
Darf ich es vllt. doch noch mal Pushen
Lukas
  Mit Zitat antworten Zitat
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#4

AW: WebCam via Stream senden

  Alt 22. Sep 2012, 09:53
Hi!

Ist das jetzt ein reines Problem der Kommunikation, oder spuckt die WebCam Geschichte mit rein in die Suppe?
Falls der WebCam Zugriff verdächtig ist: Hast Du die Übertragung mal nur mit einem Bitmap versucht, so ganz ohne WebCam etc.?

Gruß
Michael
  Mit Zitat antworten Zitat
ByTheTime

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

AW: WebCam via Stream senden

  Alt 22. Sep 2012, 16:58
Nein, irgendeine Bitmap klappt auch nicht, es muss am Server-Code liegen, aber ich weiß nicht wo. Da ich erstmal nur ein Frame übertragen wollte, habe ich natürlich viel kopiert Der Autor des Originalthreads (siehe hier) hat zwar seinen ClientCode gepostet, aber nicht den ServerCode. Erst als es um die Kompression ging, hat er etwas ServerCode gezeigt. Es liegt am StreamRead im 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); //Hier tritt der Fehler auf. Ich weiß nicht genau, was hier rein muss,
                                   //der Code ist aus dem oben genanntem Thema abgeleitet, an dem Punkt
                                   //ging es aber schon um Kompression, was ich ja erstmal nicht will.
    finally
      //bmp.LoadFromStream(FStream);
      JvImage1.LoadFromStream(FStream);
      FStream.Free;
    end;
  end;
end;
Lukas

Geändert von ByTheTime (22. Sep 2012 um 17:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: WebCam via Stream senden

  Alt 22. Sep 2012, 17:05
Irgendwie scheinen mir Server und Client vertauscht zu sein.

Das lesen in Data scheint mir keinen sinn zu machen zumal etwas in der wie

Delphi-Quellcode:
SetLength(Data,1000000);
FStream.Read(Data[1], 1000000);
da stehen müsste, wenn man denn wüsste dass der Stream 1000000 Bytes enthält.

bmp.LoadFromStream(FStream);

wäre richtig wenn der Stream komplett gelesen würde
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
ByTheTime

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

AW: WebCam via Stream senden

  Alt 22. Sep 2012, 21:07
Hmm... Also irgendetwas läuft bei mir schief. Im Anhang befindet sich mal mein gesamtes Projekt, es ist etwas unordentlich, ist ja auch nur ein kleier Test, um es später, wenn es funktioniert, in ein anderes Projekt zu übernehmen. Das mit dem Read verstehe ich einfahc nicht. Wenn einer Lust und Zeit hat, kann er sich das ja mal anschauen. Aber ich verstehe nicht, wie ich den gesendeten Stream TCPClient.Socket.Write(MStream, 0, true); vollständig lesen soll FStream.Read(???); //Was muss hier rein? . Genau das ist mein Problem. Sorry für mein Unverständnis

Danke
Angehängte Dateien
Dateityp: rar SocketCam.rar (650,7 KB, 17x aufgerufen)
Lukas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz