Video Streaming Live! con Raspberry Pi y Playstation Eye Toy

Video Streaming Live! con Raspberry Pi y Playstation Eye Toy
a2

¡Hola a todos! Hoy vamos a aprender cómo realizar un servicio de video streaming en directo gracias a nuestra Raspberry Pi. Para ello nos vamos a ayudar de una Webcam USB conectada a la Raspberry Pi y un software que se encargará de recoger el vídeo emitido por la cámara. En la última parte del tutorial se detallará la posibilidad de acceder a nuestra emisión desde Internet (no sólo de modo local) para poder ver la emisión desde el móvil, tablet u otro ordenador.

Para ello, necesitaremos lo siguiente:

  • 1x RaspberryPi con Raspbian (aquí un tutorial de cómo instalar Raspbian)
  • 1x Webcam USB (En este caso se ha utilizado una Playstation Eye Toy)
  • Programa MJPG-Streamer
  • Conexión a Internet

¡Recomendación!

Lo primero de todo será actualizar nuestra distribución Raspbian instalada en la RaspberryPi. Para ello ejecutaremos los siguientes comandos desde una terminal:

¡Aviso! La ejecución de los dos primeros comandos puede demorar bastante. No seáis impacientes. El último comando reiniciará nuestra RaspberryPi.$ sudo apt-get update $ sudo apt-get upgrade $ sudo reboot¡Comencemos a trabajar!

Conectividad de la Webcam:

Una vez actualizada la RaspberryPi, conectaremos nuestra Webcam USB a uno de los dos puertos USB disponibles. Para comprobar que la cámara ha sido detectada, ejecutaremos los siguientes comandos desde una terminal:

$ ls -l /dev/video*¡Aviso! Si no te aparece /dev/video0 en el listado, significa que tu Webcam no ha sido detectada, o bien, no es compatible. Hay algunas webcams que es necesario conectarlas mediante un HUB USB con alimentación externa, ya que consumen más corriente de lo que la Raspberry Pi suministra.$ lsusb

Con el último comando obtendremos información de la Webcam que hemos conectado: aparecerá en una línea Bus, Device, ID y nombre de la Webcam que ha sido detectada por el sistema.

Instalación de librerías y utilidades necesarias:

Una vez hayamos comprobado que la Webcam ha sido detectada correctamente, procederemos a la instalación de las siguientes librerías que necesita la herramienta MJPG-Streamer y la utilidad subversion que nos servirá más adelante para descargarla. Para ello ejecutamos los siguientes comandos desde una terminal:

$ sudo apt-get install libjpeg8-dev $ sudo apt-get install imagemagick $ sudo apt-get install subversionDescarga, compilación y ejecución de MJPG-Streamer:

Instaladas las librerías, el siguiente paso es descargar la herramienta necesaria para realizar el streaming de vídeo que captura nuestra Webcam. Para empezar, crearemos un nuevo directorio para trabajar más cómodamente. Para ello, ejecutamos los siguientes comandos desde una terminal:

$ mkdir mjpg $ cd mjpg

Con el segundo comando hemos accedido al directorio que acabamos de crear (mjpg) , el cual utilizaremos para alojar la herramienta MJPG-Streamer que vamos a descargar. Para obtener dicha herramienta, situados en el directorio creado anteriormente, lo descargaremos mediante la ejecución del siguiente comando:

$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer

Se nos habrá creado un nuevo directorio con el nombre mjpg-streamer . Dentro se encontrarán los archivos necesarios para realizar su compilación, la cual vamos a realizar a continuación ejecutando el siguiente comando:

$ make

La compilación generará los archivos necesarios para ejecutar la herramienta MJPG-Streamer. Ya tenemos lista la herramienta para poder ser ejecutada, pero antes vamos a explicar en qué consiste esta herramienta.

¿Qué es MJPG-Streamer?

MJPG-Streamer es un aplicación que se ejecuta por línea de comandos. A grandes rasgos, se encarga de obtener frames JPG (imágenes) capturadas desde una cámara compatible y transmitirlas como M-JPEG (secuencia de vídeo) mediante el protocolo HTTP para poder visualizarlo en navegadores, VLC y otras herramientas.

¿Cómo funciona?

Su funcionamiento se basa en unos plugins de entrada y salida. Es decir, un plugin (de entrada) copia las imágenes JPEG a un directorio de acceso global, mientras que otro plugin (de salida) procesa las imágenes, sirviéndolas como un simple fichero de imagen, o bien, emite las mismas de acuerdo a los estándares MPG existentes.

Por lo tanto, con la compilación anterior, lo que hemos hecho ha sido generar éstos plugins. Vamos a explicar en qué consisten:

  • mjpg_streamer: Herramienta de línea de comandos, que copia las imágenes JPG de un plugin de entrada, a uno o más plugins de salida.
  • input_uvc.so: Captura los frames JPG de una Webcam conectada. (A una resolución máxima de 960x720 píxels y un elevado frame rate (>=15fps), con poca carga sobre la CPU).
  • output_http.so: Servidor Web HTTP 1.0. Sirve una única imagen JPG o bien las emite de acuerdo al estándar M-JPEG.

Como se ha explicado anteriormente, MJPG-Streamer funciona bajo línea de comandos, por lo que para iniciarla deberemos ejecutar el siguiente comando:

¡IMPORTANTE! Asegurarse de que la Webcam fue detectada correctamente como se explicó y que está conectada a la Raspberry Pi.$ ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y" -o "./output_http.so -w ./www"

Ejecutada la herramienta, debería de aparecernos lo siguiente, como se observa en la imagen:

Iniciando MJPG-Streamer

Como observaréis, han aparecido una serie de errores, pero no son importantes, ya que la herramienta se está ejecutando correctamente, y para prueba de ello, ¡vamos a acceder a ella!

¿Cómo accedemos a la herramienta para ver nuestro vídeo streaming en directo?

Antes de nada, vamos a detenernos un momento a leer los mensajes que aparecen en la terminal:

MJPG Streamer Version: svn rev: i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 640 x 480 i: Frames Per Second.: 5 i: Format............: YUV i: JPEG Quality......: 80 o: www-folder-path...: ./www/ o: HTTP TCP port.....: 8080 o: username:password.: disabled o: commands..........: enabled

Como se puede observar, los mensajes son bastantes descriptivos:

  1. Se nos notifica de que se está usando el dispositivo /dev/video0 (¡nuestra Webcam conectada!)
  2. La resolución con la que se está emitiendo vídeo: 640x480
  3. Se están tomando imágenes a una razón de:  5 FPS
  4. El formato de paleta de colores: YUV
  5. Calidad de las imágenes JPEG: 80%
  6. Directorio de la aplicación Web de la herramienta: ./www
  7. Puerto TCP donde se emite el vídeo: 8080
  8. Usuario:contraseña (por si se quiere restingir el acceso): disabled
  9. Comandos: enabled

De todos ellos nos quedamos con el más importante, el 8. : La aplicación Web de la herramienta se está ejecutando en el puerto 8080.

IP_DE_NUESTRA_RASPBERRYPI Si no sabes la dirección que tiene tu RaspberryPI, lo más fácil es ejecutar el comando ifconfig en una terminal y quedarse con la dirección que aparece después de inet addr:

A continuación abriremos un navegador, y accederemos a la siguiente dirección:

http://IP_DE_NUESTRA_RASPBERRYPI:8080

Y por fin......¡tachán! Hemos accedido a la aplicación web de la herramienta MJPG-Streamer. El aspecto que presenta su dashboard es el que se puede observar en la siguiente imagen:

Dashboard MJPG

Ahora podremos acceder a las distintas opciones de las que dispone la aplicación web:

  1. HOME: Página de inicio.
  2. STATIC: Ejemplo de página web con una imagen estática capturada por la Webcam.
  3. STREAM: Ejemplo de página web con la emisión del vídeo en directo.
  4. JAVA: Ejemplo de emisión de vídeo realizado con un applet de Java.
  5. JAVASCRIPT: Ejemplo de emisión de vídeo realizado con Javascript.
  6. VideoLAN: Ejemplo para obtener la URL del vídeo emitido en directo y poder abrirlo mediante el programa VLC.
  7. CONTROL: Se abrirá una nueva ventana (como aparece en la siguiente imagen) que nos permitirá modificar parámetros como brillo, saturación, contraste...
control

Y hasta aquí, todos los pasos necesarios para hacer vídeo streaming en directo con nuestra Raspberry Pi...

+ Información sobre MJPG-Streamer, en su Web Oficial

¡Un momento! Pero... ¿Y si quisiéramos tener acceso a la emisión de vídeo en directo desde fuera de casa? ¿Cómo lo logramos?

Para ello, recomiendo seguir el tutorial donde se explica cómo utilizar el servicio NO-IP, el cual nos permitirá crear un dominio virtual y asignarlo a una dirección IP donde esté conectada nuestra RaspberryPi.

TUTORIAL RASPBERRY PI – 7. ESCRITORIO REMOTO VNC + NO-IP

Yo mismo seguí el tutorial logrando configurar un dominio virtual, gracias al cual me permite seguir la emisión en directo desde Internet.

Os adjunto una imagen, a modo de ejemplo, de la configuración del programa VLC para grabar (o acceder a) vuestra emisión.

vlc_record

¡Y hasta aquí, todo por hoy amigos! Espero os haya gustado éste tutorial y si tenéis cualquier tipo de problemas, no dudéis en comentarlos aquí mismo, os intentaré ayudar en lo posible a solventarlos.

¡Un saludo y hasta la próxima!

@AlexCorvis84