Ay, el Raspberry Pi, lo que mola.

En el GUM Málaga hacemos talleres públicos. Una de las cosas que tenemos claras desde que empezamos a mover el GUM de nuevo fue que los talleres deberían quedar guardados para la posteridad. Eso es contenido que generamos y que podemos ofrecer, así tenemos un propósito y somos de utilidad venga gente o no a los talleres en sí.

Evidentemente, eso plantea una cuestión, que es cómo grabar los talleres. Leyendo documentación por ahí y trasteando un poco con Open Broadcaster Software, se me ocurrió una idea que tenía que probar: usar varios Raspberry Pi con sus respectivos módulos de cámara, hacer que emitan un flujo en vivo de la cámara por HTTP y usar esos flujos de las distintas cámaras desde OBS. Y la verdad es que funciona y el resultado es bastante aceptable para ser un sistema multicámara con un coste tan bajo. Podéis ver el resultado en el canal de YouTube del GUM Málaga, pero aquí va un vídeo de muestra:

Empezando por lo básico

Como he dicho antes, la idea es sencilla: tener dos o más Raspberry Pi cada uno con su módulo de cámara, a los cuales me referiré en adelante como las cámaras, y dejarlos configurados de forma que su único fin sea arrancar e inmediatamente emitir por HTTP lo que se capture de la cámara. Luego desde el equipo que haga las veces de controlador de realización, en el que se ejecutará OBS y desde el que se emitirá el vídeo ya mezclado, se utilizan los flujos de vídeo provenientes de los distintos Raspberry Pi en la mezcla.

Mi implementación actual

Tal y como lo tengo montado ahora, utilizo dos Raspberry Pi 2 con sendos módulos de cámara. El equipo que utilizo para mezclar y emitir es mi siempre confiable MacBook de aluminio de finales de 2008, y la conexión entre las cámaras y el portátil la hago mediante cable Ethernet conectado a un mini-switch que alimento por USB. Las cámaras usan Raspbian como sistema operativo y la captura y emisión desde los módulos de cámara se hace usando el software UV4L. La mezcla, como digo más arriba, se hace usando el programa Open Broadcasting Software y éste es el que se encarga de emitir en directo hacia YouTube o guardar el vídeo en un fichero del disco duro. Simple.

Problemas encontrados y soluciones

La carcasa

Lo primero que se necesita es una carcasa en la que tener el Raspberry Pi junto con el módulo de cámara. Cuando compré el primer Raspberry Pi 2, antes de que se me ocurriera el invento este, le compré esta carcasa:

Carcasa para placa de desarrollo RS Pro Raspberry Pi 2 B, Raspberry Pi 3 B, Raspberry Pi B+ ASM-1900036-01
Carcasa para placa de desarrollo RS Pro Raspberry Pi 2 B, Raspberry Pi 3 B, Raspberry Pi B+ ASM-1900036-01

En la descripción del artículo dice que dispone de dos puntos de anclaje para el accesorio de cámara oficial. Uno de ellos salta a la vista: si retiras la tapa superior, hay una ranura en la que se puede insertar la placa de la cámara de forma que el Raspberry Pi queda tumbado y la cámara sobresale en vertical. No era lo que yo esperaba, y además el cable plano de la cámara hace que quede mal sujeta en ese punto, con lo cual no es una buena solución.

El segundo punto de anclaje es menos evidente, pero cuando encontré dónde está gracias a lo que fui viendo en Google me di cuenta de que esa carcasa, aunque originalmente la compré por comprar una cualquiera, era perfecta para esto. El segundo punto de anclaje se encuentra en la propia tapa superior: justo donde están los orificios que forman el logo de la frambuesa hay cuatro salientes en los que se puede encajar la placa de la cámara, e incluso el objetivo encaja perfectamente con uno de los orificios del logotipo de forma que no obstruye la visión. Es simplemente perfecto.

El único inconveniente que encontré en ese punto fue que el cable plano que viene con la cámara tiene dos problemas:

  1. Es demasiado largo.
  2. Hay que retorcerlo para poder poner la cámara en el anclaje de la tapa.

Afortunadamente, con un poco de cuidado y dándole algunas vueltas a la cámara de forma que el cable quede recogido pero sin dobleces que puedan hacerlo partirse, finalmente pude colocarlo de forma que podía cerrar la tapa con la cámara puesta y sin riesgo de romper el cable. Aquí surgió otro pequeño problema, y es que al tener el cable recogido en el espacio justo debajo de la tapa, éste tiende a empujar la tapa hacia fuera, e irremediablemente ésta se sale con facilidad. Esto también se puede arreglar de forma sencilla, ya sea poniéndole una gomilla a la carcasa para sujetar la tapa o bien pegándole un par de tiras de cinta adhesiva por los lados, que queda más limpio aún.

El soporte

Ahora que tenemos un Raspberry Pi con su cámara y en una carcasa compacta, necesitamos un soporte donde colocarlo. La solución más sencilla es un trípode barato universal para móviles, de estos que tiene como un enganche extensible parecido al de los palos de selfie:

3in1 universal Tripe Mini Tripod for Camera Mobile Phone + Stand Holder+Tripe Mount Adapter for Gopro Camera HD SJ4000
3in1 universal Tripe Mini Tripod for Camera Mobile Phone + Stand Holder+Tripe Mount Adapter for Gopro Camera HD SJ4000

La carcasa encaja perfectamente en el enganche universal para teléfono móvil.

El cable Ethernet

Esto es de esas cosas que no piensas hasta que le conectas por primera vez un latiguillo normal y el latiguillo pesa más que el Raspberry Pi, la carcasa y el trípode juntos. Una posible solución puede ser utilizar latiguillos especiales más finos y ligeros:

cablecreation 2-Pack Ultra Slim RJ45 CAT6 a Ethernet Patch Cable, 50u
cablecreation 2-Pack Ultra Slim RJ45 CAT6 a Ethernet Patch Cable, 50u
El switch

Dado que tengo que conectar varias cámaras al único puerto Ethernet de que dispone mi portátil, necesito forzosamente un switch para conectarlas todas. Ya que estamos, lo suyo es que sea chiquitito y que se pueda alimentar por USB para ahorrarnos un enchufe. Por ejemplo, este:

DIEWU 10/100Mbps 5 Ports RJ45 Mini Network Switch HUB - White
DIEWU 10/100Mbps 5 Ports RJ45 Mini Network Switch HUB - White

Es necesario advertir de que el switch no trae el cable USB, por lo que hay que buscárselo por otro lado. En Amazon tienen:

StarTech USB2TYPEM - Cable de alimentación por USB 91 cm, 5.5 mm, Tipo Barril
StarTech USB2TYPEM - Cable de alimentación por USB 91 cm, 5.5 mm, Tipo Barril

Configuraciones varias

La red

Para hacerlo lo más Plug'n'Play posible, los Raspberry Pi tienen una IP estática. El portátil no importa la IP que tenga siempre y cuando esté en la misma subred que las cámaras, pero si los Raspberry Pi tienen siempre la misma IP entonces no hay que reconfigurar las fuentes de vídeo cada vez que se enciendan, y la red también se inicializa más rápido. Así que, por ejemplo, mi cámara 1 tiene la IP 192.168.2.11, la cámara 2 es 192.168.2.12 y así sucesivamente si tuviera más. Pegándole una etiqueta a la carcasa con la IP que tiene asignada la cámara, siempre tienes la dirección a mano.

El flujo en vivo de la cámara

Para reemitir la cámara del Raspberry Pi, basta con instalar los paquetes uv4l y uv4l-raspicam desde el repositorio del proyecto. En el sitio web oficial hay una página de instrucciones de instalación para Raspbian.

Luego hay algunas opciones que se pueden ajustar para reducir la carga y el ancho de banda necesario. En mi caso reduje la resolución de captura y aumenté el tamaño del búfer, por poner un ejemplo. Los valores correctos dependerán de la calidad que se quiera.

El mezclador

Para insertar la imagen de la cámara en OBS, basta con añadir una fuente de tipo Fuente multimedia en OBS y suministrarle la URL del flujo MJPEG proporcionado por UV4L. Por tanto basta con establecer las siguientes opciones:

  • Entrada: http://192.168.2.11:8080/stream/video.mjpeg
  • Formato de entrada: mjpeg

Al principio intenté usar H.264, pero era muchísimo más lento y tenía más retardo que el flujo MJPEG, por lo que acabé usando este último, que funciona perfectamente.

Hacks y mejoras

Usar un Raspberry Pi 3 en lugar del 2

El Raspberry Pi 3 lleva adaptador Wi-Fi incorporado, por lo que podría evitar el cableado y sólo sería necesario crear una red ad-hoc en el equipo del mezclador. Por otro lado, quizá sería más sensible a ruidos y menos estable.

Nivel de burbuja

Recientemente se me ocurrió la idea de intentar incorporar un nivel de burbuja a las cámaras para mantenerlas niveladas. Busqué en Amazon a ver si había algún nivel de burbuja pequeñito y encontré esto:

Handsome 2pcs cámara linterna caliente zapata Tapa para zapata con nivel de burbuja
Handsome 2pcs cámara linterna caliente zapata Tapa para zapata con nivel de burbuja

Son piezas pequeñas y, aunque están pensadas para ser colocadas en la zapata del flash de cualquier cámara normal, se pueden pegar a la carcasa del Raspberry Pi con un trocito de cinta adhesiva de doble cara o con un pegote de adhesivo termofusible. Además es un pack de 2, que es perfecto para las dos cámaras que tengo.

Sujeciones con imanes de neodimio

Esto es algo que aún tengo que pensar bien, pero creo que es posible pegar imanes de neodimio de pequeño tamaño a los extremos de las patas de los trípodes y usar imanes algo más grandes para ponerlos en la otra cara de las superficies donde se coloquen dichos trípodes, de forma que se mantengan más estables en su sitio. Usando imanes de neodimio se puede también idear todo tipo de sujeciones más flexibles, e incluso se podrían poner varios imanes en puntos estratégicos del interior de la carcasa del Raspberry Pi y así poder pegarlo a columnas metálicas, marcos metálicos de ventanas y otras superficies.

Siguiente Entrada Entrada Anterior