Bild von IP-Kamera abgreifen

Gast #3330006
Lesenswert?

Ist bitte mal jemand so freundlich und prüft, warum dieser eigentlich 
simpelst abgesicherte Code trotzdem hin und wieder (ca. 10% der Aufrufe) 
ein nicht darstellbares Bild produziert? Der Browser meint dann 
sinngemäß, die Grafik könne nicht dargestellt werden, weil sie Fehler 
enthalte. Ich weiss, dass der Code nicht gegen eine Endlosschleife 
angesichert ist, kommt noch. Der Fehler, den ich meine, kommt, wenn er 
kommt, sofort.
1
  
2
<?php
3

4
 $err=true;
5
   
6
    while ($err)
7
    {
8
   
9
        $dat = file_get_contents('http://admin:passw@192.168.200.101/snapshot.cgi');
10
        if ($dat)
11
        { 
12
            $img = imagecreatefromstring($dat);
13
            if ($img)
14
            { $err=false;
15
              header('Content-Type: image/jpeg');
16
              imagejpeg($img);
17
              imagedestroy($img);}
18
              else {usleep(200);}
19
        }
20
        else {usleep(200);}
21
    }
22
?>
Das würde ja bedeuten, dass man sich auf $img = 
imagecreatefromstring($dat); if ($img) ... nicht verlassen kann ... ?
Gast #3330018
Lesenswert?

Habe ich ja gemacht Ein JPEG, das in Ordung ist, beginnt mit dem Byte 
255 und endet mit einer 217. Die fehlerhaften Bilder sind immer am Ende 
unvollständig.

AABER: Sollte das nicht eigentlich die Bildfunktion von PHP leisten? 
Dass ich da irgend einen Würg-Arround brauche ist mir schon klar ...
Gast #3330028
Lesenswert?

Frank schrieb:
> Habe ich ja gemacht Ein JPEG, das in Ordung ist, beginnt mit dem Byte
> 255 und endet mit einer 217. Die fehlerhaften Bilder sind immer am Ende
> unvollständig.
>
> AABER: Sollte das nicht eigentlich die Bildfunktion von PHP leisten?

welches Bild ist defekt das was php generiert oder das was von der 
Kamera kommt?
Gast #3330035
Lesenswert?

Peter II schrieb:
> welches Bild ist defekt das was php generiert oder das was von der
> Kamera kommt?

Wenn ich das snapshot.cgi direkt mit dem Browser aufrufe, habe ich noch 
keinen Defekt provozieren können, also muss es wohl an PHP liegen, oder?

Aber ich prüfe doch, ob Daten geliefert wurden ($dat ist true) und ich 
prüfe, ob ein Bild generiert wurde ($img ist true). Wenn nicht fordere 
ich in der While-Schleife nach einer kurzen Pause neue Daten. Aber 
anscheinend ergeben beide Prüfungen ab und zu true, obwohl das Bild 
fehlerhaft ist.

Ich habe mir auch noch eine Prüfung auf das erste und letzte Zeichen 
(255 und 217) eingebaut, auch die verbessert die "Ausbeute" nur etwas, 
es gibt aber immer noch fehlerhafte Bilder ...
Gast #3330042
Lesenswert?

man könnte mal versuchen die größe vom Bild abzufragen.

Aber das wichtigste ist doch erstmals dir Ursache zu finden. Also 
erstmal festellen ob in $dat immer ein sinnvoller Inhalt vorhanden ist.
Gast #3330057
Lesenswert?

Peter II schrieb:
> man könnte mal versuchen die größe vom Bild abzufragen.
>
> Aber das wichtigste ist doch erstmals dir Ursache zu finden. Also
> erstmal festellen ob in $dat immer ein sinnvoller Inhalt vorhanden ist.

Dateigröße hat nicht viel Sinn, die ist bei JPEG vom Inhalt abhängig 
(inkl. Rauschen) und damit immer anders. Aber ich sehe mal nach, ob es 
möglich ist, die Pixel-Größen in X und Y abzufragen ...
Gast #3330118
Lesenswert?

Das Problem hatsich geklärt, Schuld war die Funktion 
imgecreatefromstring.

Die gibt bei korrupten Bilddaten nicht nur ein False aus, sondern 
zusätzlich eine Fehlermeldung. Dieser Text, mit Image-Haedern versehen, 
provoziert den Browser zur seiner Fehlermeldung. Durch ein 
vorangestelltes "@" wurde das unterbunden ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren