Streaming depuis la Raspberry Camera

Date: 30/05/2013 | Catégories: Gstreamer,Hardware,Open-source,Planet-libre,Video | Tags: ,,,

Après une rapide présentation de la Raspberry Camera 5M (voir ce précédant billet), entrons dans le vif du sujet avec une utilisation pratique: le streaming "live" du flux vidéo vers une autre machine de votre réseau. Les applications peuvent aller d'un "baby video phone" à  un "interphone vidéo" pour votre maison en passant par toutes les autres choses qui vous passent par la tête !

Actuellement, la camera dispose d'un logiciel spécifique Raspivid (dont les sources sont disponibles sur Github), pour capturer et encoder en H.264 la vidéo dans un fichier ou bien sur le flux standard de sortie (stdout). C'est cette dernière particularité que nous allons exploiter afin de rediriger le flux vidéo vers une pipeline GStreamer qui va s'occuper du streaming vers notre machine cible (celle ou l'on souhaite voir la vidéo).

Installation des composants GStreamer

On commence par installer GStreamer sur notre Raspberry PI. Pour cela on saisi la commande suivante:

sudo apt-get install gstreamer-tools gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly

L'installation va prendre un certain temps. Passiensa !

Pour vérifier que les composants ont été correctement installé, saisir la commande suivante:

gst-inspect

Qui devrait afficher les chiffres suivants (qui peuvent varier légèrement selon votre configuration):

Total count: 233 plugins, 695 features

Lancement de la diffusion (streaming) sur le Raspberry

On utilise la pipeline suivante:

raspivid -t 0 -w 1280 -h 720 -fps 25 -b 2500000 -p 0,0,640,480 -o - | gst-launch -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.0.9 port 5000

Détaillons un peu cette ligne de commande. La première partie est dédiée à Raspvid et s'occupe de l'encodage H.264. Les paramètres sont très importants pour avoir une qualité vidéo conforme à vos besoins. Ainsi, dans mon exemple, je n'y suis pas allé avec le dos de la cuillère car j'ai opté pour une résolution HD 720p (-w 1280 -h 720) à 25 images par seconde (-fps 25) pendant un temps infini (-t -1).

Pour le streaming, le paramètre de débit (bitrate, -b 2500000) est primordial car il va fixer le débit sortant de la vidéo (à 2.5 Mbps dans mon exemple).

Ce débit est à adapté selon votre résolution. Après quelques tests, voici une table indicative des débits à utiliser:

  • SD Low: -w 480 -h 260 -fps 25 -b  800000
  • SD Medium: -w 640 -h 360 -fps 25 -b  1200000
  • SD High: -w 960 -h 540 -fps 25 -b  1800000
  • HD Ready: -w 1280 -h 720 -fps 25 -b  2500000
  • Full HD: -w 1920 -h 1080 -fps 25 -b  5000000

Note: attention au dimensionnement de votre réseau si vous utilisez des débits élevés, en effet même avec des bornes Wifi ressentes, il est difficile de garder un débit constant de 5 Mbps (Full HD).

Note 2: sur le Raspberry, je conseille d'utiliser l'interface Ethernet et pas un dongle Wifi, surtout avec des résolutions importantes.

La commande passe ensuite la main à GStreamer qui va encapsuler le flux H.264 dans un conteneur RTP puis créer le serveur TCP en écoute des clients (il faudra penser à remplacer l'adresse IP par celle de votre Raspberry Pi).

Lecture de la vidéo depuis une autre machine

J'ai fait le test depuis mon portable Ubuntu 13.04 en saisissant la ligne de commande suivante pour récupérer et afficher la vidéo:

gst-launch-1.0 -v tcpclientsrc host=192.168.0.9 port=5000  ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

La qualité de la vidéo est très bonne, fluide. On note quelques retard quand on sollicite le réseau en parallèle mais cela semble normal vu les débits utilisés.

Lecture streaming Raspberry Pi Camera 720p

Ce qui est très impressionnant au niveau du Raspberry, c'est la faible consommation CPU. En effet, Raspivid ne dépasse pas les 2% (merci le GPU) et GStreamer les 25%. On peut sans aucun problème laisser tourner le tout sans risque de surchauffe.

Conclusion

J'espère que cette rapide introduction sur le streaming vidéo depuis le Raspberry vous a donné des idées que vous aller vous empresser de nous faire partager dans les commentaires ci-dessous !

Retrouvez mes articles sur l’écosystème Raspberry Pi en cliquant ici.

Partager ce billet