fbpixel
Etiquetas: , ,

En este tutorial veremos cómo transmitir vídeo desde una Raspberry Pi utilizando Gstreamer. Una de las herramientas de streaming más utilizadas es FFMPEG. Aquí estamos probando gstreamer porque tiene menos retardo de transmisión.

Tutorial de streaming anterior: Streaming de vídeo entre dos máquinas con FFMPEG

Hardware

  • Raspberry Pi con Raspbian
  • Cámara USB o RPiCam

Instalación de Gstreamer en Raspberry Pi

Parte de Gstreamer está instalado por defecto en Raspbian. Simplemente completaremos la instalación con algunas librerías adicionales.

# 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

Para probar la instalación, introduzca el siguiente comando

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
gstreamer-test-command-result Transmisión de vídeo con Gstreamer en Raspberry Pi

Buscar dispositivos de vídeo y audio disponibles

gst-device-monitor-1.0

Streaming de vídeo con Gstreamer

Una vez que tenga el nombre del dispositivo, puede iniciar el flujo con el comando

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

Enviamos el flujo de vídeo utilizando el protocolo UDP desde una 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

Recibimos el flujo UDP del cliente (192.168.1.70) utilizando el comando

gst-launch-1.0 udpsrc port=5200 ! jpegdec ! videoconvert ! autovideosink

Para guardar el flujo de vídeo en un archivo

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

Instalación de Gstreamer en Windows

Para recibir el flujo de vídeo de la Raspberry Pi, utilizamos un ordenador con Windows. Puedes utilizar cualquier otro dispositivo (RPi, Android, iOS, macOS).

A título informativo, Gstreamer se instala en Windows mediante un instalador msi disponible en el sitio.

Después de descargar e instalar Gstreamer, tienes que añadir la carpeta C:\gstreamer\1.0\msvc_x86_64\bin a la variable de entorno Path.

gstreamer-windows-add-env-variable Transmisión de vídeo con Gstreamer en Raspberry Pi

Para probar la instalación, introduzca el siguiente comando

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

Para transmitir vídeo desde la cámara

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

Puede lanzar un flujo utilizando el protocolo 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

Recibimos el flujo UDP del cliente (192.168.1.92) utilizando el comando

gst-launch-1.0 udpsrc port=5200 ! jpegdec ! videoconvert ! autovideosink

Instalación de Gstreamer en Ubuntu o Debian

Para utilizar Gstreamer en las mejores condiciones necesitaremos la librería v4l2

sudo apt install v4l-utils

En un terminal, introduce los siguientes comandos para instalar 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

Para probar la instalación, introduzca el siguiente comando

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

Para iniciar el flujo de vídeo desde Ubuntu, ejecute el siguiente comando

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.: no olvide añadir decodebin

Puede lanzar un flujo utilizando el protocolo 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

Recibimos el flujo UDP del cliente (192.168.1.70) utilizando el comando

gst-launch-1.0 udpsrc port=5200 ! jpegdec ! videoconvert ! autovideosink

Fuentes