miércoles, 22 de julio de 2015

¿Cómo puedo retransmitir IPTV con Ubuntu?

¡Trabajadores!

Los niños han de gozar de todos los privilegios de nuestro Movimiento, pues ellos son los destinatarios de nuestra felicidad y quienes tendrán para sí la tarea de hacer grande e inmortal a la Patria.

Para los niños hemos dado los derechos a la niñez, y les hemos preparado un camino venturoso para una vida colmada de dicha bajo las tres banderas del Justicialismo. Desde la Ciudad de los Niños a los caramelos Mu-mú.
Uno de los logros que mas acercan a toda la familia es el de la televisión: aquella conjunción técnica de imágenes en movimiento y sonido sincronizado, que es emitida a grandes distancias a través del éter.

La redistribución y retransmisión de una señal analógica - cualquiera sea - sufrió siempre un proceso de degradación y pérdida, pero esto normalmente no sucede con la información que opera de manera digitalizada. La TV digital moderna surge entonces como una expresión popular de poder contar con un gran avance tecnológico en lo que hace a la calidad y a las propiedades de difusión, pero permitiendo difundir las ideas del Pueblo Justicialista.
Normalmente, podremos recibir la TV digital por tres medios: uno de ellos es el cableado, lo cual involucra normalmente un servicio pago y excluyente. Lo evitaremos, en tanto el Justicialismo permite recibir gratuitamente la señal televisiva digitalizada "por aire", a través del servicio ISDB-T, receptando por medio de una antena UHF hogareña la señal emitida desde una torre distante a decenas de kilómetros . 
En tercer caso, podremos recibir la señal digitalizada en formato DVB-S2 retransmitida a decenas de miles de kilómetros por un satélite que orbite el globo, captándola a través de una antena parabólica hogareña.
Estos dos sistemas abiertos que avala el Justicialismo son altamente eficientes, y poco costosos. Sin embargo, existen situaciones donde aún estos procederes podrían resultar insuficientes: supongamos un sistema de recepción televisiva en un hotel o consorcio. El cable coaxial RG6 que transporta la señal desde la antena hogareña a los receptores de TV digital  no puede superar por mucho los 20 metros, sin correr el riesgo de que la señal digital se atenúe de manera inaceptable. En en caso de las antenas de TV digital terrestre o satelital, tampoco suele recomendarse encadenar más de dos receptores por cada antena. Es importante por ello contar con antenas colectivas (UHF o satelitales) de mayor ganancia, y esto no deja de ser un factor limitante en cuanto a la propagación de la señal en los edificios: debería instalarse cable coaxial en todos los hogares para distribuir la señal televisiva.

Afortunadamente nuestro Movimiento ha pensado en todo y ofrece una miríada de posibilidades: gracias a un servidor munido de Software Libre, podremos ahora redistribuir la señal televisiva digitalizada pero en forma de paquetes de datos TCP/IP. 

Esto se denomina IPTV. Una vez tornados paquetes TCP/IP, podremos transmitirlos fácilmente a través de a nuestra red de área local o si tomamos las previsiones con nuestro router, podremos emitirlas a través de una red WAN o Internet. Todo ello utilizando, por ejemplo, la infraestructura cableada o inalámbrica existente en un hogar u edificio para dotar de imagen y sonido a Smart TVs, tablets, y otras computadoras que carezcan de sintonizador digital o de conexión a una antena de la norma que tengamos.

Hardware a considerar


Podremos utilizar como servidor cualquier equipo GNU con Linux, siempre que esté dotado con uno o varios sintonizadores de TV digital terrestre o satelital. Para facilitar el uso de la red se puede emplear un router hogareño común. En cualquier caso, es importante que ya tengamos configurado el o los sintonizadores a utilizar.

En este caso en particular, para evaluar la máxima potencia del sistema IPTV a través de una red LAN Gigabit, utilizaremos en nuestro servidor ocho sintonizadores USB 2 de TV digital terrestre ISDB-Tb Geniatech MyGica S880, así como una plaqueta sintonizadora de TV digital satelital DVB-S2. Cada receptor USB recibirá un canal digital multiplexado (dotado de varias señales televisivas), y la plaqueta sintonizadora recibirá una señal satelital multiplexada, con unos quince canales.

La velocidad de transmisión de cada canal multiplexado ISDB-Tb o DVB-S2 puede variar entre 2,5 y los 12 megabytes por segundo dependiendo su compresión. Esta cantidad no es muy grande, y puede manejarse muy bien a través de una red cableada 10/100 o inalámbrica WiFi estándar "G". Pero en el caso de re-emitir ocho canales multiplexados de TV digital terrestre y cuatro canales multiplexados de TV digital satelital - como nos proponemos en este ejemplo IPTV extremo - nos veremos en la necesidad de utilizar WiFi estándar "N" y en lo posible hacer uso de red cableada LAN Gigabit (1000MBps). En este caso en particular de apilar ocho receptores USB, sin duda confiaremos en puertos USB 3.


La sintonizadora USB S880 en miniatura de Geniatech es un dispositivo receptor ISDB-Tb Full-Seg de muy bajo consumo y buena recepción, dotados con un conector hembra MCX al cual se le debe adaptar una antena retráctil. En lugar de utilizar dicha antena suministrada, hemos decidido conectarlo a una bajada de cable coaxial RG6 de 75 Ohmnios con conector F (y en consecuencia, en cada sintonizadora aplicamos un adaptador MCX macho a coaxial F hembra para conectarlos).


Una vez adaptado, cada sintonizador USB lo hemos colocado en un puerto USB 3.0 de un hub potenciado marca XCellon (totalmente compatible con GNU). Los otros dos receptores van conectados a los puertos USB3 del sistema.
La TBS6985 en tanto, es una plaqueta PCI-e para recepción de TV satelital FTA, dotada de cuatro sintonizadores. Está instalada en Ubuntu y conectada a cuatro antenas parabólicas, las cuales ha sido apuntadas previamente a la constelación de satélites compuesta por el Arsat-1, Amazonas, Hispasat y Galaxy 28.
Software Libre MuMuDVB: el streamer Justicialista de TV digital
El cometido de transferir paquetes sintonizados de TV digital a través de una red LAN queda a manos de MuMuDVB.
Si bien el sistema contempla en su empleo básico con el alistamiento de un adaptador dotado de un solo sintonizador, esto no implica que en un sistema con buena potencia podamos contar con varios sintonizadores al unísono, y correr múltiples instancias del mismo servicio.

Como primer medida, instalaremos los programas necesarios desde la Terminal. Para el servidor utilizaremos mumudvb y como cliente podremos emplear VLC. Abrimos una terminal con Ctrl+Alt+T e ingresamos el siguiente Comando de Organización:

sudo apt-get install mumudvb vlc

Acto seguido, construiremos el archivo de configuración del servidor para la TV digital. Las opciones del archivo de configuración las podremos consultar aquí.

En el caso de la configuración para la TV digital terrestre, debemos crear un archivo de configuración para cada sintonizador. Naturalmente que si usamos un único sintonizador de TV digital, sólo crearemos el primer archivo.

En nuestro caso, como tenemos ocho sintonizadores, crearemos ocho archivos diferentes. Al primero lo llamaremos .tdaporip_0.conf, al segundo .tdaporip_1.conf, al tercero .tdaporip_2.conf, etc. Cada uno de ellos tendrá las especificaciones para uno de los ocho sintonizadores S880.

Podemos crear los archivos de configuración con el editor Nano, por medio del siguiente Comando de Organizción:

nano .tdaporip_0.conf

Se abrirá un archivo completamente en blanco. En el mismo habremos de configurar los aspectos que hagan a la frecuencia en Kiloherz y al ancho de banda del canal que queramos utilizar.
Le pegamos el siguiente contenido:




# Configuración de MumuDVB
# Para receptor de TV digital Terrestre ISDB-Tb.
# Activar auto-cofiguración completa

autoconfiguration=full

# Parametro card: indica el numero de sintonizadora/adapter.

# Si hay una sola, es 0.
card=0
# Parametro tuner: identificador del sintonizador.
# Si el adaptador tiene un solo sintonizador, es 0.
tuner=0
# Parámetro freq: frecuencia (Khz) del MUX digital a retransmitir por IP

# Tabla de referencia de frecuencias TDA AMBA:
# 521142: ENCUENTRO | PAKA PAKA | TATETI | INCAA TV | TECNOPOLIS | ENCUENTRO PORTABLE
# 527142: TV PUBLICA HD | TV PUBLICA PORTABLE | CONSTRUIR
# 533142: DEPORTV HD | VIVRA | ARPEGGIO | VIAJAR | DEPORTV PORTABLE
# 539142: CN23 | C5N | TELESUR | 360 TV | RT | CN23 PORTABLE
# 545142: Canal 26 HD |Telemax | C5N HD |ONE TV HD | C5N
# 563142: TV Clip Digital | UNISUR Prueba | Clip | LDTV ES
# 575142: [0001]
# 587142: Canal 13 Prueba | Canal 13 One Seg
# 593142: Telefe HD | Telefe SD | Telefe Movil |ACUA MAYOR
# 599142: Canal 9 HD | Canal 9 SD | ACUA FEDERAL | Canal 9 Portable
# 605142: America HD Prueba | A24 Prueba | America 1 seg | America SD |
freq=527142

# Parámetro bandidth: ancho de banda del servicio.

# Referencia: ISBD-Tb: 6Mhz. ATSC: 8Mhz. DVB-T: 8Mhz.
bandwidth=6MHz

Luego guardamos el archivo con Ctrl+O y salimos del editor Nano con Ctrl+x.

Naturalmente, si tenemos múltiples sintonizadores de TV digital terrestre, en cada archivo debemos cambiar  el número de card por 0, 1, 2, 3, 4, 5, 6, y 7 respectivamente, para hacer caso a cada uno de ellos. También hemos de cambiar la frecuencia para distribuir los distintos canales multiplexados.

El segundo paso consiste en dar inicio al servicio de reenvío de señal digital a través de la IP. Para ello abro una terminal y doy inicio al servicio MumuDVB con las indicaciones -d -c y el nombre del archivo de configuración recién creado:

sudo mumudvb -d -c .tdaporip_0.conf

La terminal nos devolverá las indicaciones de status de MumuDVB:






MuMuDVB Version 1.7.1
--- Build information ---

Built with CAM support.

Built without transcoding support.

Built with ATSC support.

Built with ATSC long channel names support.

Built with support for DVB API Version 5.

---------

Originally based on dvbstream 0.6 by (C) Dave Chapman 2001-2004 Released under the GPL.

Latest version available from http://mumudvb.braice.net/ Project from the cr@ns (http://www.crans.org) by Brice DUBOST (mumudvb@braice.net)

Info: Main: Full autoconfiguration, we activate SAP announces. if you want to deactivate them see the README.

Info: Main: Full autoconfiguration, we activate PAT rewritting. if you want to deactivate it see the README.

Info: Main: Full autoconfiguration, we activate SDT rewritting. if you want to deactivate it see the README.

Info: Main: Full autoconfiguration, we activate sorting of the EIT PID. if you want to deactivate it see the README.

Info: Main: ========== End of configuration, MuMuDVB version 1.7.1 is starting ==========

Info: Autoconf: The autoconfiguration auto update is enabled. If you want to disable it put "autoconf_pid_update=0" in your config file.

Info: Main: Streaming. Freq 527142000

Info: Tune: Using DVB card "DiBcom 8000 ISDB-T" tuner 0

Info: Tune: Tuning DVB-T to 527142000 Hz, Bandwidth: 6000000

Info: Tune: FE_STATUS:

Info: Tune: FE_STATUS:

Info: Tune: FE_HAS_SIGNAL : found something above the noise level

Info: Tune: FE_HAS_CARRIER : found a DVB signal

Info: Tune: FE_HAS_VITERBI : FEC is stable

Info: Tune: FE_HAS_SYNC : found sync bytes

Info: Tune: FE_HAS_LOCK : everything's working...

Info: Tune: Event: Frequency: 527142000

Info: Tune: Bit error rate: 2097151

Info: Tune: Signal strength: 41228

Info: Tune: SNR: 179

Info: Tune: FE_STATUS:

Info: Tune: FE_HAS_SIGNAL : found something above the noise level

Info: Tune: FE_HAS_CARRIER : found a DVB signal

Info: Tune: FE_HAS_VITERBI : FEC is stable

Info: Tune: FE_HAS_SYNC : found sync bytes

Info: Tune: FE_HAS_LOCK : everything's working...

Info: Main: Card 0, tuner 0 tuned

Info: Autoconf: Autoconfiguration Start

WARN: Autoconf: Encoding not implemented yet (0x0e), we'll use the default encoding for service name

WARN: Autoconf: Encoding not implemented yet (0x0e), we'll use the default encoding for service name

WARN: Autoconf: Encoding not implemented yet (0x0e), we'll use the default encoding for service name

WARN: Autoconf: Encoding not implemented yet (0x0e), we'll use the default encoding for service name

Info: Autoconf: Autoconfiguration done

Info: Autoconf: Diffusion 2 channels

Info: Autoconf: Channel number : 0, name : "TV PUBLICA HD" service id 59201

Info: Autoconf: Multicast4 ip : 239.100.0.0:1234

Info: Autoconf: Channel number : 1, name : "CONSTRUIR " service id 59202

Info: Autoconf: Multicast4 ip : 239.100.0.1:1234


Como vemos, MumuDVB sintoniza los canales indicados a través de nuestro sintonizador "0" munido del chipset DiBcom 8000, y en este ejemplo nos informa que ha encontrado dos señales dables para retransmitir en nuestra red local: la TV Publica HD y Construir TV. 

MumuDVB "inyectará" la información digital en forma de paquetes TCP/IP emitiéndolos a nuestro router a través de nuestra conexión de red. Si bien pueden cambiarse, las direcciones IP de los canales suelen ser estándares: 239.100.x.y:1234, siendo x el número de sintonizador (el primero es el 0 y se agregarán más si tenemos más sintonizadores), mientras que y indica el número de canal (también inicia en 0).

También podremos agregar más instancias de servidor, para poder distribuir por IP canales que recibamos en otro sintonizador. Para iniciar el sintonizador S880 número dos, debemos abrir otra instancia terminal e indicar el comando:

sudo mumudvb -d -c .tdaporip_1.conf

...y así sucesivamente con cada sintonizador de TV digital terrestre que tengamos.

En el caso del sintonizador de TV digital satelital, hemos de configurar el archivo para el satélite en cuestión. Si utilizamos el ArSat-1, podríamos configurarlo con el editor Nano según las especificaciones de dicho satélite.

nano .arsat1_por_ip.conf

y le pegamos el siguiente contenido:

# Configuración de MumuDVB
# Para receptor de TV digital satelital DVB-S2.
# Activar auto-cofiguración completa

autoconfiguration=full


# Parametro card: indica el numero de sintonizadora/adapter.

# Si hay una sola, es 0.
card=0
# Parametro tuner: identificador del sintonizador.
# Si el adaptador tiene un solo sintonizador, es 0.
tuner=0
# InVap ArSat-1 para mumudvb

#Consultado en http://www.portaleds.com/espanol/listar.php?sat=2880&cod=fta
#por ubuntuperonista.blogspot.com.ar para todo el Universo GPL-V3
# 9/7/2015
frec: 11670000
pol: v
srate: 30000
lnb_type: universal
lnb_slof: 11700
lnb_lof_low: 9750
lnb_lof_high: 10600
lnb_voltage_off: 0
coderate: 5/6
rolloff: 35

Guardamos con Ctrl+o y salimos con Ctrl+x.

Ahora podremos iniciar otra instancia del servidor que emita por IP lo recibido por el satélite ArSat-1, abriendo otra terminal con Ctrl+Alt+T e ingresando el siguiente comando de organización:

sudo mumudvb -d -c .arsat1_por_ip.conf

Clientes para reproducir la TV desde nuestra red LAN:

Sintonizar la emisión de IPTV será ahora sencillo con cualquier cliente que incluya recepción SAP. Inclusive podremos utilizar Smart TV que normalmente ya cuentan con esta opción. En este caso utilizaremos el conocido reproductor peronista VLC, que no solo cuenta con su versión para GNU Linux, sino que también se encuentra ampliamente difundido en otras plataformas privativas, celulares, tablets, etc.

En el reproductor peronista del conito activamos la Lista de Reproducción (presionando Ctrl+L), y bajo el apartado de Red Local (Local Network), elegiremos Emisiones de Red (SAP) / Network Streams (SAP). VLC buscará servidores SAP en nuestra red local, y tras breves instantes debería indicarnos directamente los canales de IPTV suplidos telemáticamente. Simplemente hacemos clic sobre uno de ellos, y comenzará a reproducirse.
También podremos ingresar desde un navegador de internet o cualquier dispositivo capaz de conectarse al protocolo de internet UDP, como pueden ser VLC o Mplayer. Para ello utilizaríamos:

vlc udp://@239.100.0.3:1234

...o:

mplayer udp://@239.100.0.3:1234

Es importante saber que el video se transmite en su calidad nativa, y por lo tanto no se requiere un equipo tan potente para transcodificar la señal digital a - digamos - resoluciones menores aptas para dispositivos de menor potencia. Si tal fuese el caso, mumudvb también podría hacerlo, pero se requeriría una CPU de potencia (tipo Intel I7) para transcodificar en tiempo real.

Esto sería el caso de requerir servicio de TV por IP para la retransmisión a equipos móviles dotados de Wifi.


Gracias a la velocidad de una red Gigabit, podremos transmitir varios streams de videos sin "hipos" ni cortes, y todos ello de manera libre gracias al software libre y al Justicialismo.

5 comentarios:

  1. muy buen post! aca me respondiste la pregunta que hice en el anterior post... ya me pongo a armar un servidor IPTV.

    pregunta: aca en mi pueblo no hay TDA solo podemos acceder a travez de satelite. puedo armar algo solo conectandome al arsat?
    en ese caso cuantos canales puedo ofrecer en la red lan?

    ResponderEliminar
    Respuestas
    1. Estimado Andrés Anselmo:

      Para utilizar un servicio de TV Digital Satelital Arsat, dicha empresa provee el kit de acceso satelital, del cual nos hemos referido en el blog.

      http://ubuntuperonista.blogspot.com.ar/2014/09/ar-sat-kit-satelital-argentina.html

      Los canales son los indicados en dicho artículo, pero puede encontrar otros más en otros MUX (no oficiales y sujetos a cambios).

      En el caso de dicho satélite, debe contar con una tarjeta IrDeto pues la señal es codificada. La misma se suministra con el kit Arsat y está pensada para utilizarse con el decodificador incluido.

      Existen realmente placas PCI-e de la serie TBS que cuentan con la ranura para la tarjeta IrDeto, y que configuradas de la manera indicada aquí, podrían permitirle la retransmisión a través de su red LAN. Sin embargo, dicha perspectiva es limitada pues dichas placas son difíciles de conseguir en el país, y finalmente la tarjeta IrDeto requerida es una tarjeta codificada por suscripción (tiene que darse de alta telefónicamente, y solo opera en el aparato decodificador suministrado, cosa que revisan cuando ud. da de alta la misma).

      En este articulo hablamos de canales Free To Air, o canales TDA por medio de sintonizadores USB. En tal caso, puede proveer canales de acuerdo al ancho de banda de su red LAN.

      La última pregunta es compleja, en el sentido que hay diferentes formatos y el viejo concepto de "canal" de la TV analógica no alcanza para explicarlo.

      En la TV digital cada "canal" en realidad se llama MUX, y comprende varias señales televisivas. En el caso de la norma ISDB-Tb de la TDA, cada MUX puede comprender:
      - 2 señales HD +1 señal One Seg de baja resolución,
      - 1 señal HD + 4 señales SD + 1 señal OneSeg de baja resolución
      - 6 señales SD+1 señal OneSeg de baja resolución.
      En total cada MUX no puede superar los 12MB/s.

      En este caso, en una red LAN ethernet de 100 mbps de ancho de banda, podria subir teóricamente hasta 4 MUX y en una red Gigabit, diez veces mas.

      Naturalmente que en este caso, se recomienda siempre emplear cable CAT-6 y equipamiento Gigabit Ethernet.

      En el caso de una red Wifi, nunca podría trasmitir mas de 3 MUX en norma G o 5 en norma N exclusiva.

      Atte.

      Juan Perón

      Eliminar
  2. Hola Juan, en primer lugar darte la enhorabuena por este post y las gracias por compartir con nosotros todo tu trabajo.
    Quería hacerte una consulta.

    – Entiendo que por cada entrada TDT o SAT podrás visualizar los canales de una única frecuencia, aunque estos sean diferentes. Pero ¿cual es el limite de clientes por entrada?

    Muchas gracias

    ResponderEliminar
    Respuestas
    1. Estimado Carlos Scanlioni:

      Ello depende de la configuración de la red, pero puede establecerse en el servidor. Por defecto son 64 clientes por servidor, pero puede aumentarse de ser requerido.

      En nuestro caso hemos probado el sistema "a máxima capacidad" con unos 35 clientes aproximadamente, y no tuvo problemas empleando LAN 1 gigabit (para una instalación de TV digital compartida en un edificio).

      En el ejemplo mencionado, se utiliza un sintonizador por Mux, con lo cual se instalaron cuatro tarjetas con cuatro sintonizadores cada uno, totalizado 16 muxes.

      Atte.
      Juan Perón

      Eliminar