![]() |
AW: Bild von IP-Webcam auslesen
Oder Du nimmst das VLC ActiveX Control.
Das kann RTSP und Screenshots aus dem Videostream IMHO auch. |
AW: Bild von IP-Webcam auslesen
Dann muß aber vermutlichauf dem Zielkomputer der VLC-player installiert sein?
Ist vielleicht etwas übertrieben, wo die dort auf dem arbeitsrechner eh keine Videos gucken dürfen. :angel: HTTP ging leider nicht :( (wäre auch zu Einfach gewesen :lol:) Ist jetzt kein Problem an deiner Komponente, sondern mehr ein kleiner Fehler bei der Verwaltung.
Delphi-Quellcode:
Drück einfach mal mehrmals auf Starten (ok, da passiert hier nicht viel, außer daß jetzt mehrere Threads arbeiten),
procedure TfrmMain.Button1Click(Sender: TObject);
begin FreeAndNil(Client); // Schließen, wenn schon offen Client := TMJPEGClient.Create('192.168.1.10', 80, '/videostream.cgi'); // die URL ist bei vielen Kameras anders, also anpassen! Client.OnJPEGReceived := JPEGReceived; ... Client.Start; end; procedure TfrmMain.Button2Click(Sender: TObject); begin FreeAndNil(Client); end; procedure TfrmMain.FormDestroy(Sender: TObject); begin FreeAndNil(Client); // auch wenn du zwar den Thread über das Terminated abbrichst, bleibt die Komponente bestehen und könnte womöglich auch noch nach dem freigeben des Fensters nochmal versuchen drauf zuzugreifen. end; aber mehrmals auf Stoppen geklickt, wird vermutlich schön knallen (aber mindestens einmal mußte vorher der thread gestartet wurden sein). |
AW: Bild von IP-Webcam auslesen
Ja, das ist mir auch aufgefallen... Da das aber ein Beispiel ist, war mir das egal, es ging ja um die Klasse TMJPEGClient ;-)
edit: wenn man die Klasse dann noch in eine Komponente gießt, kann man die Verwaltung dort ja sauberer gestalten... |
AW: Bild von IP-Webcam auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Das Demoprogramm funktionierte soweit erstmal.
Ich hatte mir nur in die GUI noch ein paar Edits reingemacht, um leichter Testen zu können. (EXE im Anhang, falls noch wer bei seiner Webcam testen möchte) Nach einer Weile blieb allerdings das Bild einfach hängen und veränderte sich nicht mehr. Es gab keine Fehlermeldung und die Form-Caption stand auf Verbunden. Bei Klick auf Stoppen kam dann aber manchmal die Meldung "Verbindung wurde vom Host getrennt." (wobei es bei mir zwei verschachtelte RDP-Sitzungen gab, da der Kundenrechner nur von unserem Server aus erreichbar ist, was hier und da einige Problemchen verursacht) Und Stretch macht sich mit Proportional zusammen auch nicht schlecht. Der TThread ist jetzt noch nicht raus, aber so sieht man erstmal die Unterschiede direkter. - die winzigen zu synchronisierenden Prozeduren als anonyme Methoden angelegt (aus 2-3 Funktioen wurde jeweils nur noch Eine) - die globelan Klassenvariablen entfernt, welche eh nur für die Synchronisierung verwendet wurden - FormatMessage+FORMAT_MESSAGE_FROM_SYSTEM durch SysErrorMessage ersetzt - Klassenintern auch auf die internen Variablen gegangen, anstatt über die öffentlichen Property (da wo es intern nur an der einen Stelle Zugriffe gibt ... so könnte man später auch Getter und Setter verbauen, um externe Zugriffe zu verarbeiten) |
AW: Bild von IP-Webcam auslesen
Hmmm irgendwie flackert das Bild jetzt aber... Ist das bei dir nicht so?
btw: Das mit den anonymen Methoden kannte ich noch nicht, das finde ich echt nett :) edit: das Flackern liegt am "proportional = true" außerdem:
Delphi-Quellcode:
Das erzeugt unter XE4 einen Fehler.
procedure TMJPEGClient.Execute;
... JPEGStream := TStream.Create; ... JPEGStream.Position := 0; ... end; Der setter von Position ruft intern Seek auf. Und dort steht: Zitat:
Delphi-Quellcode:
procedure TMJPEGClient.Execute;
... JPEGStream := TMemoryStream.Create; ... end; |
AW: Bild von IP-Webcam auslesen
OK, das Flackern hatte ich bemerkt, aber ich dachte das liegt am RDP.
Evntuell könnte man hier mit DouleBuffered was machen, aber so unproportional verzerrt sieht das Bild schon etwas komisch aus. Wie gesagt, geh ich hier über zwei verschachtelte RDP-Sessions (Schlepptop > Firmenserver > Kundenrechner) und RDP ist in manchen Belangen doch etwas "eigenartig". Ja, beim Erstellen sollte natürlich TMemoryStream drinstehn. :oops: (eventuell hatte ich zum Testen die falsche Datei übertragen) |
AW: Bild von IP-Webcam auslesen
Nachdem ich das jetzt in eine Komponente gegossen habe, bin ich nun eigentlich ziemlich zufrieden =) Habe den Stream jetzt schon seit über einer Stunde an und keinerlei Unterbrechungen... Auch die interne Verwaltung ist mit einer Komponente entsprechend eleganter geworden...
Danke für deine Tipps :) |
AW: Bild von IP-Webcam auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Wobei deine Streamauswertung eher als "böse" anzusehn ist.
Bei TP sieht der MJPEG-Stream so aus: boundary gibt den Code an, für da, wo ein neues Bild anfängt .... das ist praktisch genauso, wie bei bei den Multipart-eMails (HTML/Text/Anhänge).
Code:
Mal so aus Interesse, was steht denn bei dir im Log-Memo?
HTTP/1.1 200 OK
Server: httpd Cache-Control: no-store Pragma: no-cache Connection: close Content-Type: multipart/x-mixed-replace;boundary===AMTKSTILLIMAGEBOUNDARY== --==AMTKSTILLIMAGEBOUNDARY== Content-Type: image/jpeg Content-Length: 5495 {5495 Bytes ohne Zeilenumbruch am Ende, bzw. mit, wenn man die nachfolgende Zeile dazu nimmt} --==AMTKSTILLIMAGEBOUNDARY== Content-Type: image/jpeg Content-Length: 5507 {5507 Bytes} --==AMTKSTILLIMAGEBOUNDARY== Content-Type: image/jpeg ... > starten und nach ein paar Bildern wieder stoppen |
AW: Bild von IP-Webcam auslesen
Mit der Exe bekomme ich gar kein Bild:
Zitat:
|
AW: Bild von IP-Webcam auslesen
Bei der EXE ist Post 80 eingestellt. Das hattest du auch auf deine 81 geändert?
Im Anhang ist die selbe EXE, nur halt mit deinen Werten in den Edits. OK, auch wenn kein Bild, so kommt dennoch ordnungsgemäß eine schöne HTML-Seite zurück. :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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