martes, 8 de enero de 2013

Streaming de video desde RaspberryPi (parte 2)

siguen las pruebas

Hola de nuevo, sigo con las pruebas de streaming de vídeo desde RaspberryPi. Si haces una búsqueda en Google, verás que hay cientos de webs, foros y blogs sobre este tema "how to streaming webcam from RaspberryPi". Tras leer unos cuantos ... la verdad es que no me queda nada claro. Funcionar, funcionan todos pero ... ¿cual es la mejor opción? A continuación mis pruebas con FFSERVER/FFMPEG

En este post, comentaba lo fácil y los "aceptables" resultados de mjpg-streamer. Ahora voy a probar FFserver, es algo más complejo y necesita más tiempo. Se compone de dos partes:

  1. FFserver, que es el servidor streaming en si mismo, es donde configuraremos usuarios y claves, puertos, ips permitidas ...
  2. FFmpeg, que lo hemos usado en otras ocasiones, y ahora su función es capturar las imágenes y ajustarles el formato y demás parámetros.
Para asegurarnos de que tenemos la última versión, vamos a hacer una compilación, voy a seguir las instrucciones de esta web:

  1. Añadimos a /etc/apt/sources.list: 
    1. deb-src http://www.deb-multimedia.org sid main
    2. deb http://www.deb-multimedia.org wheezy main non-free
  2. Recargamos: apt-get update
  3. Instalamos: apt-get install deb-multimedia-keyring
  4. De nuevo en el archivo sources.list eliminamos la línea:
    1. deb http://www.deb-multimedia.org wheezy main non-fre
  5. Cambiamos de directorio: cd /usr/src/
  6. Bajamos las fuentes con: apt-get source ffmpeg-dmo
  7. cd ffmeg-dmo-1.0.1 (ojo!)
  8. ./configure && make && make install
al ejecutar "make" se ha quedado compilando durante tres horas, así que paciencia. Editamos/creamos el archivo /etc/ffserver.conf
Port 88
BindAddress 0.0.0.0
MaxClients 1
MaxBandwidth 5000
NoDaemon
<Feed webcam.ffm>
file /tmp/webcam.ffm
FileMaxSize 10M
</Feed>

<Stream webcam.mjpeg>
Feed webcam.ffm
Format mjpeg
VideoSize 640x480
VideoFrameRate 5
VideoBitRate 1000
VideoQMin 1
VideoQMax 10
</Stream>

y ahora lanzamos ffserver:
ffserver -f /etc/ffserver.conf
si no devuelve ningún fallo, es que esta perfecto, como debe ser. Ahora conectamos la webcam, nos aseguramos que el sistema la reconoce (mira aquí) y empezamos a capturar con:
ffmpeg -v verbose -r 5 -s 640x480 -f v4l2 -an -i /dev/video0 http://localhost:88/webcam.ffm
lo primero que quiero ver, es la carga del micro, con un top:

bueno, sigue cargando la CPU, pero en este caso ronda el 50%, lo marcaremos como "aceptable". Ahora veamos la calidad.
Primero vamos a usar VLC, pulsamos "ctrl+n" y le indicamos:
http://ip_del_raspberry:88/webcam.mjpeg
Y aquí tenemos dos problemas, la calidad y el retraso. La calidad cae bastante y el retraso ronda los 5 segundos, así que no me sirve. Pero os dejo este post, porque seguro que a alguien le viene muy bien, ya que como comento, la carga del micro ronda el 50%.

4 comentarios:

  1. Muy buenos manuales, muchas gracias!
    Una propuesta, te has planteado la compilación cruzada (cross-compiling, generar en otro equipo los binarios) para raspberry pi?
    He visto manuales para hacerlo para esta plataforma desde diferentes linux (e incluso windows), seguro que se reducirían esas tres horas a una fracción...
    Y una comparativa de tiempos de compilación sería muy de tu estilo! :)

    ResponderEliminar
    Respuestas
    1. Hola, lo e intentado varias veces pero siempre me acaba fallando algo. Tambien es cierto que lo he intentado con programas que tienen muchas dependencias y bastante complejos. A ver si me pongo y me curro un manual en condiciones.

      Eliminar
    2. o como opción alternativa, utilizar qemu(hay otros emuladores más eficientes?) en un pc. Es bastante fácil utilizarlo cargando la .img de la última versión de wheezy(2012-12-16), aunque al ser un emulador su rendimiento no es tan fluido como un pc puro...
      bueno, lo dejo que te distraigo de tus objetivos... :)

      Eliminar
  2. Buenas! ¿Has probado Motion? Te copio un tuto donde también comenta varias opciones:

    http://www.slblabs.com/2012/09/26/rpi-webcam-stream/

    Un abrazo

    ResponderEliminar