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
Benutzerbild von himitsu
himitsu

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

AW: Bild von IP-Webcam auslesen

  Alt 14. Nov 2013, 23:26
Du bekommst im OnError (ErrorMessage) und vorher auch nochmal im OnConnected (ReceivedHeader) den HTTP-Header geliefert, wo du diesen Statuscode auslesen kannst.

Falls ich mich jetzt nicht vertan hab, sähe 'ne Billigvariante für OnError mit ErrorCode=TMJpegClient.eFAILURE so aus:
Delphi-Quellcode:
i := Pos(sLineBreak, ErrorMessage); // bzw. 'HTTP/' statt sLineBreak
i := PosEx(' ', ErrorMessage, i);
StatusCode := Copy(ErrorMessage, i + 1, 3);

StatusCode := Copy(ErrorMessage, PosEx(' ', ErrorMessage, Pos(sLineBreak, ErrorMessage)) + 1, 3);
Ab der zweiten Zeile fängt der Header an und da steht immer in der 1. Zeile der Statuscode.
HTTP/1.1 200 OK (HTTP-Version Leerzeichen StatusCode Leerzeichen StatusTextBisZeilenende)



Bestimmt wäre es möglich diese Fehlernachrichten direkt als TStrings anstatt String an diese Events zu übergeben, dann wäre Auswerten etwas einfacher.
[edit]
Als TStrings hätte es denn Vorteil, daß der RequestHeader immer an der selben Stelle (Index) anfangen könnte, da einzeilne Zeilen Strings auch Zeilenumbrüche enthalten können.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Nov 2013 um 23:37 Uhr)
  Mit Zitat antworten Zitat
ramboni

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

AW: Bild von IP-Webcam auslesen

  Alt 15. Nov 2013, 00:12
Bei
.Connected(Sender: TObject; ReceivedHeader: TStrings);

bekomme ich mit ReceivedHeader.Text in der ersten Zeile: HTTP/1.1 401 Unauthorized
Was super ist.

Allerdings bekomme ich bei
.Error(Sender: TObject; ErrorCode: HRESULT; ErrorMessage: string);

<HTML><HEAD><TITLE>401 Unauthorized</TITLE></HEAD>
<BODY BGCOLOR="#cc9999"><H4>401 Unauthorized</H4>
Authorization required.
</BODY></HTML>


Das sieht irgendwie nicht nach einem Header aus, oder?
Hier wäre "HTTP/1.1 401 Unauthorized" cool
Oder muss da was von HTML stehen?

LG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bild von IP-Webcam auslesen

  Alt 15. Nov 2013, 02:00
Joar, gerade bei der einen ErrorMessage war kein Header dabei, obwohl es Einen gibt.

NWar nur der Fehlertext, den der Server ausgibt, der natürlich sonstwie aussehen kann ... angefangen bei einem einfachen Text, wo "401 Unauthorized" steht, bis zu einer mehr oder weniger aufwändigen HTML-Seite.
(der Witz ist, jetzt wenn ich drüber nachdenke, dann hatte ich an der Stelle den Header auch noch absichtlich weggelassen )

Delphi-Quellcode:
if ErrorMessage.Length > 2 then
  StatusCode := StrToInt(Copy(ErrorMessage[2], Pos(' ', ErrorMessage[2]) + 1, 3));
[edit]
Anhang nochmal ausgetauscht (09:30 17:22)
Angehängte Dateien
Dateityp: 7z MJpegClient.7z (74,8 KB, 82x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Nov 2013 um 16:23 Uhr) Grund: Fehler berichtigt - siehe Antwort #35
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bild von IP-Webcam auslesen

  Alt 15. Nov 2013, 08:30
Ich kopiere das mal für Alle hier mit rein.

Zitat von ramboni:
Gibt es ein Event wenn der Benutzername/Passwort falsch sind
bzw. wie kann ich soetwas feststellen?
Ein direktes Event dafür gibt es nicht,
aber da die Kamera in diesem Fall die Verbindung verweigern sollte, kommt natürlich bei OnError eine entsprechende Meldung an,
jenachdem wie der Server in der Kamera darauf reagiert und was/ob er dann zurückgibt.

Zitat von ramboni:
Ich habe eine relativ hohe CPU-Auslastung wenn ich beide Kameras aktiviert habe
bzw. den Stream ca. 5x gleichzeitig öffne. Mach ich da was falsch? Ich habe die Ausgabe
auf einem Image.
Das Dekodieren und Anzeigen der Bilder braucht halt ein bissl Rechenleistung.

Man könnte die Streamverarbeitung ausbremsen, indem man z.B. ein Sleep nach jedem Bild einfügt.
z.B. siehe Max FPS in MJpegTest_OnImage, MJpegTest_OnData

Aber einige Kameras scheinen das nicht ganz zu mögen und trennen irgendwann die Verbindung (womöglich Überlauf des Sendepuffers).
Bzw. dabei könnte das Video mehr oder weniger verzögert sein.

Man kann auch versuchen die Bearbeitung der Bilder anders zu lösen.
- Also bei OnDataReceived einsteigen und den Stream in eine andere/schnellere JPEG-Komponente einlesen.
- Und/oder die Ausgabe/Darstellung anders lösen?

Oder man könnte über OnPreReceived dafür sorgen, das garnicht erst alle empfangenen Bilder verarbeitet werden.
Result := (GetTickCount - ReceiveStart) >= 1000; = überspringe das Bild, wenn das letzte Bild vor weniger als einer Sekunde angezeigt wurde.
Damit würde der Datenstrom zur Kamera nicht beeinflusst.
Man kann ja gern versuchen da auch nochmal ein kleines Sleep reinzumachen, um zusätzlich nochmal den Traffic zu beschränken.

Zitat von ramboni:
Du schreibst in deinem Text: " gesendete Anfrage-Header kann angepasst werden"
Kannst du mir sagen wie das geht? Verschlüsselung hört sich interessant an
Die einfachste Verschlüsselung ginge via HTTPS. (in wie weit und ob das jetzt schon möglich ist, weiß ich aber noch nicht)

In OnConnecting kannst du den RequestHeader bearbeiten, bevor er zur Kamera gesendet wird.
Da könnte man z.B. eine Komprimierung oder eben Verschlüsselung aktivieren, indem man die passenden Werte im Header übergibt.

Es kommt aber alles darauf an, was die Kamera für Funktionen anbietet, denn die muß da ja mitmachen.

Und über OnReceiveDebug kommt man an TTCPClient.OnReceive und TTCPClient.OnSend ran, wo man dann die empfangenen/gesendeten Daten komprimieren/dekomprimieren/verschlüsseln/entschlüsseln.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
ramboni

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

AW: Bild von IP-Webcam auslesen

  Alt 15. Nov 2013, 15:27
Moin,

bei mir funktioniert:

Delphi-Quellcode:
if ErrorMessage.Length > 2 then
  StatusCode := StrToInt(Copy(ErrorMessage.ValueFromIndex[2], Pos(' ', ErrorMessage.ValueFromIndex[2]) + 1, 3));
leider nicht. Zum einen kennt er ErrorMessage.Length nicht und ValueFromIndex[2] ist leer.

Mit:
Copy(ErrorMessage[2], Pos(' ', ErrorMessage[2]) + 1, 3)) bekomme ich jedoch 401 als String zurück...

Also Danke Danke Danke
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bild von IP-Webcam auslesen

  Alt 15. Nov 2013, 15:40
Was steht denn insgesamt in ErrorMessage / ErrorMessage.Text drin?

Wenn ich mich nirgendwo verzählt hab, dann sollte in [0] ein Text passend zum ErrorCode stehen,
in [1] eine Zusatzinfo, wie z.B. das übersetzte GetLastError
und ab [2], falls vorhanden, der empfangene HTTP-Header.


[edit]
Stimmt, die erste Zeile vom HTTP-Header ist noch anders formatiert.
Dein zweiter Code ist also richtig.

Bei den 3xx-StatusCodes könnte man sich mit URL := Trim(ErrorMessage.Value['Location']); die neue URL besorgen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Nov 2013 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
67 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Bild von IP-Webcam auslesen

  Alt 15. Nov 2013, 23:20
Ich habe schon ein paar Kameras mit diesem ActiveX eingebunden.
http://www.axis.com/techsup/software/amc/software.php

Hier ist auch ein Video.
http://www.axis.com/de/techsup/cam_s...ev/activex.htm
Thomas Levering
  Mit Zitat antworten Zitat
Antwort Antwort


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:05 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