![]() |
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 |
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:
|
Re: Webcamstream über Indys an andern Rechner schicken
Also ich kenne keine Webcam die Bitmaps verschickt...
Die meisten schicken JPG's. Zitat:
|
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 |
Re: Webcamstream über Indys an andern Rechner schicken
Hi,
bei mir gehts nichtso ganz... folgendes habe ich: Client:
Delphi-Quellcode:
Server: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;
Delphi-Quellcode:
ich hoffe ihr könnt mir helfen :-)
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; |
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... |
Re: Webcamstream über Indys an andern Rechner schicken
Zitat:
siehe beitrag vor dir |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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