Webcam

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Um die Bilder einer Webcam per VDR anzuzeigen gibt es mehrere Möglichkeiten, abhängig davon, wie die Kamera ihre Bilder zur Verfügung stellt. Voraussetzung ist, daß die Cam ihre Bilder irgendwie in das Linuxsystem "reinkriegt".

Hinweis: Schaut man sich Bilder fremder Webcams an, sollte man das Bild nicht dauernd aktulisieren, da dies u.U. Traffickosten oder Verzögerungen beim Webcameinspeiser generiert. Manche schliessen skriptgesteuertes Laden ihrer Bildern grundsätzlich aus.

Inhaltsverzeichnis

Einzelbild

Kann man die Kamera dazu überreden Einzelbilder (z.B. im JPG-Format) in das Dateisystem abzulegen, kann man diese Bilder per Image-plugin anzeigen.

Dazu sind folgende Einstellungen des Image-Plugins (Version 0.3.0) sinnvoll:

  Diavorführung: ja
  Wiederholung der Diavorführung: ja

Der Rest der Einstellungen ist für unsere Zwecke egal. Leider muß der Cache des Plugins immer wieder gelöscht werden, da das Plugin nicht nachschaut, ob sich das Quellbilddatei geändert hat. Dazu

  • ändert man entweder imageplugin.sh und setzt dort TMPCACHE auf "no"
  • oder löscht den Cache mit mit einem Script (s.u. "per Webserver")

Webserver

Ist in der Kamera ein Webserver integriert, so kann man mittels cron und wget dieses Bild runterlagen und im Dateisystem ablegen. Diese können wie bei Einzelbild beschrieben angeschaut werden.

Ein Beispielscript, das Bilder dreier Webcams lädt:

#!/bin/sh
IMGDIR=/tmp/vdr-webcam
VDRIMAGECACHE=/tmp/image-vdr/
mkdir $IMGDIR
while true; do
    #-- Achtung: Leerzeichen nach "ht" entfernen
    wget ht tp://nuerburgring.de/fileadmin/webcam/webcam.jpg -O $IMGDIR/nuerburgring.jpg
    wget ht tp://www.wildtiere-live.de/current/current.jpg   -O $IMGDIR/hellenthal.jpg
    wget ht tp://telectro01.dyndns.org/record/current.jpg    -O $IMGDIR/linz.jpg
    rm $VDRIMAGECACHE/*
    sleep 3600 #-- eine Stunde warten
done

Hier wird davon ausgegangen, daß der Cache des Image-Plugins auf /tmp/image-vdr/ liegt. Nach Starten des Script auf dem vdr-Rechner (es läuft, bis man Ctrl-C drückt), kann man sich diese Bilder dann anschauen, indem man im Image-Plugin /tmp/vdr-webcam ansteuert und eines der Bilder auswählt.

Siehe auch diese VDR-Portal-Diskussion

IPTV

Das IPTV-Plugin kann ebenfalls Webcambilder in den VDR bringen. Details siehe IPTV-Plugin und im VDR-Portal-Thread "Ist es möglich via VDR auf einen Webcamstream zuzugreifen und auf dem TV anzuzeigen?"

/dev/video*

Erzeugt der Camtreiber per Video4Linux ein Device im Bereich /dev/video*, also z.B. /dev/video0, so hilft das mplayer-plugin. Dazu muß das Plugin die Kommandozeile

mplayer -vo mpegpes -ao mpegpes tv:// -tv driver=v4l:width=640:height=480:device=/dev/video0

aufrufen. Dies schafft man z.B. in dem man die mplayer.sh anpasst, damit es die Datei webcam.mline folgenden Inhalts

tv:// -tv driver=v4l:width=640:height=480:device=/dev/video0

versteht. Eine solche modifizierte mplayer.sh ist unten angehängt. Dann muß man nur noch im MPLayer-Plugin die Datei webcam.mline anwählen, und es sollte klappen.


mplayer.sh

#!/bin/bash
#
# This script is called from VDR to start MPlayer
#
# argument 1: the file to play
# argument 2: (optional) the phrase SLAVE if SlaveMode is enabled
# argument 3: (optional) the phrase AID x to select audio stream x

# where to find mplayer
MPLAYER="mplayer"
    
# mplayer options, -vc will be added below
# add "-lircconf <lircrc>" to enable LIRC support
OPTS="-vo mpegpes -ao mpegpes"


# mplayer options for SlaveMode
SLAVE="-slave -quiet -nolirc"

#####################
FILE=$1

#- Erst mal raten
MIMEGUESS=$(file -ib $FILE)

#- Einige *.rm-Files haben den ganzen Film intus und nicht nur die URL
if [ "$MIMEGUESS" = "application/vnd.rn-realmedia" ]; then
    type="RealMedia"
else

case "$FILE" in
*.pls | *.m3u | *.rm)
  popt="-playlist"
  first=`grep -v -m1 "^#" $FILE`
  type=`file "$first"`
  ;;
*.htl)
  FILE=`grep -v -m1 "^#" $FILE`
  type=`file "$FILE"`
  ;;
*.mline)
  OPTS2=$(cat $FILE)  
  FILE=""
  type='misc'
  ;;
*)
  type=`file "$FILE"`
  ;;
esac

fi

while shift; do
  if [ "$1" = "SLAVE" ]; then
    sopt=$SLAVE
  elif [ "$1" = "AID" ]; then
    aopt="-aid $2"
    shift
  fi
done
#--

VC=","

case "$type" in
*AVI*)
  VC="ffdivx"
  ;;
*MPEG*)
  VC="mpegpes"
  ;;
*movie*)
  ;;  
*RealMedia*)
  OPTS2="-vop lavc=5000:25,expand=352:288:-1:-1:1,scale=352:288  -framedrop"   
  ;;
rtsp*)
    OPTS2="-vop lavc=5000:25,expand=720:576:-1:-1:1,scale=720:576"
    ;;  
*)
  VC=","
  ;;
esac

echo $type                                            > /tmp/mplayer.std
echo $MPLAYER $OPTS $OPTS2 $sopt $aopt $popt "$FILE" >> /tmp/mplayer.std
exec $MPLAYER $OPTS $OPTS2 $sopt $aopt $popt "$FILE" >> /tmp/mplayer.std  2> /tmp/mplayer.err