AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bild von IP-Webcam auslesen

Ein Thema von himitsu · begonnen am 1. Okt 2013 · letzter Beitrag vom 10. Jan 2016
Antwort Antwort
Seite 1 von 6  1 23     Letzte » 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#1

Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 12:03
Moin ihr.


Ein Kunde hat bei sich einige TP-Link SC3230N von seinem IT-Dienstleister installieren lassen und ich versuche nun ein bild davon in unsere Software zu bekommen.
http://www.tp-link.com.de/products/d...del=TL-SC3230N
http://www.tp-link.com.de/support/do...rsion=V1#tbl_b

Am Besten/Einfachten wäre ja der direkte Zugriff auf ein JPEG, PNG oder BMP.

Unter Netzwerk > Protokolle ist zwar Allerhand aufgelistet, aber ich fand keinen anderen Zugriff, außer über HTTP/HTTPS.
Ein FTP-, Samba- oder sonstige Server scheinen wohl nicht implementitert zu sein. Außer daß die Kamera selber darauf zugreifen und z.B. Logs abspeichern kann.

Der Zugriff auf die Videos-Streams, welche ausreichend zur Vergügung gestellt werden, ist ja "nativ" mit Delphi nicht möglich.

Ich fand zwar das http://192.168.0.236/image.jpg , aber jenes ist nicht erreichbar.
Zitat:
Can not service right now, please try later.
Und da Dieses ist erstens nicht dokumentiert und via Google und Co. war auch nichts zu finden.
(eine Anfrage an TP-Link ist aber schon raus)

Das Webinterface dieser Kamera zeigt im Browser zwar nur die VideoStreams an,
aber von irgendwo bekommt der Bild-Speichern-Knopf auf der Webseite ein JPEG im angegeben Pfad abgespeichert.
(aber das JavaScript ist sowas von verwirrend ... ich fand nichtmal raus wie und wo der Code für's Speichern versteckt ist, bzw. wo das Bild dann herkommt)


Vielleicht kennt sich ja schon jemand mit dieser oder solchen IP-Webcams aus und kann helfen?
(die ein zwei anderen vorhandenen Threads, in der DP und im restlichen Netz, waren jedenfalls nicht hilfreich, bzw. befassten sich mit anderen Problemen)



Und was Fremdkomponenten angeht:
Ich bin noch am Suchen und Rumprobieren, allerdings muß Dieses auch in XE funktionieren.
(Neueres wäre vorhanden, aber Fremdkomponenten und eventuelle Codeanpassungen lassen ein Upgrade des gesamten Projekts nicht so leicht zu)

GoogleCode - IPCamViewer
Hab ich mir noch nicht angesehn, aber die Installation/Registrierung von ActiveX-Komponenten bereitet manchmal einige Probleme (wie wir mit einer Anderen DLL schon leidlich bemerkt haben).

Torry - BasicVideo (bzw. VideoLab und VisionLab) probier ich grade aus,
aber das ist erst ab XE2, in den Demos ist nichts zu finden, und ich hab noch nicht rausgefunden, wie man damit überhaupt auf eine IP-Webcam zugreifen kann.
Dokumentation vorhanden, aber ich finde nichts.
Falls sich hier jemand mit diesen Komponenten auskennt, dann wäre ich über Hilfe sehr Dankbar.
TVLDSCapture+TVLDSImageDisplay oder TVLCapture+TVLImageDisplay auf die Form und versuchen da irgendwie die Quelle anzugeben, geht nicht.
Delphi-Quellcode:
VLCapture1.ShowVideoSourceDialog
VLDSCapture1.ShowVideoDialog(...)
VLDSCapture1.Start
VLDSCapture1.Open

---------------------------
Project5
---------------------------
Can't open video driver. - 0 - 0.
---------------------------
OK
---------------------------
Torry - VisioForge Video Capture
Noch nicht angesehn. (vorher schau ich mir IPCamViewer an)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Morphie

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

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 12:20
Ich habe gerade zufällig vor 2 Tagen eine entsprechende Klasse programmiert... Allerdings nicht für TP-Link sondern für Tenvis-Kameras.

Meine Klasse setzt voraus, dass die Kamera einen MJPEG-Stream sendet...
Das scheinen wohl viele Kameras von TP-Link zu können, aber wohl nicht alle (oder die Datenbank ist unvollständig)
http://www.ispyconnect.com/man.aspx?n=TP-Link

Gibt es für deine Kamera ein MJPEG-Stream? (bitte mal ausprobieren)


edit: gerade gesehen: http://www.tp-link.com/en/products/d...L-SC3230N#spec
Video Compression: H.264, MJPEG


Sollte also gehen...

Geändert von Morphie ( 1. Okt 2013 um 12:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.024 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 12:45
Ich habe gerade zufällig vor 2 Tagen eine entsprechende Klasse programmiert... Allerdings nicht für TP-Link sondern für Tenvis-Kameras..
emm kannst Du uns die Klasse zur Verfügung stellen?

Mavarik
  Mit Zitat antworten Zitat
Morphie

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

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 13:03
Klar, ein Beispielprojekt findest du im Anhang...
Dazu sei aber gesagt, dass
1. der Code noch keinen Praxistest durchlaufen hat und
2. der Code sicherlich noch einige Fehler hat

Aber um sich generell mal das MJPEG-Protokoll anzusehen, reicht er wohl

Falls ihr Verbesserungsvorschläge habt, dann dürft ihr die ruhig äußern, es ist meine 1. Klasse, die von TThread ableitet
Angehängte Dateien
Dateityp: zip MJPEG.zip (81,8 KB, 174x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 13:31
MJPEG und irgendwas von RealMedia liefert die Kamera via HTTP/HTTPS.

Und dann ist noch so Zeug wie eingebaut.
RTSP (Real-Time Streaming Protocol) - Port 554
Remote Playback - Port 8866 (?)


So, dann schau ich besser erstmal ob der Kunde die Kameras auch aktiviert hat.
So ging ja erstmal eine Woche drauf, nur um die IPs zu bekommen und daß die Kameras auch aktiv sind.
und vorher erstmal zu erfahren was das nun genau für Kameras sind.
Mir sagte man ja nicht, daß es IP-Webcams sind und so hab ich mich erstmal auf CAPI und Co. gestürzt und als dann alles fertig war und es beim Kunden getestet werden sollte ...... nja.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Morphie

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

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 13:37
Das Problem kenne ich... Egal wie detailliert man ein Lasten/Pflichtenheft (oder etwas vergleichbares) schreibt, es fehlen immer irgendwelche Details, die dazu führen, dass man nachbessern muss...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 13:59
Lasten- und Pflichtenheft ist gut ... "bau ma was ein, damit wir auch von einer webcam das bild in DMS bekommen"

Nja, da mach ich mal 3 Wochen Urlaub und schon schaltet wer die Kameras aus.


Aber zur Komponente.
Wenn du z.B. von TComponent erbst und den TThread nur als Unterkomponente laufen läßt, dann kann man diese Komponente auch nett auf der Form oder einem DatenModul ablegen und gemütlich über den OI die Events anhängen.
Bzw. das TThread.Execute ganz einfach über TThread.CreateAnonymousThread(...) startet, die Synchronisierung über TThread.Synchronize(nil, ...) schiebt und sich somit die komplette TThread-Instanz erspart.
(im Notfall kann ich's dir auch mal in wenigen Minütchen entsprechend umstellen)



PS: Den Mist mit dem TfrmMain.JPEGReceived hab ich auch schon erlebt.
grad erst vor paar Wochen, als ich meine Webcam schnell mal via CAPI reingebaut hatte.

Wusstest du, daß es theoretisch sowas gibt?
Delphi-Quellcode:
procedure TfrmMain.JPEGReceived(Sender: TObject; Data: TMemoryStream);
begin
  Image1.Picture.ForceType(TJPEGImage);
  Image1.Picture.Graphic.LoadFromStream(Data);
end;
Aber weil irgendein besch* Arsch diese Prozedur unbedingt als Private deklarieren mußte, sieht der Ersatz-Code praktisch so aus
Delphi-Quellcode:
procedure TfrmMain.JPEGReceived(Sender: TObject; Data: TMemoryStream);
var
  JPEG: TJPEGImage;
begin
  if not (Image1.Picture.Graphic is TJPEGImage) then begin
    JPEG := TJPEGImage.Create;
    try
      Image1.Picture.Assign(JPEG); // bzw. Image1.Picture.Graphic := JPEG;
    finally
      JPEG.Free;
    end;
  end;
  Image1.Picture.Graphic.LoadFromStream(Data);
end;
Oder eben so, wie bei dir.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Morphie

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

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 14:08
(im Notfall kann ich's dir auch mal in wenigen Minütchen entsprechend umstellen)
Das wäre nett, würde mich schon interessieren, was man noch so alles verbessern kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 15:04
Ohhh, der MJPEG-Stream das sind einfach nur viele HTTP-Anfragen in einer Connection?
Im Prinzip müsste es dann doch auch gehn, wenn ich auf den Stream einfach vie TIdHttp zugreife, welches schon eingebaut ist.
Dann könnte ich es so erstmal so beim Kunden schnell zum Laufen bringen.

Ich probiere es so dann erstmal aus und schau dann, was ich mit deiner Komponente machen kann.
Wäre auf jeden Fall einfacher, als jetzt einen ActiveX-Server zu installieren oder andere extrem große Fremdkoponenten reinzubekommen.



Für die Schnittstellen noch ein Hinweis:

Verwende besser kein TMemoryStream für die Parameter in öffentlichen Schnittstellen, sondern lieber einen passenden gemeinsamen Vorfahren.
Du kannst intern gern den TMemoryStream verwenden, aber als Parameter/Schnittstelle macht sich der Basistyp TStream besser.

z.B. kann man bei procedure Test(Data: TStream); alles übergen, was einen Stream darstellt, auch TMemoryStream und TFileStream.
Aber wurde es direkt als TMemoryStream deklariert, dann kann man keinen TFileStream mehr übergeben.
(Ausnahmen sind natürlich, wenn intern direkt auf spezielle)

In deinem Fall kommt der Stream da zwar raus und wird nicht reingegeben, aber insgesammt sind Komponenten/Codes einfacher wiederverwendbar, wenn sie sich auf gemeinsame Basistypen beziehen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Morphie

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

AW: Bild von IP-Webcam auslesen

  Alt 1. Okt 2013, 15:10
Ohhh, der MJPEG-Stream das sind einfach nur viele HTTP-Anfragen in einer Connection?
Es gibt eigentlich nur eine einzige Anfrage an den Server. Der sendet daraufhin quasi eine "unendliche" Antwort zurück.
Die "unendliche" Antwort besteht im Prinzip aus unendlich vielen JPEGs + Größenangabe usw.

Im Prinzip müsste es dann doch auch gehn, wenn ich auf den Stream einfach vie TIdHttp zugreife, welches schon eingebaut ist.
Dann könnte ich es so erstmal so beim Kunden schnell zum Laufen bringen.
Ob man mit idHTTP darauf zugreifen kann, weiß ich nicht, da der Stream ja nie komplett heruntergeladen werden kann...

Für die Schnittstellen noch ein Hinweis:
Danke, werde ich berücksichtigen

Wenn das so weitergeht, kann womöglich noch eine ordentliche Komponente entstehen (vielleicht was für die CodeLib?)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 05:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf