Nous allons voir dans ce tutoriel comment streamer un flux vidéo à partir d’un Raspberry Pi avec Gstreamer. Un des outils de streaming les plus utilisé est FFMPEG. Nous testons ici, gstreamer car il y a moins de délai de transmission.
Précédent tutoriel de streaming : Flux vidéo entre deux machine avec FFMPEG
Matériel
- Raspberry Pi avec Raspbian
- USB Cam ou RPiCam
Installation de Gstreamer sur Raspberry Pi
Une partie de Gstreamer est installée par défaut sous Raspbian. Nous allons simplement compléter l’installation avec quelques librairies supplémentaires.
# install a missing dependency
$ sudo apt-get install libx264-dev libjpeg-dev
# install the remaining plugins
$ sudo apt-get install libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-bad1.0-dev \
gstreamer1.0-plugins-ugly \
gstreamer1.0-tools \
gstreamer1.0-gl \
gstreamer1.0-gtk3
# if you have Qt5 install this plugin
$ sudo apt-get install gstreamer1.0-qt5
# install if you want to work with audio
$ sudo apt-get install gstreamer1.0-pulseaudio
Pour tester l’installation, entrer la commande suivante
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
Trouver les appareils vidéo et audio disponibles
gst-device-monitor-1.0
Stream vidéo avec Gstreamer
Une fois le nom de l’appareil obtenu, vous pouvez commencer le stream avec la commande
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, width=640, height=480, framerate=30/1 ! videoconvert ! videoscale ! clockoverlay time-format="%D %H:%M:%S" ! autovideosink
Nous envoyons le flux vidéo avec le protocole UDP depuis un Raspberry Pi
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=-1 ! video/x-raw, width=640, height=480, framerate=30/1 ! clockoverlay time-format="%D %H:%M:%S" ! videoconvert ! jpegenc ! udpsink host=192.168.1.70 port=5200
Nous recevons le stream UDP depuis le client (192.168.1.70) à l’aide de la commande
gst-launch-1.0 udpsrc port=5200 ! jpegdec ! videoconvert ! autovideosink
Pour enregistrer le flux vidéo dans un fichier
gst-launch-1.0 -e v4l2src device=/dev/video0 num-buffers=-1 ! 'image/jpeg,framerate=30/1,width=640,height=480' ! queue ! avimux ! filesink location=video.avi
Installation de Gstreamer sur Windows
Pour recevoir le flux vidéo depuis le Raspberry Pi, nous utilisons un ordinateur Windows. Vous pouvez utiliser un autre appareil (RPi, Android, iOS, macOS).
Pour information, l’installation de Gstreamer sous Windows se fait à l’aide d’un installateur msi disponible sur le site.
Après avoir téléchargé et installé Gstreamer, vous devez rajouter le dossier C:\gstreamer\1.0\msvc_x86_64\bin à la variable d’environnement Path.
Pour tester l’installation, entrer la commande suivante
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
Pour streamer, une vidéo à partir de la caméra
gst-launch-1.0 mfvideosrc ! video/x-raw, width=1280, height=720, framerate=30/1 ! videoconvert ! videoscale ! clockoverlay time-format="%D %H:%M:%S" ! video/x-raw, width=640, height=360 ! autovideosink
Il est possible de lancer un stream avec le protocole UDP
gst-launch-1.0 mfvideosrc ! video/x-raw, width=1280, height=720, framerate=30/1 ! videoconvert ! videoscale ! clockoverlay time-format="%D %H:%M:%S" ! video/x-raw, width=640, height=360 ! jpegenc ! udpsink host=192.168.1.92 port=5200
Nous recevons le stream UDP depuis le client(192.168.1.92) à l’aide de la commande
gst-launch-1.0 udpsrc port=5200 ! jpegdec ! videoconvert ! autovideosink
Installation de Gstreamer sur Ubuntu ou Debian
Afin d’utiliser Gstreamer dans les meilleurs conditions nous auron besoin de la librairie v4l2
sudo apt install v4l-utils
Dans un terminal, entrée les commandes suivantes pour installer gstreamer.
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
Pour tester l’installation, entrer la commande suivante
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
Afin de lancer le stream video depuis Ubuntu, vous pouvez lancer la commande suivante
gst-launch-1.0 v4l2src name="/dev_video0" ! decodebin ! videoconvert ! videoscale ! clockoverlay time-format="%D %H:%M:%S" ! video/x-raw,format=RGB ! queue ! videoconvert !
N.B.: n’oubliez pas d’ajouter decodebin
Il est possible de lancer un stream avec le protocole UDP
gst-launch-1.0 v4l2src name="/dev_video0" num-buffers=-1 ! decodebin ! videoconvert ! videoscale ! clockoverlay time-format="%D %H:%M:%S" ! video/x-raw,format=RGB ! queue ! videoconvert ! jpegenc ! udpsink host=192.168.1.70 port=5200
Nous recevons le stream UDP depuis le client (192.168.1.70) à l’aide de la commande
gst-launch-1.0 udpsrc port=5200 ! jpegdec ! videoconvert ! autovideosink
Sources
- GStreamer downloads
- Qengineering ref