Jugando con Imagenio

El proceso fue sencillo y en pocos minutos tenía Imagenio funcionando sin problemas tanto en el decodificador como en los ordenadores mediante VLC. Y entonces observé algo que ya me esperaba: mientras algún dispositivo tenía algún canal puesto, la red Wi-Fi se venía abajo. ¿Por qué se producía esto? Porque Imagenio funciona en multicast, queriendo decir que envía su señal a todos los nodos de una red. En mi caso eso significaba que a todos los dispositivos que colgaban del switch principal le llegaban paquetes los pidieran o no, y esto incluía al punto de acceso. Para los equipos conectados por cable no suponía gran problema porque no afectaba al rendimiento, pero el caso del AP era más delicado.

AXN HD en VLC

Visualización de AXN HD con VLC

Como comentaba al principio, valoré las diversas soluciones a este problema y me decanté por la que me pareció menos chapuza, con el inconveniente de tener que hacer un pequeño gasto: comprar un nuevo switch. Pero no uno cualquiera, tenía que tener una función en concreto que evitaba la saturación del punto de acceso. Esta característica se llama IGMP snooping, y lamentablemente es difícil encontrarla en switches orientados al hogar o pequeña oficina. Explicándolo brevemente, lo que hace es enviar los paquetes multicast sólo a los nodos que lo soliciten, no “molestando” al resto y evitando así tráfico innecesario.

Gracias a otro hilo de la misma página, encontré un switch que era justo lo que buscaba, el Netgear GS108Ev2: ocho puertos gigabit con IGMP snooping y relativamente económico: 40 euros puesto en casa en Pixmania. A diferencia del que tenía, este modelo es semi-gestionable, una novedad para mí.

Netgear GS108ENetgear GS108EIGMP Snooping GS108E

Netgear GS108Ev2 y su utilidad de configuración

No me esperaba que me instalaran Imagenio tan rápido, así que compré el switch el mismo día que lo contraté, pensando que me llegaría con tiempo de sobra. No fue así, y mientras esperaba a que me llegara, tuve que emplear el Comtrend de Movistar como punto de acceso, dado que éste, al estar específicamente preparado para estos casos, no se veía afectado.

Cuando me llegó, sustituí el switch que tan buen servicio me había dado desde 2010 y puse el Netgear. Descargué la utilidad de configuración, vi que ya tenía la opción de IGMP snooping activada y, efectivamente, el problema más importante se solucionó. Que ahora las lucecitas del switch no se volvieran todas locas al encender el decodificador lo corroboraba.

Switch GS108E

Pero no me quedé ahí. Resulta que Imagenio se veía sin problemas en cualquier dispositivo conectado por cable, pero… ¿y por Wi-Fi? Inalámbricamente la cosa cambiaba, porque cuando un cliente Wi-Fi se ponía a ver Imagenio, en la práctica sucedía el mismo problema que antes, por mucho IGMP snooping que haya en el switch. Es decir, antes se bloqueaba porque le llegaban paquetes no deseados al solicitarlos otro equipo de la red, pero ahora era el propio punto de acceso el que los solicitaba. Por lo tanto, aun no funcionando tan mal como al principio, no iba del todo bien. Me negaba a creer que el Comtrend de Movistar fuera capaz de transmitir por Wi-Fi varios canales a la vez y mi Linksys E4200 se saturase simplemente por cambiar de canal, entre otros problemas.

Viendo la situación, decidí instalarle un firmware alternativo. Nunca he sido muy partidiario de hacer esto, pero tenía que intentarlo. Estaba entre dos muy conocidos, DD-WRT y Tomato RAF, pero al final me decidí por este último. Lo cierto es que andaba un poco preocupado por el proceso de actualización (es raro, pero con estas cosas siempre hay riesgo de dejarlo como un ladrillo si no sale bien), pero resultó que en el caso de Tomato RAF era tan sencillo como si de una actualización de firmware de la propia Linksys se tratase. Respiré tranquilo al ver que todo había ido como la seda y me puse a trastear con la configuración de la red inalámbrica.

Tomato RAF

Tomato RAF instalado en el Linksys E4200

Con este firmware había muchas, muchas más opciones que con el original, pero una de ellas era la que más me interesaba: Wireless Multicast Forwarding. A día de hoy todavía no tengo claro qué es exactamente lo que hace, pero es activar esa opción y bingo, Imagenio por Wi-Fi funcionando a la perfección, incluso varios canales HD simultáneamente. Eso sí, luego de cantar victoria tuve que modificar algunas otras opciones para recuperar el rendimiento que me daba por defecto el firmware original.

FOX HD en VLC para iPhone

VLC para iPhone reproduciendo FOX HD. Soporta la selección de idiomas y de subtítulos.

Para rematar la jugada, como VLC para iOS todavía no soporta listas de reproducción, creé una pequeña web con enlaces a todos los canales disponibles, pero con la particularidad de que, al pulsarlos, automáticamente se abriera VLC con la URL ya cargada. Esto lo conseguí simplemente usando la URL scheme apropiada (vlc://).

Canales Movistar mini

Página web con enlaces a todos los canales. Verás que también aparece AXN White, que se supone no está incluido en el paquete pero se puede ver con VLC.

Actualización 17/03/14: Debido a que ya varias personas me la han solicitado, ahora puedes descargarte la mini web desde este enlace.

148 comentarios / Añade el tuyo debajo

  1. Buenas de nuevo.

    Finalmente me he dado (casi) por vencido en cuanto a tener ffmpeg funcionando en mi NAS. Ahora se está recompilando otra vez (y van…) pero no tengo muchas esperanzas de que funcione.

    Afortunadamente tengo siempre un Mac Mini encendido y en él instalar ffmpeg y ponerlo en marcha ha sido mucho más sencillo.

    Ya está escupiendo alegremente un fichero stream.m3u8 que se actualiza periódicamente y una serie de ficheros cortitos output_xxx.ts

    Ahora la pregunta es… ¿qué usas para reproducirlos cuando estás por la calle? ¿Los compartes en un servidor web? ¿Qué software usas para reproducirlo?

    En principio no debería ser demasiado problemático olvidarme de los segmentos, crear un solo output.ts y publicarlo en alguna URL, pero el VLC sólo reproduce el tramo que estaba creado cuando empieza a reproducirlo, no se da cuenta de que ha aumentado de tamaño.

    Supongo que por eso empleas los segmentos, pero no tengo muy claro cómo hacer eso accesible desde fuera de mi red.

    Muchas gracias de nuevo por todo.

    1. Hola Carlos,

      Junto a esos segmentos deberías también tener un archivo .m3u8, que genera una lista de reproducción automática de los segmentos y es el único archivo que debes reproducir. Para ello, como bien intuyes, los comparto en un servidor web y abro el archivo .m3u8 con Safari en el iPhone. Éste se encarga de reproducir los segmentos, uniéndolos internamente al vuelo y creando así la reproducción en vivo. Si el iPhone lo tienes enlazado al Bluetooth del coche, ya tienes el sistema al completo ;)

      Un saludo!

  2. De nuevo muchísimas gracias.

    Al final lo dejé funcionando con un servidor web sencillito en el Mac Mini

    nohup python -m SimpleHTTPServer 8000 &

    Y la instrucción que pusiste en uno de los primeros comentarios para el ffmpeg (la última tenía como salida también video, la original sólo tenía el audio).

    ffmpeg -i rtp://@IP:puerto -vn -sn -map 0:a:0 -c:a aac -ac 1 -b:a 32k -ar 22050 -f segment -segment_list stream.m3u8 -segment_time 10 -segment_list_size 30 output_%03d.ts

    El puerto 8000 en el router (NAT, port forwarding o como se quiera llamar) queda apuntando a la IP del Mac Mini y ya puedo escuchar la tele con http://IP_EXTERNA:8000/stream.m3u8

    Lo pongo tan desglosado por si entra alguien buscándolo, es evidente que tú sabes todo eso.

    Ahora la cosa es que igual que sólo controlo lo básico de Linux, me ocurre lo mismo con OS X. Ahora mismo cada vez que lo quiero usar tengo que hacer ssh al Mac Mini y poner la cosa en marcha. Tendré que buscar la forma de automatizarlo.

    Un saludo.

  3. Como curiosidad, anoche me puse otro rato y ya tengo todo tal y como quería. Este post ha sido una inspiración :)

    Al final tengo varios scripts.

    —- inicio_stream —-
    #!/bin/bash
    /Users/carlos/a/fin_stream
    nohup /bin/ffmpeg -nostdin -i $1 -vn -sn -map 0:a:0 -c:a aac -ac 1 -b:a 32k -ar 22050 -f segment -segment_list /Users/carlos/audioimagenio/stream.m3u8 -segment_time 10 -segment_list_size 30 /Users/carlos/audioimagenio/output_%03d.ts >> /Users/carlos/a/log.txt 2>&1 &
    echo $! > /Users/carlos/audioimagenio/save_pid.txt
    ——————————–

    Este script ejecuta ffmpeg dejándolo en segundo plano con la dirección rtp que se le pasa como parámetro ($1) y guarda en save_pid.txt el PID del proceso. Primero llama a otro script que limpia los posibles ficheros que haya por ahí y mata el anterior proceso ffmpeg si existe.

    —- fin_stream —-
    #!/bin/bash
    rm /Users/carlos/a/log.txt > /dev/null
    kill -9 `cat /Users/carlos/audioimagenio/save_pid.txt` > /dev/null
    rm /Users/carlos/audioimagenio/* > /dev/null
    ———————————

    —- la1 ———–
    /Users/carlos/a/inicio_stream rtp://@239.0.0.76:8208
    ———————

    Como servidor web estoy usando uno gratuito llamado Abyss Web Server.

    Y ahora lo mejor… tanto en Android como en iOS hay programitas que permiten ejecutar un script en un servidor ssh remoto dándole simplemente a un botón.

    En Android estoy usando SSH button y en iOS SimpleSSH.

    Así que una vez configurado todo, si quiero escuchar Teledeporte por la calle:

    1. Abro SSH button en Android.
    2. Le doy al botón de Teledeporte (que ejecuta el script ssh correspondiente en el Mac Mini)
    3. Abro VLC y elijo el stream.

    Cuando acabo vuelvo a abrir SSH button y le doy al botón de Finalizar stream.

    1. Muchas gracias Carlos por compartir tus scripts; no conocía los programas que lanzan comandos por SSH automáticamente y es algo que puede ser muy útil!

      Un saludo, y ahora a disfrutar de tu sistema :)

  4. Me alegro de haber sido de ayuda.

    Un par de cositas más que añadí luego.

    1. Me dejé andando uno de los scripts sin acordarme de pararlo durante 3 días y luego había tantos ficheros creados que el rm * se quejaba de que había demasiados argumentos. Para solucionarlo añadí el parámetro -segment_wrap 10 para que cuando llegue al segmento 100 vuelva empezar desde el primero.

    2. Añadí un parámetro adicional a los scripts para poder usar varios directorios. La idea era que mi mujer pudiese estar escuchando un canal y yo otro (cosa que nunca pasará, pero ya puestos…). Me encontré con el problema de que dos instancias de ffmpeg no pueden estar escuchando un stream rtp por el mismo puerto simultáneamente. Para solucionarlo sólo modifiqué los scripts que lanzan los canales para que usen el stream http que es la salida del udpxy, y no el rtp que nos llega desde Movistar.

    Saludos y hasta pronto.

  5. Muchas gracias por tu tutorial,

    A ver si me puedes ayudar.

    Estoy intentando conectar la raspberry al router Movistar+ modelo VG-8050 para convertir multicast a unicast mediante udpxy y no lo consigo.
    Estoy convencido que es alguna configuración del router y me da a mí que es problema de la configuración de IGMP, te paso una captura: http://a/imgur.com/8pY8n

    Mi configuración de IPTV de Imagenio es:
    Imagenio nueva versión (Comtrend VG-8050)
    IPTV Address 10.248.88.24
    IPTV Netmask 255.128.0.0
    IPTV Gateway 10.128.0.1

    Estoy intentando conectarme con un portátil a udpxy sin éxito a través del siguiente enlace (como ejemplo el canal Movistar+ a la IP 192.168.1.11 de la raspberryy al puerto 4022 de udpxy):
    http://192.168.1.11:4022/udp/239.0.5.185:8208
    En cambio mediante multicast sí lo consigo

    Mirando por la configuración del router hay varias cosas relacionadas que me surgen duda de la configuración adecuada:
    – “IGMP Snooping” lo tengo habilitado en las dos interfaces (eth0.2 y eth0.3) en WAN Service y luego también en LAN.
    – “Disable WMM Advertise” lo tengo sin chequear, es decir, activado.
    – “IGMP version” lo tengo por defecto en 2 (y me suena que es posible que tenga que ponerse en 3, al menos así es en OpenWRT).
    – “Enable Wireless Multicast Forwarding” lo tengo deshabilitado ya que no quiero que vaya por wifi, solo por ethernet que es a lo que conecto la raspberry pi.

    A ver si me puedes ayudar, muchas gracias por adelantado!!!

    1. Hola Magarto,

      Disculpa la demora en responderte. He visto que has pedido ayuda también en ADSL Zone; ¿has probado a cambiar el puerto de la URL que quieres reproducir por donde está escuchando tu servidor udpxy? Lo arrancas con el 4024 pero le estás solicitando la reproducción por el 4022.

      Mira a ver si es eso, un saludo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados con *