So, ich habe inzwischen eine vorläufige Lösung für mein Problem gefunden:
Der Einfachheit halber lasse ich die Bilder der Webcam nur in einem Bitmap speichern und verschicke dieses über das Netz.
Nach einigem Ausprobieren habe ich die komplette Routine (d.h. Client connect->Stream create->Stream read->Stream freeandnil->Client disconnect) vom Timer abarbeiten lassen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.Timer2Timer(Sender: TObject); var Filename: string; ftmpStream : TFileStream; begin try FileName := 'capture.bmp'; with IdTCPClient2 do begin if connected then DisConnect; Host := edServer.text; Port := sePort.Value +1; Connect; end; IdTCPClient2.WriteLn('PIC'); ftmpStream := TFileStream.Create(ProgDir + 'images\capture.bmp',fmCreate); IdTCPClient2.ReadStream(fTmpStream,-1,true); Application.ProcessMessages; FreeAndNil(fTmpStream); VideoOut.Picture.LoadFromFile(ProgDir + 'images\capture.bmp'); ShowMessage('Bild geladen!'); IdTCPClient2.Disconnect; except on E : Exception do ShowMessage(E.Message); end; end; |
Der Schalter zum Abrufen des Bildes aktiviert dann nur noch den Timer.
So scheint es zu funktionieren, es wird keine Fehlermeldung mehr angezeigt und die Meldung 'Bild geladen' erscheint regelmäßig.
Jetzt muss ich mich nur(!) noch um die Komprimierung des Bitmaps kümmern und das Ganze dann mal übers Internet testen.
