Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webcamstream über Indys an andern Rechner schicken (https://www.delphipraxis.net/80008-webcamstream-ueber-indys-andern-rechner-schicken.html)

Clane 1. Nov 2006 13:30


Webcamstream über Indys an andern Rechner schicken
 
Also ich hab ne frage und zwar hab oich hier ne webcam ... die soll aber von leuten denen ich ein programm schicke zu sehn sein und zwar über das programm.

so erste frage wie mach ich das mit den indys ?? ich komm da nich so wirklich hinter .... kann mir da vllt jemand helfen ???

meine webcam wird so ausgelesen:
http://www.delphipraxis.net/internal...ghlight=webcam

Mfg. Clane

Clane 1. Nov 2006 16:48

Re: Webcamstream über Indys an andern Rechner schicken
 
achja was ich vergessen hab zu schreiben .. ich arbeite mit delphi 7 und indys sind die 9er

Clane 4. Nov 2006 11:26

Re: Webcamstream über Indys an andern Rechner schicken
 
*push*

hibbert 4. Nov 2006 12:16

Re: Webcamstream über Indys an andern Rechner schicken
 
hi,
du könntest zb. ein Bild speichern, am besten als .jpg, und dann per Indy versenden...

Alles was du zum Dateiversand brauchst findest du hier im Forum

Clane 4. Nov 2006 14:09

Re: Webcamstream über Indys an andern Rechner schicken
 
hmm naja diese möglichkeit hab ich auchschon überlegt ... aber ich würds lieber als stream machen !

MfG

DataCool 4. Nov 2006 17:07

Re: Webcamstream über Indys an andern Rechner schicken
 
Hi,

hab das ganze schon mehrfach gemacht !
Aber jetzt sag mir mal bitte wo der Unterschied ist das Bild als jpeg
in einen FileStream zu schreiben und den zu verschicken oder das Bild
in einen MemoryStream zu schreiben zu den zu verschicken ?!

Bei den Indys brauchst Du nur :

-openWriteBuffer
-WriteStream
-CloseWritebuffer

Die Buffer Befehle sind nicht zwingend erforderlich !

Greetz DataCool

Clane 4. Nov 2006 20:03

Re: Webcamstream über Indys an andern Rechner schicken
 
der unterschied um dens mir geht ist das die bilder nciht aufm pc gespeichtert werden auch nich nur für was weiß ich n paar sekunden

DataCool 4. Nov 2006 20:11

Re: Webcamstream über Indys an andern Rechner schicken
 
Hi,

Du hast nicht verstanden was ich Dir sagen wollte !

- Du hast das Bild als Bmp oder Jpeg(is auch egal)!

- Du erzeugst Dir ms := TMemoryStream.create;

- Du sagst Bild.savetoStream(ms);

- und nun verschickst Du den Stream .....writestream(ms)

- FreeAndNil(ms);

Wo hast Du da einen Plattenzugriff ?

Greetz DataCool

arnold mueller 4. Nov 2006 21:15

Re: Webcamstream über Indys an andern Rechner schicken
 
Das Bild muss ja auch irgendwie zustande gekommen sein, und ich vermute es ist per Socket Verbindung von der Kamera gekommen. Was ich sagen will: die Kamera schickt sehr wahrscheinlich einen MJPG Stream, also viele JPG Bilder in Folge. Ich denke dort könnte man ansetzen, die Daten per Stream weiterleiten und dann erst als Bild darstellen.

Zitat:

Zitat von DataCool
Hi,

- Du hast das Bild als Bmp oder Jpeg(is auch egal)!

Greetz DataCool

-
arno

edit: nicht MPEG Stream sondern MJPG Stream... sorry :roll:

Clane 5. Nov 2006 12:51

Re: Webcamstream über Indys an andern Rechner schicken
 
- Du hast das Bild als Bmp oder Jpeg(is auch egal)!

eben nicht ich hab den livestream von der webcam ...

DataCool 5. Nov 2006 15:25

Re: Webcamstream über Indys an andern Rechner schicken
 
Hi,

der LiveStream der Cam ist doch Bmp, und das kann in Ram zu Jpeg umgewandelt werden !

Greetz DataCool

arnold mueller 5. Nov 2006 15:54

Re: Webcamstream über Indys an andern Rechner schicken
 
Na sag ich doch...

Falls es kein MPEG2 oder gar MPEG4 Stream ist, dann ist es mit Sicherheit ein MJPG Stream, also ganz viele JPG Bilder in Folge. Jedes JPG Bild erkennst Du am Header.

Zitat:

Zitat von Clane
- Du hast das Bild als Bmp oder Jpeg(is auch egal)!

eben nicht ich hab den livestream von der webcam ...


arnold mueller 5. Nov 2006 16:03

Re: Webcamstream über Indys an andern Rechner schicken
 
Also ich kenne keine Webcam die Bitmaps verschickt...

Die meisten schicken JPG's.

Zitat:

Zitat von DataCool
Hi,

der LiveStream der Cam ist doch Bmp, und das kann in Ram zu Jpeg umgewandelt werden !

Greetz DataCool


flossinger 5. Nov 2006 17:18

Re: Webcamstream über Indys an andern Rechner schicken
 
Also ich übergebe meine Vidoframes aus der callback heraus in eine Variable, deren Inhalt die ich beim nächsten onread des serversockets verschicke. Das werkelt so allseits hübsch ereignisgesteuert und bleibt synchronisiert, egal wo einmal ein Engpass auftreten sollte. Memorystreams sind da sehr komfortabel an zu wenden.

Eine meiner Webcams liefert die Frames als JPEG ab und die beiden anderen als Bitmaps, die auf dem Kopf stehen.

Die Funktion capgetvideoformat stellt die Info über die Videocodierung zur Verfügung. Der Parameter videoformat.bitmapinfoheader.biCompression ist 0 bei Bitmaps und 4 bei jpegs. Wenn man das berücksichtigt, dann kann man jede Cam verwenden.

Das bewegt Video Bild kann man dann mit einem Programm oder auch genau so gut mit einem javascript im Browser ansehen. dazu braucht es nichtmal einem player und ist dennoch flackerfrei und ruckelfrei.

grüsse,
der flossinger

snapman 1. Dez 2006 17:30

Re: Webcamstream über Indys an andern Rechner schicken
 
Hi,
bei mir gehts nichtso ganz...

folgendes habe ich:

Client:

Delphi-Quellcode:

var
ms:TMemorystream;
gif:TGifimage;

begin
gif:=TGifimage.create;
gif.LoadFromFile('C:\002.gif');
ms:=Tmemorystream.Create;
gif.SaveToStream(ms);

if not client.Connected then client.connect;
ms.Position:=0;

client.Socket.WriteBufferOpen;
client.Socket.Write(ms);
client.Socket.WriteBufferFlush;
client.Socket.WriteBufferClose;

FreeAndNil(ms);

end;
Server:

Delphi-Quellcode:
procedure TForm1.ServerExecute(AContext: TIdContext);
var
ms:TMemorystream;
gif:TGifimage;

begin
ms:=Tmemorystream.Create;
gif:=TGifimage.Create;

 AContext.Connection.Socket.ReadStream(ms);

gif.LoadFromStream(ms);
gif.SaveToFile('C:\xyz.gif');

end;
ich hoffe ihr könnt mir helfen :-)

Mavarik 1. Dez 2006 17:42

Re: Webcamstream über Indys an andern Rechner schicken
 
Hi!

Das Problem ist, das Du i.d.R. für den Upload nicht genug DSL Bandbreite zur Verfügung hast.
Somit mußt Du Dich um einen Codec oder eine andere Art von Komprimierung kümmern.
Sonst wirst Du je nach Cam-Auflösung nicht mehr als 3-4 Bilder pro Sekunden übertragen können...

Wenn dann der Upload in stocken kommt, mußt Du Frames auslassen, damit es auf der anderen Seite nicht völlig blöde aussieht.

Falls Du mal einen MPEG4 Codec im Delphi Source (Keine DLL oder ActiveX) sag bescheidt..

Grüsse Frank

PS.: Mein Video-Chat kommt bisher leider auch nur auf 10 Frames/Sekunde. Muss wohl meinen eigenen Codec noch ein bischen optimieren...

snapman 1. Dez 2006 17:53

Re: Webcamstream über Indys an andern Rechner schicken
 
Zitat:

Zitat von Mavarik
Hi!

Das Problem ist, das Du i.d.R. für den Upload nicht genug DSL Bandbreite zur Verfügung hast.
Somit mußt Du Dich um einen Codec oder eine andere Art von Komprimierung kümmern.
Sonst wirst Du je nach Cam-Auflösung nicht mehr als 3-4 Bilder pro Sekunden übertragen können...

Wenn dann der Upload in stocken kommt, mußt Du Frames auslassen, damit es auf der anderen Seite nicht völlig blöde aussieht.

Falls Du mal einen MPEG4 Codec im Delphi Source (Keine DLL oder ActiveX) sag bescheidt..

Grüsse Frank

PS.: Mein Video-Chat kommt bisher leider auch nur auf 10 Frames/Sekunde. Muss wohl meinen eigenen Codec noch ein bischen optimieren...

naja 3-4bilder/s reichen mir ja...müsste nur wissen was an meinem code falsch ist ;)
siehe beitrag vor dir


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz