L'idée est la suivante : afficher le flux vidéo d'une caméra IP sur un écran. Pour ce faire, nous utiliserons un Raspberry Pi qui fera la transition entre le flux (stream) de la caméra vers l'écran, via la sortie HDMI.


Le flux vidéo

Première étape, la plus hasardeuse et plus ou moins complexe : récupérer l'adresse du flux vidéo. Cet article ne décrira pas comment le faire puisque la méthode changera suivant la marque de la caméra, voire même suivant le modèle au sein d'une même marque.
Adresse du flux vidéo : http://$ip/live/0/mjpeg.jpg.

L'accès au flux est sécurisé par une authentification simple à l'aide d'un nom d'utilisateur et d'un mot de passe, donc l'adresse complète du flux vidéo : http://$user:$password@$ip/live/0/mjpeg.jpg.


Mise en place

Une Raspbian minimale fera très bien l'affaire sur votre Rpi. Il suffit d'installer OMXPlayer, un lecteur vidéo spécialement conçu pour le processeur graphique (GPU) du Rpi :

sudo apt-get install omxplayer

Ensuite, la ligne de commande pour lire le flux vidéo vers la sortie HDMI :

omxplayer -o hdmi $url

Script complet

Pour lancer automatiquement l'affichage de la caméra sur l'écran, placez ces lignes de code dans un fichier, disons /opt/stream-hdmi.sh :

#!/bin/sh

user="user"
password="password"
ip="127.0.0.1"
url="/live/0/mjpeg.jpg"

stream="http://${user}:${password}@${ip}${url}"

while true; do
    for n in $(seq 10 -1 1); do
        clear
        echo "Vidéo dans ${n}s..."
        sleep 1
    done
    omxplayer -o hdmi \
        --no-osd \
        --no-keys \
        --aidx -1 \
        --refresh \
        --live \
        "$stream"
done

sleep 10 est très important, sans ça, la commande OMXPlayer s'arrête sur un « Aborted ».
--aidx permet dechoisir la piste audio ; passer -1 désactive l'audio.
L'utilité du while true est de relancer OMXPlayer en cas de rupture du flux vidéo de la part de la caméra.


Un exemple concrêt avec la caméra de surveillance D-Link DCS-2210 :

user="admin"
password="password"
ip="192.168.0.24"
url="/video/mjpg.cgi?profileid=2"

Le flux choisi est le profile n°2, configuré comme tel :

  • Mode : JPEG (car le Raspberry Pi 1 galère à décoder le MPEG4/H264 en haute qualité) ;
  • Frame size : 1280x720 ;
  • View window area : 1280x720 ;
  • Maximum frame rate : 25 (ou 30 suivant le modèle) ;
  • Video quality : Excellent.

Lancement au démarrage

Plusieurs solutions s'offrent à nous.

1. Ajoutez cette ligne au fichier /home/$UTILISATEUR/.profile :

sh /opt/stream-hdmi.sh &

2. Ajoutez cette ligne au fichier /etc/cron.d/stream-hdmi :

@reboot $user sh /opt/stream-hdmi.sh &

3. Ajoutez cette ligne au fichier /etc/rc.local, avant le exit 0 :

sh /opt/stream-hdmi.sh &

Historique

  • 2016-11-19 : suppression de l'argument --loop (convient pour les fichiers, pas les flux) ; ajout de l'exemple D-Link DCS-2210.
  • 2016-06-23 : utilisation de l'argument --aidx.