Raspberry Pi : stream → HDMI

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 (abrégé Rpi par la suite) 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 suivant le modèle au sein d’une même marque.

Format d’adresse du flux vidéo :

http://IP/live/0/mjpeg.jpg

Note

Si 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, l’adresse complète du flux vidéo sera plutôt de ce genre :

http://USER:PASSWORD@IP/live/0/mjpeg.jpg

Mise en Place

Une Raspbian minimale fera l’affaire sur votre Rpi. Nous allons installer OMXPlayer, un lecteur vidéo spécialement conçu pour le processeur graphique (GPU) du Rpi :

sudo apt install omxplayer

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

omxplayer -o hdmi URL

Script Complet

Ci-dessous est le script complet qui lancera automatiquement l’affichage de la caméra sur l’écran :

/opt/stream-hdmi.sh
#!/bin/bash

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

Note

  • sleep 10 est important, sans ça, OMXPlayer s’arrête sur une erreur « Aborted » ;

  • --aidx permet de choisir la piste audio (-1 pour désactiver 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.


Exemple


Lancement au Démarrage

Plusieurs solutions s’offrent à nous :

~/.profile
# (…)
sh /opt/stream-hdmi.sh &
/etc/cron.d/stream-hdmi
@reboot USER sh /opt/stream-hdmi.sh &
/etc/rc.local
# (…)
sh /opt/stream-hdmi.sh &
exit 0

📜 Historique

2024-02-01

Déplacement de l’article depuis le blog.

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.

2016-06-02

Premier jet.