Bild von Webcam im Netzwerk holen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Then
Beiträge: 278
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Bild von Webcam im Netzwerk holen

Beitrag von Then »

Moin zusammen,

wir haben eine Webcam, die im Netzwerk ist. Ich kann sie vom Browser erreichen und kann auch neben dem Admin Menü, das einzelne Bild getrennt aufrufen. Soweit, so gut. Ich möchte das Bild nun speichern und krieg das nicht hin.

Der Link zur Seite lautet "http://xx.xx.xx.xx/cgi-bin/image.jpg"

Rufe ich ihn auf, startet der Browser und zeigt mir das Bild. Mit "URLDownloadToFile_(" lässt sich das Bild nicht speichern.

Wie kann ich dieses Bild speichern ??
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Bild von Webcam im Netzwerk holen

Beitrag von dige »

Schau mal im Browser Debugger oder im Quellcode, wie das gebaut ist. Der direkte Aufruf des Bildes geht vermutlich nur, wenn bestimmte Parameter vorhanden sind. Referer, Cookie/SessionID usw..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: Bild von Webcam im Netzwerk holen

Beitrag von Benubi »

Hat es jetzt funktioniert? Musst du nicht Benutzername und Passwort vielleicht mit angeben? (ggf. funktioniert es auch nur per https:// und manche browser ersetzen das http selbstständig zu https wenn sie können).
jogo
Beiträge: 118
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: Bild von Webcam im Netzwerk holen

Beitrag von jogo »

ich hab eine kleine Webcam von Revotech, und dort rufe ich den Schnapschuss so auf:
http://192.168.178.xx/cgi-bin/snapshot.cgi

Bei der ReoLink Webcam sieht das Aufruf so aus:
http://(IP-Adresse)/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=(beliebige Kombination aus Zahlen und Buchstaben)&user=(Benutzername)&password=(Benutzerpasswort)

Das Bild seh ich dann im Firefox. Ich klicke dann mit der rechten Maus auf das Bild und wähle "Grafik speichern unter...".
Standardmäßig liegt das Bild dann in ~/Downloads
Aber ich könnte im Speichern unter... - Dialog jeden anderen Ort+Name festlegen.

Aber ich wollte das auch schonmal mit den Purbasic Webcontrol probieren, um das Bild dann beim Aufrufen gleich in mein Zielverzeichnis zu speichern - bin aber irgendwie nicht dazu gekommen. Aber jetzt ist es wieder in Erinnerung geraten - mal sehn, ob ich etwas Zeit finde :)
--
Ideen gibt es viele - man muss sie nur haben...
Mint LMDE5+6 // PureBasic 6.12
jogo
Beiträge: 118
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: Bild von Webcam im Netzwerk holen

Beitrag von jogo »

Das Webcontrol war der falsche Weg. Unter HTTPRequest() im Kapitel Http in der Hilfe ist ein Beispiel (Beispiel: Asynchron), damit funktioniert der Download in den Speicher.
Nun muß das als nächstes von dort in eine Bilddatei gespeichert werden - das gelingt mir aktuell nicht...

Aber auf die schnelle funktioniert das super gut mit wget im Terminal:

Code: Alles auswählen

wget --output-document=/home/jogo/Bilder/schnapp/schnappschuss.jpg "http://192.168.178.94/cgi-bin/snapshot.cgi"
Das sollte dann mit PB per RunProgram() funktionieren (noch nicht getestet, aber hab so schon einige Kommandozeilentools gestartet):

Code: Alles auswählen

RunProgram("wget", "--output-document=/home/jogo/Bilder/schnapp/schnappschuss.jpg "http://192.168.178.94/cgi-bin/snapshot.cgi"","",#PB_Program_Wait)
cooler wär natürlich, wen das komplett mit PB gemacht wird (also ohne wget zu nutzen) - aber da fummel ich noch dran rum... :)
--
Ideen gibt es viele - man muss sie nur haben...
Mint LMDE5+6 // PureBasic 6.12
jogo
Beiträge: 118
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: Bild von Webcam im Netzwerk holen

Beitrag von jogo »

Bild wird gespeichert. Hab hier das super Beispiel HTTPRequest() im Kapitel Http aus der PB-Hilfe einfach genommen und ergänzt:

Code: Alles auswählen

UseJPEGImageDecoder() 
UseJPEGImageEncoder() 
UsePNGImageEncoder()

HttpRequest = HTTPRequest(#PB_HTTP_Get, "http://192.168.178.94/cgi-bin/snapshot.cgi", "", #PB_HTTP_Asynchronous) ;ist eine Cam von Revotech

  If HttpRequest
    Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
    
    Repeat
      Progress = HTTPProgress(HttpRequest)
      Select Progress
        Case #PB_HTTP_Success
          Debug "Download finished"
          *Buffer = HTTPMemory(HTTPRequest)
          If *Buffer
            Debug "Memory buffer size: "+MemorySize(*Buffer) ; Hier kann der Puffer auf die Festplatte oder in das verwendete Verzeichnis geschrieben werden
               Debug  CatchImage(1, *Buffer, MemorySize(*Buffer))  ;Speicherinhalt als bild-image #1 laden
               Debug  SaveImage(1, "/home/jogo/Bilder/schnapp/schnappitest_1.jpg", #PB_ImagePlugin_JPEG, 7)  ;image #1 als jpeg speichern
               Debug  SaveImage(1, "/home/jogo/Bilder/schnapp/schnappitest_2.png", #PB_ImagePlugin_PNG)      ;image #1 als png speichern
            FreeMemory(*Buffer)
          EndIf
          FinishHTTP(HTTPRequest) ; Rufen Sie immer FinishHTTP() auf, wenn die Anfrage abgeschlossen ist
          Break
          
        Case #PB_HTTP_Failed
          Debug "Download failed"
          FinishHTTP(HTTPRequest) ; Rufen Sie immer FinishHTTP() auf, wenn die Anfrage fehlschlägt
          Break
          
        Case #PB_HTTP_Aborted
          Debug "Download aborted"
          FinishHTTP(HTTPRequest) ; Rufen Sie immer FinishHTTP() auf, wenn die Anfrage abgebrochen wird
          
        Default
          Debug "Current download: " + Progress ; Der aktuelle Download-Fortschritt in Bytes
          Delay(100)
      EndSelect
    ForEver
  Else
    Debug "Request creation failed"
  EndIf
--
Ideen gibt es viele - man muss sie nur haben...
Mint LMDE5+6 // PureBasic 6.12
Antworten