jueves, 12 de junio de 2014

Cómo compartir la TDA por la red local usando Ubuntu

Usaremos la aplicación MuMuDVB  (Multi Multicast DVB) para hacer el streaming sobre la red. Es una aplicación de consola, que puede quedar corriendo como un servicio o demonio. Queremos hacer multicast por UDP en la red local, para usar el mínimo de recursos, y que puede soportar cualquier cantidad de clientes recibiendo el streaming.
Otra alternativa sería hacer unicast por HTTP, pero no lo veremos aquí.

1) bajar MuMuDVB

En Ubuntu 12.04 está la versión 1.6.x de MuMuDVB. Para esta guía, se usó la versión 1.7.2 (enlace directo), descargada directamente de su sitio oficial:  http://www.mumudvb.net/node/25

Para descomprimir el archivo, compilar e instalar el programa, seguimos estos comandos:
unzip MuMuDVB-1.7.2.zip
cd MuMuDVB-1.7.2
./configure make
sudo make install

Nota: puede ser necesario instalar antes las herramientas de compilación, si no se instalaron anteriormente:
sudo apt-get install build-essential

2) crear el archivo de configuración mumudvb.conf

freq=527
bandwidth=6MHz
autoconfiguration=full
El dato freq es muy importante. Indica en qué frecuencia de canales se va a sintonizar el receptor de TDA.
El bandwidth es el ancho de banda, que para Argentina es siempre 6 Mhz.
El parámetro autoconfiguration=full hace una configuración automática, agregando todos los canales que se encuentren disponibles en esa frecuencia.

3) configurar la direccion de multicast en la placa de red:

sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
Para habilitar el broadcast de paquetes UDP sobre la LAN conectada a dicha interfaz de red ethernet, en este caso la eth0.

4) arrancar el servidor MumuDVB:

mumudvb -d -c mumudvb.conf
Para ver información más detalla, se puede agregar el parámetro -v, por ejemplo:
mumudvb -v -d -c mumudvb.conf
El parámetro -d indica que no quede corriendo como servicio (don't demonize).
El parámetro -s muestra la fuerza de la señal, que puede ser muy útil.
El parámetro -h muestra una pequeña ayuda con información sobre otros parámetros.

5) Para reproducir el streaming desde las otras PCs:

Las otras PCs pueden tener Linux, Windows, o cualquier sistema operativo. El reproductor de video recomendado es VLC (VideoLan Client) (descargar aquí). Es recomendable usar la versión 2.0 en adelante.
Se debe una URL de la forma:
udp://@239.100.0.X:1234
donde 239.100.0.x es la IP de brodcast que informó MuMuDVB más arriba. En la configuración automática de MuMuDVB, el último número de la IP arranca en 0 (cero) para el primer canal, y continúa con 1, 2, ..., correspondientes a los siguientes canales, con tantos canales como se hayan detectado y configurado.

Ejemplos de cómo iniciar VLC o Mplayer (otro reproductor) desde la línea de comandos:
vlc udp://@239.100.0.0:1234
vlc udp://@239.100.0.1:1234 
mplayer udp://@239.100.0.0:1234

Notas:

Cada canal tendrá una IP distinta. Con un solo receptor, solo se podrán ver los canales que compartan la misma frecuencia, normalmente entre 2 y 4 canales. Para poder sintonizar más frecuencias, se necesitan más adaptadores USB, cada uno sintonizado en diferentes partes del espectro, y cada uno haciendo broadcast con IPs distintas.

Con la configuración automática de MuMuDVB, se agregan todos los canales de la frecuencia. Si solo queremos un canal, podemos hacer una configuración manual. Un ejemplo de configuración manual con 2 canales:
freq=527
bandwidth=6MHz

ip=239.100.0.0
port=1234
name=TV Publica HD
pids=258 289 290 291 288

ip=239.100.0.1
port=1234
name=TV Publica SD
pids=259 305 306 307 304

Y otro ejemplo de configuración manual con un solo canal:
freq=533
bandwidth=6MHz

ip=239.100.0.1
port=1234
name=DeporTV
pids=257 272 273 769
El número de frecuencia (freq) corresponde a los 3 primeros dígitos del archivo canales_tda.conf que usa VLC, que creamos en el artículo anterior.
Obtener los números de PIDs (Program IDs) puede ser algo complicado. La forma más fácil y directa es arrancar MuMuDVB en autoconfiguration=full, en la frecuencia deseada (freq), agregando el parámetro -v para obtener los PIDs de los canales deseados. Después copiamos esos PIDs y así podemos configurar a mano solo los canales deseados.
Pueden crearse varios archivos de configuración, uno por cada frecuencia y canales que se deseen transmitir, y luego reiniciar MuMuDVB con el archivo de configuración deseado en cada momento.


Alternativas:

Como alternativa a MuMuDVB, tenemos al fantástico TvHeadend. Se configura y se administra totalmente por web, y puede integrarse con XBMC (un completísimo centro multimedia) mediante un plugin. TvHeadend tiene muchas funcionalidades adicionales, como la posibilidad de cambiar de canales vía web, funciones de DVR para programar la grabación automática de nuestras series o programas favoritos, ver la guía de programación que emiten algunos canales, etc. Pero quedará para otro artículo, porque es muy extenso en si mismo :)

Fuentes:
Toda la documentación provista por estos programas y sus sitios web.
http://gcp.fcaglp.unlp.edu.ar/_media/integrantes:psantamaria:tdt:charla-jrsl2011.pdf

Actualización 19/06/14:

En el sitio de Fabio, hicieron una buena nota explicando otra alternativa para emitir TDA por streaming en LAN, pero usando solo VLC. Ambas opciones tienen sus ventajas y desventajas. Si conocen más alternativas, no dejen de comentarlo :)

Ver TDA (Televisión Digital Abierta) en Ubuntu

Para ver TDA (Televisión Digital Abierta) con un adaptador USB en Linux, se necesita alguno que tenga un chipset compatible. Algunos adaptadores tienen chipsets que solo funcionan en Windows, así que hay que elegir con cuidado al momento de comprar. Los dos modelos más conocidos y que funcionan perfecto son:
  • PixelView PlayTV FullSeg SBTV
  • Mygica S870  

El PixelView es muy difícil de conseguir y no lo vi más en el mercado. El Mygica s870 se consigue fácilmente, pero hay que tener cuidado que sea el modelo s870 y no otro, porque los demás modelos de Mygica NO funcionan

1) Actualizar kernel de Ubuntu 12.04 a 3.5.x o posterior

Ante todo, con Ubuntu 12.04 hay que actualizar al kernel 3.5 o posterior. Originalmente venía con el kernel 3.2.x, pero no funciona correctamente el driver en esa versión. Recomiendo actualizar el kernel a 3.11.x (Saucy). Seguir las instrucciones indicadas en LTSEnablementStack Para instalar el kernel de Saucy y actualizar el servidor X a la vez, habría que correr este comando en una terminal:
sudo apt-get install --install-recommends linux-generic-lts-saucy xserver-xorg-lts-saucy libgl1-mesa-glx-lts-saucy
Si solo se quiere actualizar el kernel, el comando sería:
sudo apt-get install --install-recommends linux-generic-lts-saucy
Con Ubuntu 14.04 o posterior, no hay que cambiar ni actualizar nada.

2) Instalar el firmware del chipset

Para instalar el firmware que requiere el dispositivo, lo más simple es al menú "Configuración del sistema...", y abrir la ventana "Controladores adicionales". Luego de buscar controladores, aparecerá la opción para habilitar el "Firmware para tarjetas DVB". Seleccionarlo y hacer clic en el botón "Habilitar". El estado debería cambiar del color gris al verde.

3) Conseguir el archivo de frecuencias y generar la lista de canales para VLC

Hay que bajarse el archivo de frecuencias (descargar aquí). Luego se corre el programa scan para generar la lista de canales que hay disponibles en la zona. Esto debemos hacerlo cada vez que cambia la grilla de canales. Correr este comando en la terminal:
scan frec_canales.conf > canales_tda.conf 
Si el programa 'scan' no está instalado, se instala con el siguiente comando:
sudo apt-get install dvb-apps

4) Ver la TDA con VLC

Para ver la TDA, solamente hay que abrir la lista de canales con VLC 2.0.x o posterior, y elegir cualquier canal. Generalmente el canal de la TV Pública SD o Encuentro tienen las señales más fuertes, y son los mejores para empezar a probar. Si la señal es pobre, reorientar la antena o cambiarla de lugar, o cambiar de antena, hasta tener una buena señal. Para abrir VLC con la lista de canales desde, se puede escribir en la linea de comandos de la terminal:
vlc canales_tda.conf
Para la zona de La Plata, Buenos Aires, el archivo de canales puede ser así: (descargar aquí)

5) Antenas

La antena que viene con el adaptador, puede servir si hay muy buena señal. Si es de las que tienen una base magnética, como la que se muestra en los kits de arriba, es muy importante que se apoye sobre una superficie de metal, como el lateral del gabinete, o en el marco de una puerta o ventana metálica. Al apoyarse sobre una superficie tal, se completa el dipolo.

Si se necesita una mejor antena, hay muchas variedades de antenas comerciales en el mercado:

 
Pero para abaratar costos o como solución inmediata, se puede hacer rápidamente una antena muy económica y efectiva usando un fragmento de cable coaxil (el mismo de la TV por Cable), pelando el extremo como se ve en las imágenes siguientes:  


Más información: ¿Cómo puedo ver TV Digital con el sintonizador Geniatech MyGica S870 en Ubuntu 12.04LTS?

Actualización 16/06/2014:
Hay una interesante aplicación en Android para facilitarnos orientar mejor nuestra antena de TDA. Usando el GPS del celular o la tableta, nos indica dónde se encuentra la antena más cercana, a qué distancia, y en qué dirección. Es un dato muy útil cuando no estamos seguros hacia dónde debemos orientar nuestra antena. La aplicación se llama Antenas TDA y la pueden instalar directamente desde tienda de aplicaciones Play Store de Google. Es una aplicación libre, bajo licencia GNU GPL v3, así que pueden colaborar con su desarrollo y reportar cualquier bug en el sitio del proyecto en GitHub. A continuación, un par de capturas de pantallas de esta aplicación:
Gracias a Emiliano Vazquez por recordarme esta buena utilidad.