Alternative Fallback-HTML bei Nichterreichen der WebCam

Status
Für weitere Antworten geschlossen.

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich habe im Webserver-Bereich eine kleine HTML-Homepage erstellt. In einem kleinen Seitenframe erscheinen die WebCam-Übertragungen. Die Webcam wird direkt über einen HTML-Linkaufruf eingebunden und hängt per USB an einem PC - ich nutze somit nicht die Surveillance-Station meiner DS-107+.

Sofern die WebCam nicht eingeschaltet ist, läuft der Browser im Frame natürlich nach einem gewissen Timeout ins Leere und es kommt im Frame die übliche Browser-Fehlerseite "Seite nicht erreichbar" bzw. "Netzwerkverbindung prüfen".

  • Browser sucht im Frame
  • WebCam ist nicht ereichbar
  • Alternativseite sollte nun anstelle der Browsermeldung im Frame erscheinen: z.B. "WebCam leider down"....oder so ähnlich

Wie kann ich es programmieren, daß eine alternative und schöner zu gestaltende HTML-Seite anstelle erscheint ? Bin leider nur rudimentärer Frontpage-Anwender und kein Programmierer.

Danke !!


Gruss
Jochen
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Am einfachsten ist der Fall wenn die Webcam nicht läuft und die entsprechende Seite nicht vorhanden ist. Dann könntest du vor dem Einbinden des Frames prüfen was für http Stati du zurückbekommst. Im besten Fall kriegst du ein 404-er zurück und weisst dann das die Cam ned läuft (dann kannst du einen alternativen Inhalt anzeigen lassen)
Kompliziert wird es dann, wenn die Seite vorhanden ist, also der Webserver einen Status 200 meldet, egal ob die Kamera läuft oder nicht. Dann wird es schwierig die Unterscheidung zu machen.
Für den Firefox gibt es eine Extension namens LiveHeader, die dir dabei helfen kann die Stati der Seite rauszulesen. Klär mal ab was für einen Status du erhälst, wenn die Kamera nicht läuft.
Beim Programmieren könnte ich dir problemlos helfen, aber du musst das obige erst abklären.
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Vielen Dank für Deine Antwort.

Der Fall ist tatsächlich so, daß die Seite nicht vorhanden ist (somit müsste Code 404 zurückgemeldet werden, auch ohne Tests).

Ich verwende im Heimnetz u.a. einen Laptop mit angeschlossener USB-Webcam. Auf diesem Laptop läuft die Software "WebCam2000", die einen Kameraserver darstellt. Damit umgehe ich derzeit noch die teureren IP-Kameras für die DS-107+, zumal diese Funktion für mich derzeit eh nur eine nette "Spielerei" darstellt. :)

Wenn der Laptop aus ist (oder alternativ die WebCam2000-Software bei laufendem Laptop beendet wird), ist der Ziellink somit schlichtweg nicht erreichbar. Das müsste dann doch der "klassische" 404-er sein !?

Ich hatte mir das so vorgestellt (vermutlich via Script):

IF
Seitevorhanden: Laptop-IP:port
ELSE
WebCam-Fehlerinfoseite.htm
ENDIF​

Also nur von der Logik her, natürlich nicht von den Befehlscodes. Das überlasse ich gerne den Profis... :D

Gruss + danke schon vorab
Jochen


Zur aktuellen Programmierung, falls das hilft:

Ich verweise auf meiner NAS-Web-Hauptseite in einem Frame auf die Webcam.htm.


Webcam.htm (Auszug):

<body style="font-family: Trebuchet MS; font-size: 10pt">

<p>
<font face="Trebuchet MS"> 

</font></p>
<p>
<font face="Trebuchet MS"> <b>WebCam:</b></p>
<p align="center">
<iframe name="I1" src="http://(meineDynDNS):8080" width="370" title="WebCam" marginheight="1" height="310" border="1" frameborder="1" marginwidth="1" scrolling="no">
Ihr Browser unterstützt Inlineframes nicht oder zeigt sie in der derzeitigen Konfiguration nicht an.
</iframe></p>
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Das mit dem 404-er solltest du aber erst prüfen. Es gibt auch Software die den Browser in diesem Fall ohne Rückmeldung in ein Timeout laufen lässt (in diesem Fall gibt es keinen Status Code).
Grundsätzlich würde ich erstmal prüfen ob der Laptop (mit der Software) überhaupt an ist. Dazu eine socket Verbindung DS-Laptop aufbauen oder einen Ping auf die IP des Lapi senden.
Wenn der Lapi an ist muss du prüfen ob die Software auch Daten liefert oder ob die Cam aus ist (hier kommen die http Stati ins Spiel).
Läuft eigentlich auf deinem Laptop ein Webserver?
Wie gesagt, wenn du die http Stati verifizierst, dann schreib ich dir den 5-Zeiler zum Einbinden uns Prüfen der Kamerastreams ;)
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Hmmm...nur wie kann ich Dir den Fehlercode auslesen !? Keine meiner 3 Browser zeigt mir auch nur irgendetwas Verwertbares in Form eines Fehlercodes an.

Nur sowas hier:
 

Anhänge

  • 2009-09-17_232220.jpg
    2009-09-17_232220.jpg
    20,1 KB · Aufrufe: 59

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hmmm...nur wie kann ich Dir den Fehlercode auslesen !? Keine meiner 3 Browser zeigt mir auch nur irgendetwas Verwertbares in Form eines Fehlercodes an.

Nur sowas hier:
Darum mein Tipp mit LiveHeader Erweiterung für Firefox. Diese zeigt die HTTP Stati an
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Mein Kaspersky war schuld, daß sich das "Live HTTP Header" Plugin trotz Admin-Rechten nicht installieren ließ. Kurz den Kaspersky abgeschaltet, Plugin installiert, und jetzt geht's.

Hier die zurückgegebene Fehlermeldung:

http://safebrowsing-cache.google.co...6-66699,66701-66706,66708-66710,66712-66720.:

GET /safebrowsing/rd/goog-phish-shavar_a_66561-66720.66561-66593,66595-66600,66602-66623,66625-66646,66648-66649,66651-66653,66655-66657,66659-66674,66676-66699,66701-66706,66708-66710,66712-66720.: HTTP/1.1
Host: safebrowsing-cache.google.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PREF=ID=f162de6e1b2a69c7:TM=1253390547:LM=1253390547:S=iC3bwDMrwge1ySHB; NID=27=Qww-aOtL5SW9GEK1f6d9LlUsAaeGNsZ_Wtab8s_Xw9yzHTJV6waks_-2B4Egnfhn1t1ZWiEQKlOyslG_yEAgGTaMi_DWQkSU4Uhgn-46ZkbvF8E8sZpz0rbEACVtQh-J

HTTP/1.x 200 OK
Cache-Control: private,max-age=21600
Content-Type: application/vnd.google.safebrowsing-chunk
Expires: Sat, 19 Sep 2009 07:41:21 GMT
Date: Sat, 19 Sep 2009 20:10:19 GMT
Server: HTTP server (unknown)
Content-Length: 13566
----------------------------------------------------------
http://safebrowsing-cache.google.co...0-66764,66766-66776,66778-66782,66784-66880.:

GET /safebrowsing/rd/goog-phish-shavar_a_66721-66880.66721-66748,66750-66764,66766-66776,66778-66782,66784-66880.: HTTP/1.1
Host: safebrowsing-cache.google.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PREF=ID=f162de6e1b2a69c7:TM=1253390547:LM=1253390547:S=iC3bwDMrwge1ySHB; NID=27=Qww-aOtL5SW9GEK1f6d9LlUsAaeGNsZ_Wtab8s_Xw9yzHTJV6waks_-2B4Egnfhn1t1ZWiEQKlOyslG_yEAgGTaMi_DWQkSU4Uhgn-46ZkbvF8E8sZpz0rbEACVtQh-J

HTTP/1.x 200 OK
Cache-Control: private,max-age=21600
Content-Type: application/vnd.google.safebrowsing-chunk
Expires: Fri, 18 Sep 2009 07:52:44 GMT
Date: Sat, 19 Sep 2009 20:10:19 GMT
Server: HTTP server (unknown)
Content-Length: 50695
----------------------------------------------------------

Der Fehlercode ist somit "200" !? Sehe ich das richtig ?

Gruss
Jochen
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Der Code 200 heisst: Alles okay, Ressource vorhanden und gefunden. 400-er und 500-er Codes stehen für Fehler
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hier mal ein Beispiel wie man es umsetzen könnte. Dabei arbeite ich zweimal mit Timouts: Einmal beim Verbindungsaufbau zum Server und einmal beim Abfragen der Ressource (Kameraframe). Beide Timeouts liegen bei 2 Sekunden. Wenn die Verbindung zum Host nicht aufgebaut werden konnte, bricht das ganze mit der Meldung "Offline" ab. Wenn der Host antwortet wird weiter geprüft, ob die Ressource auch vorhanden ist (Zeilen 7 bis 13). Zeile 14 prüft ob der Timeout aus Zeile 10 eingetreten ist und gibt eine entsprechende Meldung aus. Bei Zeile 17 könnte man anstelle von "Erreichbar" schreiben, auch gleich die Ressource laden
PHP:
<?php
$fp = fsockopen('xxxxx.dyndns.org',8080,$errno,$err,2);
if(!$fp){
  echo 'Offline';
}else{
  echo 'Möglicherweise Online. Teste weiter';
  $out = "HEAD / HTTP/1.1\r\n";
  $out .= "Host: xxxxx.dyndns.org\r\n";
  $out .= "Connection: Close\r\n\r\n";
  stream_set_timeout($fp,2);
  $res = fwrite($fp,$out);
  $info = stream_get_meta_data($fp);
  fclose($fp);
  if($info['timed_out']){
    echo 'Nicht erreichbar';
  }else{
    echo 'Erreichbar';
  }
}
?>
 
Zuletzt bearbeitet von einem Moderator:

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
PHP:
<?php
$fp = fsockopen('xxxxx.dyndns.org',8080,$errno,$err,2);
if(!$fp){
  echo 'Offline';
}else{
  echo 'Möglicherweise Online. Teste weiter';
  $out = "HEAD / HTTP/1.1\r\n";
  $out .= "Host: xxxxx.dyndns.org\r\n";
  $out .= "Connection: Close\r\n\r\n";
  stream_set_timeout($fp,2);
  $res = fwrite($fp,$out);
  $info = stream_get_meta_data($fp);
  fclose($fp);
  if($info['timed_out']){
    echo 'Nicht erreichbar';
  }else{
    echo 'Erreichbar';
  }
}
?>

Hallo Tobi,

bin kurz vor dem Ziel, versage aber total. Habe heute Abend SelfHTML- und PHP-Seiten durchwühlt und als Nicht-Programmieren leider keine passende Antwort gefunden, die dann auch funktioniert hätte.

Ich hatte mir das ursprünglich so vorgestellt:

  1. Kamera an: (URL:port) der Kamera wird geladen
  2. Kamera aus: Eine leere, einfarbige HTML-Seite wird als "Lückenfüller" geladen

also in Deinem Script somit ersetzt:

Zeile 4: echo 'Offline'; --> webcam_off.htm
und
Zeile 17: echo 'Erreichbar'; --> WebCAM-URL:port


Ich habe mit Deinem "fsocks" experimentiert, mit "include", mit "$info" und alles schlägt fehl und endet in Scriptfehlern. Musterlösungen bei anderen Usern funktionieren leider bei mir nicht - und darüberhinaus fehlt mir dann das weitere Programmiersprachen-Verständnis.

Wie muß ich Dein Script modifizieren, damit die Kamera-URL geladen wird und im Fehlfalle eben eine (leer belassene) HTML-Seite ?

Jetzt muß ich Dich wegen diesem Mist nochmals bitten, ich werd' noch wahnsinnig mit diesem einfachen Mist. Sorry !!

Gruss
Jochen
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich würde nicht versuchen den Stream mit PHP zu laden. Das könnte bei einem Live Stream ziemlich kompliziert werden.
Ich würde diesen PHP Code genau an die Stelle deiner Datei kopieren, wo auch der Link resp das Frame angezeigt wird. Dazu die Datei zuerst auf .php umbenennen. Dann im Quellcode die Zeile suchen wo das Frame eingebunden wird und dort den PHP Code platzieren
Bei nicht erreichbar resp offline würde ich folgendes schreiben
PHP:
echo '<strong>Zur Zeit ist die Kamera offline</strong>';
falls die Kamera online ist hingegen folgendes
PHP:
echo '<iframe src="http://xxx.dyndns.org:8080"><strong>Ihr Browser scheint keine Frames zu unterstützen</strong></iframe>';
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Hallo Tobi,

recht herzlichen Dank nochmals für Deine Hilfe !!

Mit ein paar Anpassungen klappt es jetzt genau so, wie ich es mir vorgestellt habe. Ich mußte das PHP-Script noch mittels MS Frontpage etwas nachbearbeiten, damit's zum Design der Homepage passt.

Gestört hatte mich anfänglich, daß noch die Status- bzw. Fehlermeldungen im Frame als Textform erschienen sind. Da mich nur das Kamerabild interessiert, oder im Fehlerfalle die alternative leere Infoseite mit dem Text "Webcam offline", habe ich einfach das Script mittels Frontpage farblich überarbeitet.

Nun hat das PHP-Scriptfile die gleiche Hintergrundfarbe wie meine anderen Seiten (bei Kamera "aus" hebt sich das somit nicht mehr ab und man sieht (vermeintlich) nur den Text "Webcam offline" in der Framemitte). Die oben eingeblendete PHP-Fehlermeldung vom "fsockopen" sieht man auch nicht mehr, weil die Textfarbe = Hintergrundfarbe gesetzt worden ist. ;) :D
Programmierer hätten das sicherlich mit einem "ECHO OFF" (oder ähnlich) in den Griff bekommen, aber für eine PHP-Null wie mich war das die einfachste Lösung. :p

Nun fügt sich das Kamerabild incl. Fehlerseite super und nahtlos in meine Homepage. Super !!!! Sieht doch gleich viel professioneller aus als das vorherige Browser-Timeout-Fenster im Frame.


Gruss
Jochen
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hallo Tobi,

recht herzlichen Dank nochmals für Deine Hilfe !!

Mit ein paar Anpassungen klappt es jetzt genau so, wie ich es mir vorgestellt habe. Ich mußte das PHP-Script noch mittels MS Frontpage etwas nachbearbeiten, damit's zum Design der Homepage passt.

Gestört hatte mich anfänglich, daß noch die Status- bzw. Fehlermeldungen im Frame als Textform erschienen sind. Da mich nur das Kamerabild interessiert, oder im Fehlerfalle die alternative leere Infoseite mit dem Text "Webcam offline", habe ich einfach das Script mittels Frontpage farblich überarbeitet.

Nun hat das PHP-Scriptfile die gleiche Hintergrundfarbe wie meine anderen Seiten (bei Kamera "aus" hebt sich das somit nicht mehr ab und man sieht (vermeintlich) nur den Text "Webcam offline" in der Framemitte). Die oben eingeblendete PHP-Fehlermeldung vom "fsockopen" sieht man auch nicht mehr, weil die Textfarbe = Hintergrundfarbe gesetzt worden ist. ;) :D
Programmierer hätten das sicherlich mit einem "ECHO OFF" (oder ähnlich) in den Griff bekommen, aber für eine PHP-Null wie mich war das die einfachste Lösung. :p

Nun fügt sich das Kamerabild incl. Fehlerseite super und nahtlos in meine Homepage. Super !!!! Sieht doch gleich viel professioneller aus als das vorherige Browser-Timeout-Fenster im Frame.


Gruss
Jochen
Salut Jochen

schön, dass es klappt. Das ECHO OFF in PHP bei Fehlermeldungen erreichst du, indem du der fraglichen Funktion ein '@' voranstellst. Alternativ kannst du auch die Fehlerausgabe komplett unterdrücken. Das mit der Schriftfarbe geht auch, hat aber den Nachteil, dass die Fehlermeldung natürlich im Quelltext der Seite sichtbar ist
Entweder
PHP:
$fp = @fsockopen('xxxxx.dyndns.org',8080,$errno,$err,2);
oder als erste Zeile des PHP Codes
PHP:
error_reporting(0);
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Super !! Danke für die Nachhilfe. :D

Vielleicht "entfärbe" ich den Quelltext bei der Textfarbe ja wieder und ersetze das sauber durch den "error_reporting(0)" Code. Dann haben die Profi-Programmierer keine Bauchschmerzen mehr wenn das mal einer sehen sollte. :D

Gruss
jochen
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!