Hallo,
ich programmiere gerade einen ferngesteuerten webcam client mit Delphi 7 Enterprise.
Dazu nutze ich
Directx für die Webcam und IdTCPClient und Server für die Verbindung.
das ding ist eine dreieckstruktur.
ich habe ein client-server-system
und dazu einen webserver.
der server sendet die configuration an den webserver.
der client liest die config vom webserver und arbeitet dem entsprechend alles ab.
und sendet zumbeispiel den webcam stream an den server.
den webserver schalte ich zwischen aufgrund der hohen erreichbarkeit.
so kann ich indirekt den client abschalten etc. ohne dass eine direkte verbindung besteht.
die webcam greife ich über
directx ab.
siehe
http://www.delphipraxis.net/internal...webcam+directx
per timer grabbe ich einzelne frames und übertrage die per
indy an den server.
hier die prozedur des clients zum senden.
Delphi-Quellcode:
procedure TForm1.sendStream(pic:TBitmap);
var MStream:TMemoryStream;
begin
MStream:=TMemoryStream.Create;
try
pic.SaveToStream(MStream);
MStream.Position:=0;
try
IdTCPClient1.Socket.Write(MStream,0,true);
except
end;
finally
MStream.Free;
end;
end;
das gebe ich dann einfach beim server aus.
Es funktioniert alles wunderbar.
Mein Problem:
ich will natürlich keine Bitmaps versenden, aufgrund der dateigröße.
deshalb habe ich bereits jpg und png genutzt.
das funktioniert auch.
allerdings ist dementsprechend die cpu auslastung beim client dauerhaft bei über 15%
und springt auch mal auf 40%, (bei Bitmap logischerweise 0-1%)
ich suche deshalb eine praktikable kompression zum übertragen der frames.
Hoffe da hat jemand was parat