AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild von IP-Webcam auslesen

Ein Thema von himitsu · begonnen am 1. Okt 2013 · letzter Beitrag vom 8. Apr 2024
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#21

AW: Bild von IP-Webcam auslesen

  Alt 2. Okt 2013, 13:22
Ja, ich hatte alles korrekt eingetragen.
Bekomme aber immer noch 400 Bad Request... Hast du etwas an dem GET geändert?

Ich habe den Traffic mal mit meinem Programm geloggt:
Code:
'HTTP/1.1 200 OK'
'Server: Netwave IP Camera'
'Date: Wed, 02 Oct 2013 11:14:47 GMT'
'Accept-Ranges: bytes'
'Connection: close'
'Content-Type: multipart/x-mixed-replace;boundary=ipcamera'
''
'--ipcamera'
'content-type: image/jpeg'
'content-length: 36352'
''
Binärdaten
''
'--ipcamera'
'content-type: image/jpeg'
'content-length: 36352'
''
Binärdaten
''
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.029 Beiträge
 
Delphi 12 Athens
 
#22

AW: Bild von IP-Webcam auslesen

  Alt 2. Okt 2013, 13:48
OK, dann ist das StreamFormat zumindestens gleich.


Etwas geändert ja (im OnConnect kann man für den RequestHeader weitere Zeilen mit übergeben), aber da dort nichts gemacht wird, sollte der Header eigentlich gleich bleiben.

Ich geb den Haeder mal mit ans Log aus.

[edit]
Und über eine CheckBox kann man angeben, ob die Header einzeilig (so wie es vorhin noch war) oder zusammenhängend versendet wird.
Angehängte Dateien
Dateityp: zip DP-MJPEG2.zip (782,1 KB, 72x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#23

AW: Bild von IP-Webcam auslesen

  Alt 2. Okt 2013, 14:00
Ich habe dir mal eine PN mit den Zugangsdaten zu meiner Cam geschickt, vielleicht kannst du damit besser testen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.029 Beiträge
 
Delphi 12 Athens
 
#24

AW: Bild von IP-Webcam auslesen

  Alt 2. Okt 2013, 14:15
Du wirst es bestimmt nicht glauben, aber deine Kamera versteht auschließlich nur den Windowszeilenumbruch (#13#10).
Die ist einfach nicht mit der Linux-Variante (#10) klargekommen und auch den Mac (#13) mag sie nicht.

Und ich dachte mir so "läßt'e mal die #13 besser weg, nicht daß eine Kamera mal mit Windows nicht klar kommt"
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.029 Beiträge
 
Delphi 12 Athens
 
#25

AW: Bild von IP-Webcam auslesen

  Alt 2. Okt 2013, 16:31
Sooo,

noch ein bissl Fehlerbehandlung mit rein und versucht die Header mit auszuwerten, dazu vorher jeweils erstmal den kompletten Header einlesen.
Die Header werden auch an die Events mit übergeben, damit dort notfalls drauf reagiert werden könnte.


Wie sieht dein Code denn nun aus?

Ach ja, content-length muß natürlich nicht immer der letzte Headereintrag sein, kurz vor dem DataStream.
Der DataStream fängt aber nach der Leerzeile an, bzw. es fängt abwechselnd, nach der Leerzeile, der Header an.
(da du ja nach dem content-length versuchst das Bild zu laden)


Für dich eventuell besser, wenn du die Events nicht via Synchronize im Hauptthread ausführst.
So könntest du mehrere Threads (je Kamera Einen) parallel laufen lassen, in deinem Service, ohne daß die sich gegenseitig ausbremsen.



Ach ja, das Flackern kommt vom TImage, welches da wohl irgendwelche Problemchen hat.
Im Code zeichne ich daher aktuell das Jpeg auf eine TPaintBox.

Je größer das TImage, um so eher und stärker flackert es.
Mit Self.DoubleBuffered läßt es sich etwas eindämmen.
Das TImage selber hat kein DoubleBuffered, da es sich auf dem Canvas seines Owners zeichnet. Und mit einem TPanel+DoubleBuffered dazwischen war auch nichts zu machen.
Angehängte Dateien
Dateityp: zip DP-MJPEG2.zip (784,5 KB, 69x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Okt 2013 um 21:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.029 Beiträge
 
Delphi 12 Athens
 
#26

AW: Bild von IP-Webcam auslesen

  Alt 10. Okt 2013, 13:16
So, bisher gab es noch keine Antwort von TP.
(die Frage nach einem direkt auslesbaren JPEG war wohl zu schwer)

Die letzten Tage hab ich vorallem den Arbeits-Thread nochmal komplett überarbeitet.
- genauer das Übertragungsprotokoll direkt auf die grundsätzliche Motion JPEG-Definition angepaßt
- die Fehlerbehandlung überarbeitet
- ein Logging für den Thread und die übertragenen Daten eingebaut, um die Funktion zu testen und die Daten-/Fehleranalyse bissl zu vereinfachen
- die Error-Events entsprechend angepaßt
- versucht einen FrameLimiter einzubauen, bzw. die FPS mitzuzählen
- und vorallem wurde das ReceiveEvent erweitert
- im Testprogramm wird die Komponente immernoch manuell erstellt, damit die Unit installiert werden muß

Wäre nett, wenn nochjemand das Programm und den Code prüfen könnte, auch mit anderen Webcams.

Nette Test-Webcams hab ich auf www.mjpeg.net entdeckt und aktuell sind ein paar knuffige Vögelchen voreingestellt.
Angehängte Dateien
Dateityp: 7z MJpegClient.7z (601,2 KB, 74x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Okt 2013 um 13:19 Uhr)
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#27

AW: Bild von IP-Webcam auslesen

  Alt 10. Okt 2013, 13:27
So, bisher gab es noch keine Antwort von TP.
Sorry, ich habe das Projekt erst mal eingefroren, da ich mich zur Zeit beruflich neu orientiere... Sobald ich wieder viel Freizeit habe, führe ich die Sache aber weiter...

(die Frage nach einem direkt auslesbaren JPEG war wohl zu schwer)
??? Habe ich da etwas übersehen? Was meinst du?

Wäre nett, wenn nochjemand das Programm und den Code prüfen könnte, auch mit anderen Webcams.
Mit meinen Webcams läuft das Testprogramm ohne Probleme.
Der Framerate-Limiter funktioniert auch.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.029 Beiträge
 
Delphi 12 Athens
 
#28

AW: Bild von IP-Webcam auslesen

  Alt 10. Okt 2013, 13:29
So, bisher gab es noch keine Antwort von TP.
Sorry, ich habe das Projekt erst mal eingefroren, da ich mich zur Zeit beruflich neu orientiere...
Keine Sorge, ich meinte TP-Link, den Hersteller der Webcam, von Welchem bisher noch keine Antwort eingetroffen ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Okt 2013 um 13:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.029 Beiträge
 
Delphi 12 Athens
 
#29

AW: Bild von IP-Webcam auslesen

  Alt 14. Okt 2013, 14:07
So, ich denk das war's jetzt erstmal.
Bis au eine Kleinigkeit (der Canvas) läuft es jetzt stabil.



Erstmal wurde eine kleine Version abgesplittet, welche einen Minimalcode enthält.

Die große Version enthält mehr Events und Einstellungsmöglichkeiten.
- diese kann aber über Compilerschalter eingeschränkt werden, z.B. indem man die VCL-Zugriffe entfernt
- es kann auf die Übertragenen Daten zugeriffen werden, z.B. zum Loggen oder für die Implementation einer Verschlüsselung
- der gesendete Anfrage-Header kann angepasst werden, z.B. für die Verschlüsselung und wenn es dort Probleme gibt
- man kann einen Canvas direkt anhängen, wo die Komponente das Bild draufzeichnet

Es sollte eigentlich für jedes Bedürfnis ein passendes Event/Property bereitstehen.
Ob und wie ich da aber noch Proxy reinbekomm, muß ich mal sehn. (sobald das direkt mit dem TTCPClient läßt es sich leicht nachrüsten)

Sehr unpraktisch ist, daß der TTCPClient in den Schleifen kein Timeout hat.
Mir war aufgefallen, daß eine Kamera manchmal einfach hängen blieb. (Connection blieb offen, aber es sind keine Daten mehr reingekommen)
So blieb meine Datenleseschleife hängen, bei "0 byte gelesen" im ReceiveBuf und landete in einer Endlosschleife. (das hab ich erstmal nicht über ein Timeout gelöst, aber dafür wird dort nun auf das "Stop" gehört)
[edit] in der MJpegClientSmall.pas fehlt dieser Bugfix noch (ist dann im nächsten Upload drin)
Aber im TTCPClient.ReceiveLn ist diese Endlosschleife dennoch drin.

Die Testprogramme sollte ich wohl auch langsam mal in Demo umbenennen.



Nun aber nochmal zum Canvas.
Die "Selbstzeichenfunktion", siehe MJpegTest_Canvas.dproj, gefällt mir noch nicht so richtig.
Vielleicht hat da jemand einen guten Vorschlag?

Ich hätte dort TGraphic als Property nehmen können, dann würde man ganz leicht auf TImage/TPicture/TJPEGImage zugreigen können.
Aber die TPaintBox hat ja kein TGraphic-Property.
So kann zwar überall draufgezeichnet werden, aber die Komponente kann die Bildgröße von den TImage/TPicture/TJPEGImage nicht automtisch anpassen.

Es kann aber auch nicht die Bildausgabe automatisch an die Zeichenfläsche angepasst werten => stretch
Und sowas http://www.delphipraxis.net/18336-gr...ermitteln.html geht ja leider nicht.

Nja, via OnDataReceived oder OnImageReceived kann man die Bilder immernoch manuell an alles übergeben.



In Punkto FrameLimiter hatte ich auch noch keine schöne Lösung.
Man kann zwar die Anzahl der angezeigten Bilder (FPS) begrenzen, indem man ein Sleep einbaut und somit die ausgabe verzögert.
Einige Cameras brechen die Verbindung ab, wenn der Sendepuffer voll ist und Andere legen nur eine Pause ein.
- nur sind dann dabei die Bilder verzögert => z.B. bei 0.1 FPS sind die Bilder um mindestens 10-20 Sekunden verzögert, wenn die Kamera ein Bild pro Sekunde ausliefert.

Die andere Lösung war, wenn man zwar alles schnell runterläd, aber z.B. via OnPreReceived die "unnötigen" Bilder überspringt.
Angehängte Dateien
Dateityp: 7z MJpegClient.7z (887,0 KB, 119x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Okt 2013 um 14:17 Uhr)
  Mit Zitat antworten Zitat
ramboni

Registriert seit: 3. Dez 2012
24 Beiträge
 
Delphi XE Starter
 
#30

AW: Bild von IP-Webcam auslesen

  Alt 14. Nov 2013, 23:06
Hallo,

ist es möglich im Falle eines falschen Request, statt den Fehlercode "-9" den
jeweiligen Fehlercode zurück zu bekommen? Sprich z.B.: 401, 404 oder 400?

Oder geht das schon und ich bin nur zu doof?

LG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 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