fbpixel
Étiquettes : , ,

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
gstreamer-test-command-result Vidéo stream avec Gstreamer sur Raspberry Pi

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.

gstreamer-windows-add-env-variable Vidéo stream avec Gstreamer sur Raspberry Pi

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