StefanBion.de

Dem Stefan sein kunterbuntes Web-Sammelsurium

Einbindung der Kamera als Webcam

Seit 2009 ist der Nistkasten live "auf Sendung" als Webcam - zunächst noch über ein Netbook mit USB-Videoadapter und Webcam-Software, später dann über einen kleinen Videoserver.

Anfangs wurde das Bild der Kamera alle 10 Sekunden per FTP auf den Webserver hochgeladen, während es auf der Webseite per JavaScript ebenfalls im 10-Sekunden-Takt immer wieder neu geladen wurde. Mittlerweile beträgt das Aktualisierungs-Intervall nur noch 2 Sekunden, und das Bild wird dazu auch nicht mehr per FTP hochgeladen, sondern direkt vom Videoserver geholt. Den FTP-Upload nutze ich nun im Zusammenhang mit der integrierten Bewegungserkennung des Videoservers: Immer wenn eine ausreichend starke Veränderung des Bildinhaltes erkannt wird, wird das Bild in eine Fotogalerie auf dem Webserver hochgeladen.

Inhaltsverzeichnis

Einleitung

Zur Einbindung der aktuellen Kamerabildes in die Webseite verwende ich derzeit einen Videoserver. Hierbei handelt es sich um ein kleines Gerätchen von 8,5 x 3,5 x 3 cm mit Video- und Netzwerk-Anschluß, das autonom arbeitet, nur sehr wenig Strom verbraucht und nicht auf einen ständig laufenden Rechner angewiesen ist. Angeschlossen an einen freien LAN-Port des DSL-Routers, über den die Internetverbindung hergestellt wird, stellt er die Bilder der Nistkasten-Kamera im Internet bereit. Durch ein in die Webseite eingebettetes JavaScript wird das aktuelle, vom Videoserver gelieferte Kamerabild in regelmäßigen Zeitabständen abgerufen und angezeigt. Einen "echten" Video-Stream kann ich derzeit wegen meines begrenzten DSL-Upstreams (nur 512 kBit/s) nicht anbieten.

Die Konfiguration der einzelnen Komponenten (DSL-Router, Videoserver und Webseite) wird in den folgenden Abschnitten detailliert beschrieben.

DSL-Router

Der DSL-Router (in meinem Fall eine FRITZ!Box Fon WLAN 7170 von AVM) stellt unabhängig vom PC die Internetverbindung her und erlaubt so den Betrieb des Videoservers, auch ohne daß dafür der Rechner laufen muß. Der Vidoserver wird dazu einfach per LAN-Kabel an den Router angeschlossen und kann darüber ins Internt.

DSL-Router AVM FRITZ!Box Fon WLAN 7170

Konfiguration

Wenn der Videoserver ständig von außen über das Internet erreichbar sein soll, z.B. um den direkten Audio/Video-Stream über das Internet zugänglich zu machen, oder um ohne den Umweg über FTP-Uploads direkt auf die Einzelbilder der Kamera zugreifen zu können (wie in meinem Fall), dann muß der DSL-Router zuvor passend konfiguriert werden. Wer nur die Einzelbilder der Kamera durch den Videoserver in regelmäßigen Abständen per FTP hochladen lassen möchte, um sie in die Webseite einzubinden, braucht sich damit nicht auseinanderzusetzen und kann dieses Kapitel überlesen und sofort zum Kapitel "Videoserver" springen.

Videoserver

An den Videoserver ist die Kamera (bzw. in meinem Fall über die Umschaltbox die beiden Kameras) angeschlossen. Dieser digitalisiert das analoge PAL-Videosignal und bereitet es als Video-Stream im Format H.264, als Motion-JPEG-Stream (MJPEG) und als einzeln abrufbare JPEG-Standbilder auf, auf die dann über das Netzwerk "empfangen" werden können. Dazu ist der Videoserver per LAN-Kabel an die Fritzbox angeschlossen. Die Kamera ist an den Videoserver und parallel dazu an die TV-Karte (Hauppauge WinTV PCI-FM) meines Rechners angeschlossen, sodaß ich das Live-Bild mit Ton auch direkt am PC ansehen und ggf. mitschneiden kann (hierzu benutze ich die Software Debut Video Capture von NCH, allerdings in der älteren Version 1.42, die noch Freeware ist).

Als Videoserver verwende ich derzeit den AXIS M7001, das kleine weiße Kästchen im Vordergrund:

Videoserver AXIS M7001

Da der AXIS M7001 über das Netzwerkkabel mit Strom versorgt wird, ist zudem ein POE-Netzteil ("POE-Injector") erforderlich. Ich verwende hierzu den DIGITUS DN-95101, das etwa dreimal so große, schwarze Kästchen hinter dem Videoserver.

Leider mußte ich schnell feststellen, daß auch ein Markengerät wie der AXIS M7001 nicht frei von groben Firmware-Bugs ist, die umständliche Workarounds notwendig machen. Eine Übersicht über die verschiedenen, bisher von mir getesteten Videoserver und meine "Erfahrungen" damit habe ich auf einer eigenen Seite zusammengestellt, da diese den Rahmen dieser Beschreibung sprengen würden...

Konfiguration

Nach dem Anschließen bezieht der Videoserver vom Router per DHCP automatisch eine lokale IP-Adresse und ist somit im Netzwerk erreichbar. Vor der ersten Inbetriebnahme müssen jedoch noch einige Einstellungen vorgenommen werden, wie beispielsweise die Vergabe eines Paßwortes für den Administrations-Benutzer "root", die Einstellung der Videoparameter (Auflösung, Helligkeit, Kontrast, Farbe), oder die Aktivierung bestimmter Funktionen wie das bewegungserkennungs- oder zeitgesteuerte Hochladen von Bildern auf einen Webserver.

Für meinen Anwendungsfall habe ich den Videoserver so konfiguriert, daß bei Bewegungserkennung automatisch Bilder per FTP auf den Webserver hochgeladen werden, wo sie in einer Bilder-Galerie angezeigt werden. Für das Live-Bild auf der Startseite wird per JavaScript ca. alle 2 Sekunden ein aktuelles Standbild direkt vom Videoserver geholt.

Alle Einstellungen werden über die Web-Oberfläche des Videoservers vorgenommen. Dazu gibt man in die Adreßzeile seines Lieblings-Browsers die lokale IP-Adresse des Videoservers ein und klickt sich durch die Konfigurations-Menüs. Einige der wichtigsten Einstellungen des AXIS M7001 führe ich im Folgenden exemplarisch auf:

Webseite

Nachdem der Videoserver läuft, geht es nun darum, das vom Videoserver gelieferte Kamera-Bild als "bewegtes Bild" in die Webseite einzubinden. Da meine DSL-Bandbreite (512 kBit/s Upload-Geschwindigkeit) nicht ausreicht, um einen echten Live-Stream anzubieten, habe ich die bandbreitenschonendere Lösung gewählt, bei der ein in die Webseite eingebundenes Standbild alle paar Sekunden durch den Browser aktualisiert wird. Hierzu gibt es verschiedene Möglichkeiten, von denen im Folgenden drei vorgestellt werden:

Automatische Aktualisierung des Webcam-Bildes per JavaScript

Das vom Videoserver per FTP regelmäßig hochgeladene Bild – oder alternativ das aktuelle Standbild direkt aus dem Videoserver – kann sehr einfach mit z.B. <img src="autoupload/video.jpg"> in die Webseite eingebunden werden. Allerdings würde ein Besucher so immer nur das zuletzt hochgeladene Bild sehen. Um ein neues, aktuelles Bild zu sehen, müßte er die Seite neu laden. Damit das automatisch geht, kann man in die Seite ein kleines JavaScript einbetten, das das regelmäßige Neuladen des Bildes (nicht der ganzen Seite) vornimmt. Hierbei sollte das Intervall des Neuladens dem Intervall entsprechen, mit dem der Videoserver seinerseits die Bilder hochlädt, also z.B. 10 Sekunden. Des weiteren sollte bedacht werden, daß das regelmäßige Aktualisieren des Bildes Netzwerklast ("Traffic") verursacht. Manche Webspace-Provider geben hier eine Begrenzung pro Monat vor - vor allem bei kleineren Webspace-Paketen. So ein Bild hat ca. 10-12 KB; wenn es alle 10 Sekunden neu geladen wird, macht das 3,5 MB pro Stunde. Wenn nun 10 Besucher die Seite 24 Stunden am Tag geöffent hätten, wären das schon 250 GB im Monat (falls ich mich jetzt nicht verrechnet habe). Aus diesem Grund ist es sinnvoll, die maximale Übertragungsdauer für die Webcam-Bilder zu begrenzen, z.B. auf eine halbe Stunden oder auch 10 Minuten. Nach Ablauf dieser Zeit erscheint statt des Kamerabildes eine statisches Bild und in der Statuszeile unter dem Bild der Hinweis "Übertragung beendet" sowie ein Link zum Neustarten der Übertragung.

Hier ein Beispiel-JavaScript für diesen Zweck:

Hier eine funktionierende Beispiel-Webseite dazu:

Automatische Aktualisierung des Webcam-Bildes per Java- oder Flash-Applet

Anstelle des JavaScripts können auch Java- oder Flash-Applets benutzt werden, um das Webcam-Bild in regelmäßigen Abständen neu zu laden und anzuzeigen. Ein möglicher Vorteil gegenüber JavaScript wäre, daß hierbei das ständige Flackern der Statuszeile bzw. der Lade-Fortschrittsanzeige des Browsers unterbunden wird, das beim regelmäßigen Laden des Bildes per JavaScript auftritt. Da die verfügbaren Applets keine Funktion zur zeitlichen Begrenzung der Übertragung enthalten, kann man jedoch auf JavaScript nicht ganz verzichten.

Hier zwei entsprechende Beispiele:

Einige Verbesserungen

Zu den bisher beschriebenen Methoden zum automatischen Neuladen des Webcam-Bildes per JavaScript sind diverse Verbesserungen und Erweiterungen denkbar, wie z.B.:

1. Umgehen der Authentifizierung des Videoservers bei Direktzugriff auf das Kamerabild

2. Begrenzung der Upstream-Datenmenge durch serverseitige Zwischenspeicherung des Webcam-Bildes

3. Verbesserung der Bildqualität

4. Zeitstempel im Bild

5. Zuschauer-Zähler

Zu den Punkten 2. bis 5. hier ein entsprechendes Beispiel:

Die bei Bewegungserkennung automatisch erstellten Schnappschüsse werden vom Videoserver in ein Verzeichnis /gallery/Jahr-Monat-Tag auf dem Webserver hochgeladen, wobei Jahr, Monat und Tag dem Datum des jeweiligen Schnappschusses entsprechen. (Das Verzeichnis /gallery/2011-06-01 z.B. steht also für den 1. Juni 2011.) Somit landen alle Schnappschüsse eines Tages automatisch in einem Tagesverzeichnis. Auf der Website werden die Bilder mit Hilfe eines Perl-Scripts in Form einer Fotogalerie dargestellt, die automatisch anhand der auf dem Webserver vorhandenen Verzeichnisstruktur erstellt wird:

Die Bilder-Galerie im verkleinerten Firefox-Fenster

Siehe auch

SoftwareTechnik

NistkastenWeb-App

Quelle: