"On the Fly" generiertes Bild auf Server speichern
Hallo,
ein Videoserver erzeugt auf Anfrage (siehe URL unten) "on the Fly" ein =
Bild von einer Webcam und sendet es an den Browser.
Nun soll von diesem Videoserver auf einem anderen Server das Bild zwecks =
Weiterverarbeitung (Resizing, Bildserien
usw.) gespeichert werden. Leider versagen "imagecreatefromXXX" & Co, da =
diese ja ein "körperliches" Bild im Sinne
einer vorhandenen Datei (egal ob lokal oder extern über Wrapper) =
benötigen. Auch das =D6ffnen mit fopen() scheitert.
Welche Möglichkeiten habe ich, mit PHP einen Stream entgegenzunehmen =
und zu speichern?
Die Anzeige der Webbilder funktioniert übrigens mit jedem Browser ohne =
Probleme. Ein Abspeichern des Bildes direkt
über die dort installierte Videosoftware lässt diese nicht zu. Was =
können die Browser, was PHP nicht kann ;)
Hier der Link zum Videoserver:
http://141.55.70.191:2841/cam5.jpg?login=3Dadmin&pass=3D5&w= 3D640&h=3D480=
&sz=3D60&fps=3D1&method=3Dpul
=DCber Hinweise auf Lösungsmöglichkeiten würde ich mich freuen.
Birger Jesch
Re: "On the Fly" generiertes Bild auf Server speichern
Birger Jesch schrieb:
> Hallo,
>
> ein Videoserver erzeugt auf Anfrage (siehe URL unten) "on the Fly" ein =
Bild von einer Webcam und sendet es an den Browser.
> Nun soll von diesem Videoserver auf einem anderen Server das Bild zweck=
s Weiterverarbeitung (Resizing, Bildserien
> usw.) gespeichert werden. Leider versagen "imagecreatefromXXX" & Co, da=
diese ja ein "körperliches" Bild im Sinne
> einer vorhandenen Datei (egal ob lokal oder extern über Wrapper) benö=
tigen. Auch das =D6ffnen mit fopen() scheitert.
> Welche Möglichkeiten habe ich, mit PHP einen Stream entgegenzunehmen =
und zu speichern?
>
> Die Anzeige der Webbilder funktioniert übrigens mit jedem Browser ohn=
e Probleme. Ein Abspeichern des Bildes direkt
> über die dort installierte Videosoftware lässt diese nicht zu. Was =
können die Browser, was PHP nicht kann ;)
>
> Hier der Link zum Videoserver:
> http://141.55.70.191:2841/cam5.jpg?login=3Dadmin&pass=3D5&w= 3D640&h=3D4=
80&sz=3D60&fps=3D1&method=3Dpul
>
> =DCber Hinweise auf Lösungsmöglichkeiten würde ich mich freuen.
Warum imagecreatefromXXX? wenn du eigentlich eine Datei speichern
wolltest? Benutze fsockopen() zum Senden eines GET Requests und hole
dann die Anwort ab. In der Musst du nur den HTTP Header abschneiden und
den Rest speicherst du als foo.jpg.
Wenn du Zeit oder Lust hast schau dir Pears HTTP_Request oder Snoopy an.
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: "On the Fly" generiertes Bild auf Server speichern
"Joerg Behrens" <behrens [at] takenet.de> schrieb...
>> Birger Jesch schrieb:
>> Hallo,
>>
>> =DCber Hinweise auf Lösungsmöglichkeiten würde ich mich freuen.
> Warum imagecreatefromXXX? wenn du eigentlich eine Datei speichern
> wolltest?
Das war der erste Ansatz: Bild per imagecreatefromXXX resizen, Datum =
und#
Zeit "reinstempeln" und anschliessend ablegen (speichern).
> Benutze fsockopen() zum Senden eines GET Requests und hole
> dann die Anwort ab. In der Musst du nur den HTTP Header abschneiden =
und
> den Rest speicherst du als foo.jpg.
Oje, ich schau's mir aber mal an.
> Wenn du Zeit oder Lust hast schau dir Pears HTTP_Request oder Snoopy =
an.
Das werde ich auf alle Fälle machen.
Danke erstmal!
> Gruss
> Joerg
Re: "On the Fly" generiertes Bild auf Server speichern
Joerg Behrens schrieb:
> Pear sind simple PHP Scripte genau wie deine auch. Die kannst du auch
> einzeln bzw. tar herunterladen und dann per FTP hochladen. Ein
> Include_path dann entsprechend erweitern.
Das kann bei manchen Skripts aber auch in die Hose gehen, wenn der
Installer Pfade anpasst. Siehe dazu auch [1]
Gruß
David
[1] http://pear.php.net/manual/de/installation.manually.php
Re: "On the Fly" generiertes Bild auf Server speichern
David Fuhr schrieb:
> Joerg Behrens schrieb:
>
>> Pear sind simple PHP Scripte genau wie deine auch. Die kannst du auch
>> einzeln bzw. tar herunterladen und dann per FTP hochladen. Ein
>> Include_path dann entsprechend erweitern.
>
> Das kann bei manchen Skripts aber auch in die Hose gehen, wenn der
> Installer Pfade anpasst. Siehe dazu auch [1]
>
> Gruß
> David
>
> [1] http://pear.php.net/manual/de/installation.manually.php
Ah ok.
Der Weg [1] waere dann folgender das man sich das PEAR lokal installiert =
mit dem gleichen Pfad wie man ihn dann beim Hoster hat. Anschliessend
per FTP/SCP hochladen.
[1] http://pear.php.net/manual/de/installation.shared.php
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: "On the Fly" generiertes Bild auf Server speichern
> "Joerg Behrens" <behrens [at] takenet.de> schrieb...
>
> ...In der Musst du nur den HTTP Header abschneiden und
> den Rest speicherst du als foo.jpg.
Das funktioniert jetzt hier so: Response mit split("\n\n") teilen und =
erstes Arrayelement
wegwerfen, die restlichen + durch split() entfernte \n\n zu einem =
Imagestring zusammensetzen.
Bildbearbeitung erfolgt dann durch imagecreatefromstring usw.
>
> Sende weitere Header, Referer etc. damit dein Request genau wie der
> eines Browsers aussieht. Installiere dir fuer FF die HTTP Live Header
> extension damit zu siehst was es gibt und wie es ausschaut. Als
> Bettlektuere dann mal die RFC2616 angucken.
Die RFC2616 habe ich in groben Zügen bereits überflogen. Der goldene =
Tipp
waren die HTTP Live Extensions. Der Videoserver musste nur durch ein
fputs($socket,"\n") _vor_ dem Senden des Requests angestoßen werden, =
dann
liefert er auch (richtige) Bilder. Warum das so ist, weiss wohl nur der =
Programmierer
des Videoservers.
> Gruss
> Joerg
Danke für Deine Hilfe!
Birger
Re: "On the Fly" generiertes Bild auf Server speichern
Birger Jesch schrieb:
>> "Joerg Behrens" <behrens [at] takenet.de> schrieb...
>>
>> ...In der Musst du nur den HTTP Header abschneiden und
>> den Rest speicherst du als foo.jpg.
>
> Das funktioniert jetzt hier so: Response mit split("\n\n") teilen und e=
rstes Arrayelement
> wegwerfen, die restlichen + durch split() entfernte \n\n zu einem Imag=
estring zusammensetzen.
> Bildbearbeitung erfolgt dann durch imagecreatefromstring usw.
>
>> Sende weitere Header, Referer etc. damit dein Request genau wie der
>> eines Browsers aussieht. Installiere dir fuer FF die HTTP Live Header =
>> extension damit zu siehst was es gibt und wie es ausschaut. Als
>> Bettlektuere dann mal die RFC2616 angucken.
>
> Die RFC2616 habe ich in groben Zügen bereits überflogen. Der golden=
e Tipp
> waren die HTTP Live Extensions. Der Videoserver musste nur durch ein
> fputs($socket,"\n") _vor_ dem Senden des Requests angestoßen werden, =
dann
> liefert er auch (richtige) Bilder. Warum das so ist, weiss wohl nur der=
Programmierer
> des Videoservers.
Ich koennte schwoeren das *normale* Request Header mit einem \r\n
getrennt werden und beim Close dann ein \r\n\r\n. Dein Code war hier
nicht ganz eindeutig denn du verwendest nur \n und am Ende dann \r\n\r\n=
=2E
Evtl. guckst du nochmal nach und berichtest. Aber schoen das es zumind.
schon mal klappt.
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de