Wireless Video de Raspberry Pi a PC

Vamos a documentar como hacer una transmisión de video con la Camara Raspberry Pi a un PC. Como objetivo adicional nos proponemos crear un dispositivo autónomo que transmita imágenes mediante wifi en vivo, similar a una cámara wireless de seguridad.

Veremos que la Raspberry Pi camera board es un modulo diseñado para ser integrado con facilidad en el Pi.

La cámara posee una relación calidad-precio notable:

    • Tamaño 25mm x 20mm x 9mm
    • Peso 3g
    • Bajo consumo
    • 5 Megapixels
    • 2592 x 1944 pixeles de imágenes estáticas
    • Soporta video 1080p30, 720p60 y 640x480p60/90
    • Cuesta menos de 25 Euros

Contamos con un Raspberry Pi B 512K de memoria, ya nos hemos aproximado varias veces a micro placas

https://unpocodejava.wordpress.com/2013/07/05/java-en-un-raspberry-pi-desde-cero-2/
https://unpocodejava.wordpress.com/?s=raspberry+pi

Y tenemos un avance de los esfuerzos por tener una distribución de Java en un Pi:

https://unpocodejava.wordpress.com/2012/05/30/java-corriendo-intentando-correr-sobre-raspberry-pi/
https://unpocodejava.wordpress.com/2012/08/14/corriendo-tomcat-7-en-un-raspberry-pi/

 

Instalación


La instalación es muy sencilla. La banda se inserta en el conector plano entre la Ethernet y el HDMI. Primero es necesario levantar una pestaña tirando hacia arriba:

Después se inserta la faja de la cámara, con la parte plateada orientada hacia el puerto HDMI

Cuando esté bien colocada, se baja de nuevo la pestaña y listo.

 

Configuración


Arrancamos el Pi y nos autenticamos. El nombre y password por defecto, como ya hemos visto en otros tutoriales es

usuario: pi
password: raspberry

Actualizamos el firmware y librerías del Pi a la última versión:
>sudo apt-get update
>sudo apt-get upgrade

Accedemos a la configuración del Pi con el comando
>sudo raspi-config

Navegamos al menú camera y seleccionamos enable

image014

image018

Seleccionamos Finish y reiniciamos

En el tutorial anterior java-en-un-raspberry-pi-desde-cero, podemos encontrar como instalar wifi y un servidor remoto vnc en el Pi. En http://www.raspipc.es podemos encontrar baterías recargables de 5v – 1mA y una toma usb, como esta:

Con esto y un poco de esparadrapo, quedamos totalmente wireless para mover la cámara en busca de la mejor toma.

 

Pruebas Locales


Procedemos testear que la instalación de la cámara funciona correctamente. El commando raspivid permite realizar capturas de video, mientras que raspistill captura imágenes fijas.

Escribamos en la consola el siguiente comando:
>raspistill -v -o test.jpg

Que muestra 5 segundos de vista previa por defecto y toma una foto, salvándola en el fichero test.jpg,

Hay que destacar que no es posible ver la vista previa desde el cliente remoto vnc.

-o ó –output el nombre del fichero y -t ó –timeout especifica los milisegundos de vista previa.
-d ó –demo ejecuta el modo demo que rota a través de varios efectos de imagen

Comandos de Ejemplo
Captura 5s de video en formato h264:
>raspivid -o video.h264

Capturar 10s de video:
>raspivid -o video.h264 -t 10000

Captura 10s de video en modo demo:
>raspivid -o video.h264 -t 10000 –d

Para más información acerca del uso de estos comandos, referirse a la bibliogrfia o a la ayuda de los propios comandos:
>raspivid | less
>raspistill | less

 

Desactivar Led de la Cámara

La cámara incluye un LED en la esquina que se enciende cuando la cámara esta activa.

Este led se puede desactivar editando el fichero
>sudo nano /boot/config.txt

y añadiendo la linea
>disable_camera_led=1

 

Streaming con VLC


VLC es una plataforma opersource que interpreta la mayoría de formatos multimedia. Para hacer streaminf vlc, necesitamos descargar en el PI el software

>sudo apt-get install vlc

Un método muy eficiente para hacer stream es el vía protocolo RTSP

>raspivid -o – -t 3600000 -w 800 -h 600 -fps 31 |cvlc -vvv stream:///dev/stdin –sout ‘#rtp{sdp=rtsp://:8554/}’ :demux=h264

El comando activa la cámara y el puerto 8554 es configurado como canal de stream, a la escucha de suscriptores.

Podemos jugar con los valores -w (ancho en pixels), -h (alto en pixels), -fps (fotogramas por segundo) para conseguir mayor velocidad de transmisión.

Para ver el stream debemos instalar el cliente VLC en un PC, descargable desde http://www.videolan.org/.

Para suscribirnos a la dirección de stream hay que abrir en el menú Abrir volcado de red…

La dirección:
>rtsp://<IPdeRaspberryPi>:8554/

por ejemplo, un PC en la red local podría tener esta IP

Pulsamos en reproducir y comenzaremos a ver el video en el reproductor.

Los pros de este método son

  • Facilidad de configuración
  • Conexión de múltiples clientes
  • Fácil acceso a traves de routers (se podria configurar streaming a mediante protocolo http de un modo similar).
  • La aplicación se integra en multiples plataformas, como lynux y android

Los contras.

  • Pese a haber probado múltiples configuraciones en cliente y en servidor, el protocolo rtsp tiene una latencia de hasta 10 segundos en la LAN. Esto provoca un desfase que hace imposible el uso en tiempo real de una conexión.

Este un problema conocido y el autor del post aun no ha encontrado una solución factible.

 

Streaming Punto a Punto con MPlayer


Al contrario que el protocolo anterior El stream punto a punto envía la señal del raspberry pi directamente a la IP del reproductor. Para ello necesitamos dos programas:

  • Netcat es una utilidad de red que redirige flujos de lectura/escritura utilizando tcp/udp.
  • MPlayer es un reproductor opensource que interpreta los formatos mas habituales.
  • Tomamos como ejemplo un PC con sistema Windows. Tenemos que instalar ambos programas, descargables desde

https://dl.dropboxusercontent.com/u/106074492/mplayer%20and%20netcat.zip

y los descomprimimos en un directorio de trabajo, por ejemplo d:/pro/netplayer

Para arrancar la escucha en el PC, ejecutar en el directorio de trabajo

>d:
>cd pro
>cd netplayer
>nc -l -p 5001 | mplayer -vo direct3d -fps 31 -cache 2048 -nosound -framedrop –

que genera un socket de escucha (-l) en el puerto 5001. De ahí, enruta (|) el stream de información al reproductor MPlayer con la siguiente configuración:

  • Interpreta 31 fotogramas por segundo
  • Con un cache de 2MB
  • Deshabilitamos el sonido (la cámara no tiene micrófono)
  • En caso de falta de información, tirar el fotograma
  • Es muy importante es seleccionar el driver de output de video. En las pruebas direct3d ofrece un rendimiento muy correcto.

El programa se queda a la escucha de un stream entrante.

En la parte del Pi necesitamos descargar el software:
>sudo apt-get install mplayer netcat

y activamos la cámara para enviar el stream de video con el comando
>raspivid -o – -vf -t 3600000 -w 800 -h 600 -fps 31 -n| nc <IPdePC> 5001

conocemos el comando raspivid; con el pipe mandamos la información al netcat, que manda el stream a la IP y puertos especificados.

En la parte del PC, se abre el reproductor mplayer:

Los Contras de este método son:

  • No es posible enviar más que a un solo destinatario
  • Configuración muy rígida, es necesario que el PI conozca la IP del destinatario
  • El mplayer no esta tan extendido en diferentes plataformas como el VLC

Los Pros:

Respuestas

  1. Peazo post Miguel!!!Buf!!!!quien yo me sé tiene que estar contenta 😀

  2. Avatar de Francisco Javier
    Francisco Javier

    hola buenas tardes, me gusto muchisimo su post pero me gustaria saber mas a fondo como hicieron el sistema autonomo de fotografias

  3. estoy haciéndome una aplicación que necesito recibir streaming. He probado el ejemplo que has puesto con netcat y mplayer pero no tengo ni idea de como meter el video en un jpanel de java.

    ¿me puedes decir como podría hacerlo?

    muchas gracias de antemano

Replica a Luis Miguel Gracia Luis Cancelar la respuesta