Je veux qu’un Raspberry Pi lise et serve un flux vidéo issu d’une caméra IP (en wifi ou ethernet). J’ai choisi d’installer motion car il me permettra de détecter les mouvements puis de déclencher des alertes. Dans cet article, j’explique seulement comment installer motion puis visualiser le flux vidéo sur une page web, en streaming.
Ce qu’il faut
- un Raspberry Pi (un B+, avec une carte sd qui contient tout ce qui a été créé dans l’article Mise en service d’un Raspberry Pi – ie pour moi avec l’image radio-pi-2016-06-10-8h.img et Raspbian Jessie)
- une caméra web, pour moi connectée par cable ethernet, une Foscam FI8905W, avec une IP fixe).
Changer le nom du Pi et vérifier
regarder l’adresse IP du pi sur le routeur local (pour moi 192.168.1.16)
se connecter au pi en ssh et changer son nom (hostname)
ssh root@192.168.1.16 raspi-config
puis dans 9- advanced options, aller dans A2 hostname et renommer le Pi (pour moi, « nautilus »). Finir et accepter le Reboot
Maintenant je peux me connecter à ce pi avec ssh root@nautilus .
Noter que je me connecte en root, ce qui n’est pas conseillé. Mais ça m’évite de taper « sudo » devant chaque commande !
Installer motion
on installe des utilitaires nécessaires puis motion.
apt-get install -y libjpeg62-turbo libjpeg62-turbo-dev libavformat-dev libavcodec-dev libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 apt-get install motion apt-get update apt-get upgrade
Ca prend pas mal de temps (plusieurs minutes).
Pendant ce temps, préparer la page html qui servira à débugger et vérifier.
Préparer une page html de débogage et vérification
Créer un fichier page-test.html sur un PC, qui contient le code suivant :
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>premier test d'affichage caméra</title> <link href="A-style.css" rel="stylesheet" media="all" type="text/css"> </head> <body> <H1>Tableau de bord maison</h1> <section class="streaming"> <h3>streaming caméra IP Foscam FI8905W</h3> <p>en continu - directement de la caméra (IP fixe 192.168.1.201)</p> <img name="FoscamCamera" src="https://USER:PWD@192.168.1.201:80/videostream.cgi?user=USER&pwd=PWD" width="600" height="450" alt="Live Feed" style="background-color: #009999" /> </section> <section class="streaming"> <h3>streaming caméra IP Foscam FI8905W via pi nautilus</h3> <p>en continu - directement à la caméra</p> <img src= "http://nautilus:8081/?action=stream" width="640" height="480" title="Camera devant maison"/> </section> </body> </html>
Evidemment, il faut remplacer USER et PWD par les bons codes de la caméra utilisée.
Dans le même répertoire, placer un fichier A-style.css
html, body { background-color: #d8da3d ; margin: 0; padding: 0; } body { padding-left: 11em; font-family: Georgia, "Times New Roman", Times, serif; color: purple; background-color: #d8da3d } h1 { font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif } a:link { color: blue } a:visited { color: purple }
Et maintenant, dans l’explorateur de fichiers, cliquer à droite sur page-test.html et choisir ouvrir avec votre navigateur favori (chrome pour moi).
On voit le flux vidéo de la caméra en direct mais évidemment pas celui qui passe par le pi puisqu’on n’a pas encore fini d’installer et de configurer motion.

page web de test et deboguage de motion sur Raspberry Pi
Evidemment, si la première partie de la page n’affiche pas le flux vidéo de la caméra, chercher comment régler la caméra. Pour moi ça fonctionne avec une caméra Foscam FI8905W réglée comme suit :
- adresse IP fixe 192.168.1.201
- un administrateur (il faudrait sans doute que ce soit seulement un visiteur pour limiter les risques) nommé USER avec mot de passe PWD
- firmware version 11.35.2.63
- Device Embeded Web UI Version 2.4.20.11
Il est impératif de vérifier que http://USER:PWD@192.168.1.201:80/videostream.cgi?user=USER&pwd=PWD permet bien la visualisation du flux vidéo provenant de la caméra. Sinon la configuration de motion ne fonctionnera pas !
installer motion comme un « service »
Redémarrer le pi avec init 6 ou reboot .
On veut que motion démarre en même temps que le Pi . Pour cela motion doit être installé comme un service.
Dans /etc/default/motion (attention si vous n’utilisez pas Raspbian Jessie, je crois que c’est un autre répertoire), modifier la ligne suivante (no devient yes) :
start_motion_daemon=yes
Pour donner les bons droits d’accès aux fichiers et répertoires nécessaires à motion (les fichiers et répertoires sont ceux qui sont définis dans motion.conf) :
# /etc/motion/motion.conf et thread_.conf en 775 et propriétaire root/motion chown -R root:motion /etc/motion/ chmod -R 775 /etc/motion/ #664 will not work when motion runs as a service # /usr/bin/motion : 755 chmod 755 /usr/bin/motion #var/run/motion (pour motion.pid) mkdir /var/run/motion touch /var/run/motion/motion.pid chmod 755 /var/run/motion/motion.pid #/home/al/motion/ en niveau 777 et propriétaire root / motion # dans /home/al/motion/ créer le fichier motion.log en niveau 777 # thread0.conf (foscam) : /home/jf/motion/log/foscam # thread1.conf (tablette) : /home/jf/motion/log/galaxy mkdir /home/jf/motion mkdir /home/jf/motion/log mkdir /home/jf/motion/log/galaxy mkdir /home/jf/motion/log/foscam touch /home/jf/motion/log/motion-log.log chown -R root:motion /home/jf/motion/ chmod -R 755 /home/jf/motion/ chmod 777 /home/jf/motion/log/motion-log.log
Redémarrer le pi avec init 6 ou reboot .
Maintenant, on doit voir motion parmi tous les services en cours de fonctionnement, avec un « + » devant :
service --status-all
Une liste de services s’affiche, en ordre alphabétique. Lorsqu’il y a [+] devant le service est démarré, sinon il y a [-] devant.
On voit dans cette copie d’écran que motion est démarré.
et si on veut voir le statut de motion
service motion status –l
Logiquement il y a des lignes en rouge, en particulier [ALR] [VID] vid_v4lx_start: Failed to open video device /dev/video0: . C’est normal puisqu’on n’a pas configuré motion.
Dans ce qui suit, on utilisera les commandes suivantes pour arrêter, démarrer ou redémarrer le service motion :
service motion stop service motion start service motion restart
Maintenant, il nous reste à configurer motion.
configurer motion
Nous voulons que motion lise le flux vidéo de la caméra à l’adresse IP 192.168.1.201 et qu’il autorise l’accès par un appareil sur le réseau.
J’ai installé de cette façon une deuxième caméra à partir d’une vieille tablette android : une caméra IP avec une vieille tablette android ?
Avant de modifier /etc/motion/motion.conf, en faire une copie qu’on appellera par exemple motion.conf.OLD. motion.conf doit avoir des droits d’accès en 664.
Editer motion.conf et régler les lignes comme suit, dans l’ordre du contenu du fichier (pour moi This config file was generated by motion 3.2.12+git20140228 , ça m’indique la version de motion pour lesquelles cette configuration fonctionne).
Pour mieux comprendre les options de réglages que l’on a, voir le wiki de l’auteur de motion, ici.
daemon on logfile /home/jf/motion/log/motion-log.log log_level 6 # on le laisse à ce niveau par défaut pour l'instant v4l2_palette 8 # 17 ne marche pas correctement width 640 #320 # lié à la caméra pour moi 640 height 480 # lié à la caméra framerate 2 #2 image par seconde # pour netcam_url, remarquer le ';' devant et le supprimer ! netcam_url http://USER:PWD@192.168.1.201:80/videostream.cgi?user=USER&pwd=PWD ; netcam_userpass value # laisser en commentaire avec ; devant netcam_keepalive on ffmpeg_output_movies on ; si on ne commente pas, erreur [0] [ALR] [ALL] conf_cmdparse: Unknown config option "sdl_threadnr" ; erreur pas grave mais remplit le fichier log # sdl_threadnr 0 target_dir /home/jf/motion/log # Target base directory for pictures and films # on utilise la commande http qui fonctionne en direct dans notre page web de déboguage stream_port 8081 stream_localhost off # permet l'accès en local webcontrol_port 8085 webcontrol_localhost off # on bloque l'accès
Ensuite on redémarre motion avec service motion restart . Puis Puis service motion status -l nous indique si tout va bien.
Tout va bien mais erreur Unknown config option « sdl_threadnr ». Je n’ai pas trouvé comment la résoudre et ça ne paraît pas géner le fonctionnement de motion.
Tester le bon fonctionnement
Si le flux de la caméra ne s’affiche pas correctement dans la deuxième partie de notre page de test page-test.html , ouvrir /home/al/tmp/motion.log et identifier l’erreur qui bloque motion.
on peut aussi arrêter le service motion (service motion stop ) et taper seulement motion , qui affiche des indications d’erreurs éventuelles.
Et maintenant ?
Dans l’article suivant de cette série Caméra de surveillance et Raspberry Pi, nous verrons comment configurer motion pour qu’il détecte les mouvements et alerte.
Bonjour, Je n’arrive pas a avoir de visualisation de la camera, j’ai un écrans gris, avec marquer « Unable to open video device ». J’ai tester avec tout les palettes « v4l2_palette » disponible et aucune ne marche. Avec la ligne « service motion status –l » rien n’est en rouge, ci-joint un morceau du fichier motion-log.log et du terminal: terminal: « pi@RPi3-1:/etc/motion $ service motion status -l ● motion.service – LSB: Start Motion detection Loaded: loaded (/etc/init.d/motion; generated; vendor preset: enabled) Active: active (running) since Fri 2019-08-02 16:05:32 CEST; 5min ago Docs: man:systemd-sysv-generator(8) Process: 2651 ExecStop=/etc/init.d/motion stop (code=exited, status=0/SUCCESS) Process: 2660 ExecStart=/etc/init.d/motion start (code=exited, status=0/SUCCESS) CGroup:… Lire la suite »
Bonjour,
Merci beaucoup pour tutoriel !
J’ai réussi à installer Motion, visualiser les deux streaming, l’un directement de la caméra via mon navigateur sur Mac et l’autre via mon raspberry Pi 3 b+ … mon seul souci est que j’ai un écran noir sur le streaming du raspPi que je n’arrive pas à débugger. Dans le log, j’ai des messages disant que soit le keep-alive n’est pas setup (pourtant il est sur ON dans le fichier de config) ou bien c’est une histoire de mjpeg compression failure … ca commence à me dépasser!
Merci pour ton retour,
Génial ton article ! Je teste également cette solution avec deux cameras IP
et la camera pour Raspberry …