Webcam de surveillance avec transfert FTP automatisé

Dans le cadre de mon travaille, j'ai mis en place un système de webcam de surveillance avec transfert FTP automatisé. Au préalable il vous faudra installer un serveur icecast2:
voici quelques liens au sujet de icecast2:
Je pense qu'avec ça vous pourrez utiliser mes trois petits scripts tranquillement ;-)
code du lanceur
#! /bin/bash if [[ `which expect` == '' ]]; then zenity --question --title="Installation" --text="<b>expect</b> ne semble pas installé. Souhaitez vous l'installer maintenant ?" if [[ "$?" == 0 ]]; then gksudo -m "L'installation de expect nécessite les privilèges administrateur" "apt-get install -y -f expect" | zenity --progress --title="Installation" --text="Installation de <b>expect</b> en cours..." --auto-close --pulsate else exit fi fi function interface() { choice=`zenity \ --list \ --title="$ztitle" \ --text="$ztext" \ --height="275" \ --width="200" \ --column "Actions" \ "Démarrer le serveur vidéo" \ "Stopper le serveur vidéo" \ "Purger le serveur vidéo" \ "Heure du lancement du serveur vidéo"` case $choice in "Démarrer le serveur vidéo") /home/chrono/Documents/scripts/Bash/webcam/webcam.sh & pID=$! ztitle="[Démarré] Serveur Vidéo" ztime=`cat /home/chrono/Documents/scripts/Bash/webcam/start.time` ztext="<span color='green'>Serveur vidéo démarré</span>\n<span color='red'>L'enregistrement commencera à <b>$ztime</b></span>\n\nChoisissez une des actions disponible dans la liste :" interface ;; "Stopper le serveur vidéo") kill $pID kill `cat /home/chrono/Documents/scripts/Bash/webcam/webcam.pid` killall gst-launch* killall gst-launch-0.10 ztitle="[Stoppé] Serveur Vidéo" ztext="<span color='red'>Serveur vidéo stoppé</span>\nChoisissez une des actions disponible dans la liste :" interface ;; "Purger le serveur vidéo") rm -rf /home/chrono/Documents/scripts/Bash/webcam/outputs/*.ogg rm -rf /home/chrono/Documents/scripts/Bash/webcam/*.pid rm -rf /home/chrono/Documents/scripts/Bash/webcam/*.lock interface ;; "Heure du lancement du serveur vidéo") gedit /home/chrono/Documents/scripts/Bash/webcam/start.time kill $pID kill `cat /home/chrono/Documents/scripts/Bash/webcam/webcam.pid` killall gst-launch* killall gst-launch-0.10 ztitle="[Stoppé] Serveur Vidéo" ztext="<span color='red'>Serveur vidéo stoppé</span>\nChoisissez une des actions disponible dans la liste :" interface ;; esac } gksudo -m "Le lancement du serveur vidéo nécessite les privilège administrateur !" "service icecast2 restart" ztitle="[Stoppé] Serveur Vidéo" ztext="<span color='red'>Serveur vidéo stoppé</span>\nChoisissez une des actions disponible dans la liste :" interface
code de l'enregistrement webcam:
#!/bin/bash function gst_start() { trap control_c SIGINT echo -en "\n*** Enregistrement en cours ***\n" tim=`date +%m-%d_%H-%M-%S` killall gst-launch* killall gst-launch-0.10 kill `cat /home/chrono/Documents/scripts/Bash/webcam/gst.pid` echo -en "\n*** Synchronisation FTP en cours... ***\n" /home/chrono/Documents/scripts/Bash/webcam/ftpsync.sh gst-launch-0.10 v4l2src ! \ video/x-raw-rgb, framerate=25/1, width=800, height=600 ! \ ffmpegcolorspace ! \ theoraenc quality=8 ! \ queue ! \ oggmux name=mux pulsesrc ! \ queue ! \ audioconvert ! \ vorbisenc quality=0.1 ! \ queue ! \ mux. mux. ! \ queue ! \ tee name=tfile ! \ queue ! \ filesink location=/home/chrono/Documents/scripts/Bash/webcam/outputs/$tim.ogg tfile. ! \ queue ! \ shout2send ip=localhost port=8000 mount=mountpoint.ogg password=pass & echo $! > /home/chrono/Documents/scripts/Bash/webcam/gst.pid touch /home/chrono/Documents/scripts/Bash/webcam/webcam.lock for ((a=1; a <= 10; a++)); do sleep 5 echo -en "\n*** Synchronisation FTP PASS N°$a cours... ***\n" /home/chrono/Documents/scripts/Bash/webcam/ftpsync.sh done echo -en "*** Fin de la synchronisation FTP ***\n" gst_start } function gst_launch() { gst_start # echo $! > $PWD/webcam.pid # sleep 62 # put_ftp kill `cat /home/chrono/Documents/scripts/Bash/webcam/webcam.pid` kill `cat /home/chrono/Documents/scripts/Bash/webcam/gst.pid` kill `cat /home/chrono/Documents/scripts/Bash/webcam/osize.pid` rm -rf /home/chrono/Documents/scripts/Bash/webcam/webcam.pid rm -rf /home/chrono/Documents/scripts/Bash/webcam/webcam.lock rm -rf /home/chrono/Documents/scripts/Bash/webcam/ftp.lock rm -rf /home/chrono/Documents/scripts/Bash/webcam/out.ogg } function control_c(){ echo -en "\n*** Quitter ***\n" killall lftp kill $gstPID kill $putPID exit $? } gstPID="" putPID="" trap control_c SIGINT while [[ "`date +%H:%M`" != `cat /home/chrono/Documents/scripts/Bash/webcam/start.time` ]]; do echo -n; done gst_launch
code du transfert FTP:
#!/bin/bash # # Synchronise deux répertoires en utilisant FTP HOST="ftp.delamortquitue.fr" LOGIN="behuman" PASSWORD="salutlemonde" LOCALDIR="/home/chrono/Documents/scripts/Bash/webcam/outputs" REMOTEDIR="/security/backups/" EXCLUDED="*.*~" function Usage() { echo -e "\n Synchronise un répertoire local avec un répertoire distant en utilisant FTP"; echo -e "\n USAGE: ftpsync local_dir"; echo; } if [ "$LOCALDIR" = "" ] then echo -e " ERREUR: Veuillez spécifier un répertoire local"; Usage; exit 1; fi if [ -e "$LOCALDIR" ] then lftp -c "set ftp:list-options -a; open ftp://$LOGIN:$PASSWORD@$HOST; lcd $LOCALDIR; cd $REMOTEDIR; mirror --reverse \ --delete \ --verbose \ --exclude-glob $EXCLUDED"; fi
un petit fichier en parrallèle permettra de définir l'heure de lancement de la webcam de surveillance
start.time:
16:00
voilà donc pour se script, je pense qu'il y a moyen de mieux gérer le transfert FTP, actuellement ce script tourne quotidiennement sur notre infrastructure.