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-Quellcode:
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);
//while IdTCPClient2.connected do
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.