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
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.
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
- Descargas de GStreamer
- Qengineering ref