Emisión bajo demanda
Por qué importa
Section titled “Por qué importa”En estos equipos la restricción determinante es la memoria, no la CPU. Cada canal en marcha mantiene un descodificador o un demultiplexor, búferes y un socket, y ese coste se paga tanto si hay un televisor escuchando como si no. En un hotel con cien habitaciones y cuarenta canales, el número de canales distintos que se ven a las tres de la madrugada suele ser dos o tres.
Ejecutar solo lo que se ve convierte los canales inactivos de nuevo en margen. También reduce la carga del enlace de subida, porque un canal que no está en marcha no descarga segmentos del origen.
Cómo se detecta a los espectadores
Section titled “Cómo se detecta a los espectadores”Cuando un televisor sintoniza un canal multicast se anuncia con un informe de pertenencia IGMP, y cuando cambia de canal envía un abandono (leave). Esos mensajes son la única prueba fiable de que alguien está viendo, porque nada aguas abajo del equipo informa de vuelta de ninguna otra manera. Por eso Castmux vigila el tráfico IGMP en la interfaz orientada a los televisores.
Lo hace mediante captura de paquetes, en modo promiscuo, con libpcap. La elección no es arbitraria y conviene entenderla, porque la alternativa obvia —un socket IPPROTO_IGMP en bruto— no funciona en absoluto.
Por qué un socket IGMP en bruto no puede ver a otros hosts
Section titled “Por qué un socket IGMP en bruto no puede ver a otros hosts”El tráfico de pertenencia no va dirigido a esta máquina. Va dirigido a grupos multicast a los que, en general, esta máquina no se ha unido:
| Mensaje | Destino | Consecuencia |
|---|---|---|
| Informe IGMPv3 | 224.0.0.22 | El grupo all-routers-v3. Una cabecera no es un router y no tiene motivo para haberse unido a él. |
| Abandono IGMPv2 | 224.0.0.2 | El grupo all-routers. El mismo problema. |
| Informe IGMPv2 | el propio grupo al que se une | Dirigido, por ejemplo, a 239.10.0.1: un grupo al que el emisor se está uniendo y al que el equipo solo envía. |
Linux descarta, dentro de la ruta de enrutamiento de entrada y antes de entregarlo a cualquier socket, el multicast destinado a un grupo al que el host no se ha unido. Un socket en bruto es un punto de entrega; el paquete ha desaparecido mucho antes de llegar ahí. Ninguna opción de socket lo cambia. El socket se abre sin problemas, las lecturas se bloquean para siempre y el fallo resultante se manifiesta como «nunca hay nadie viendo» en lugar de como un error.
La captura de paquetes se sitúa por debajo de esa comprobación, en el punto donde llegan las tramas, así que ve el tráfico independientemente de a qué se haya unido el host. Por eso Castmux necesita el permiso para capturar paquetes en bruto y por eso el contenedor se ejecuta con red del host; consulte Instalación.
Qué se sigue y qué se ignora
Section titled “Qué se sigue y qué se ignora”Solo se siguen los grupos de destino configurados en sus canales. La red de un edificio transporta mucho multicast ajeno —descubrimiento de servicios mDNS, SSDP de impresoras y smart TV, tráfico de protocolos de enrutamiento— y nada de eso cuenta como espectador. La pertenencia a un grupo que Castmux no sirve se descarta.
Castmux también distingue su propio tráfico del de un espectador. Enviar a un grupo no es verlo; un canal no se mantiene vivo a sí mismo.
Consultas activas
Section titled “Consultas activas”Un cliente envía un informe no solicitado cuando se une y luego no dice nada hasta que algo se lo pregunta. En una red bien enrutada, el querier IGMP —normalmente el router— pregunta periódicamente, y cualquier oyente puede reconstruir la tabla de pertenencia a partir de las respuestas.
Los segmentos en los que se instalan estos equipos no suelen tener querier. No hay router en la VLAN de televisión, los switches hacen snooping como mucho y nada envía consultas generales. En ese estado, un oyente solo se entera de una unión en el momento en que ocurre. Reinicie Castmux, o instálelo en un edificio donde los televisores ya estén sintonizados, y no sabrá de nadie: todos los espectadores existentes son invisibles hasta que cambien de canal.
Por eso Castmux envía sus propias consultas generales IGMP, por defecto cada 30 segundos, y construye la tabla de pertenencia a partir de las respuestas. Esto es lo que permite que el estado de los espectadores sobreviva a un reinicio y que el recuento de espectadores sea correcto en un intervalo de consulta tras el arranque, y no a la larga.
Temporizadores
Section titled “Temporizadores”Tres temporizadores rigen el comportamiento. Los valores por defecto se adaptan a un parque de descodificadores en un segmento tranquilo; el motivo para cambiar uno es un síntoma concreto observado, no el afán de orden.
| Temporizador | Por defecto | Qué controla |
|---|---|---|
| Gracia (grace) | 90 s | Cuánto tiempo puede permanecer en silencio un espectador conocido antes de darlo por ido. Debe superar con holgura el intervalo de consulta, para que una sola consulta perdida o una sola respuesta perdida no expulse a un televisor que sigue viendo. Auméntelo si observa que los espectadores aparecen y desaparecen en un segmento con pérdidas. |
| Permanencia (linger) | 30 s | Cuánto tiempo sigue en marcha un canal después de que se vaya su último espectador. El zapeo es el caso normal: un huésped recorre seis canales en veinte segundos y vuelve. La permanencia hace que la vuelta sea instantánea en lugar de pagar cada vez un nuevo arranque en frío. |
| Intervalo de consulta | 30 s | Cada cuánto envía Castmux una consulta general cuando las consultas activas están habilitadas. Más corto significa recuperación más rápida de la tabla de pertenencia y más tráfico; más largo, lo contrario. Cambie la gracia junto con él, no por separado. |
De qué le protege la permanencia
Section titled “De qué le protege la permanencia”Un arranque en frío es el intervalo entre la llegada de la unión y la salida del primer paquete hacia el televisor. Medido en el equipo, es de unos 1.9 segundos con el motor pass-through y de unos 4.4 segundos con el motor de remultiplexado. Consulte Motores de emisión para saber por qué difieren.
Ninguna de las dos cifras resulta molesta una vez. Pagada seis veces en veinte segundos por alguien que recorre la parrilla, es la diferencia entre un televisor que se siente como un televisor y uno que parece averiado. Ese es todo el argumento a favor del temporizador de permanencia, y es la razón de que su valor por defecto no sea cero.
Fallo en abierto
Section titled “Fallo en abierto”Si la captura de paquetes no puede iniciarse —falta el permiso, la interfaz es incorrecta, la biblioteca no está disponible—, Castmux sigue emitiendo todos los canales en lugar de concluir que nadie está viendo.
El comportamiento es configurable, porque hay instalaciones en las que un operador realmente prefiere que un canal se detenga antes que funcionar sin supervisión. El valor por defecto es fallar en abierto, y debe seguir así salvo que tenga un motivo concreto para lo contrario.
Cuando la detección está afectada, Castmux se marca como degradado y lo indica en la interfaz. Esto importa más de lo que parece: sin ello, «0 espectadores» es ambiguo entre «nadie está viendo» y «no lo sé», y un operador leerá el primer significado siempre. Un indicador de degradación convierte una respuesta errónea y silenciosa en una incógnita visible.
Anulación por canal
Section titled “Anulación por canal”force-always-on hace que un canal concreto funcione de forma continua, diga lo que diga el recuento de espectadores. Recurra a ello cuando el consumidor del flujo no sea algo que pueda unirse a un grupo:
- Un canal que alimenta un múltiplex DVB-C. El multiplexor consume el flujo de forma continua y no emite informes de pertenencia en su nombre. Un canal bajo demanda en un múltiplex es un hueco en la portadora. Consulte Multiplexación DVB-C.
- Una pantalla de recepción o de señalización detrás de un dispositivo que no gestiona bien IGMP, o que nunca debe mostrar un retardo de arranque.
- Durante la puesta en servicio. Durante la instalación le interesa tener el flujo en el cable para poder medirlo, antes de que la detección de espectadores sea una variable más del diagnóstico. Vuelva a desactivarlo al terminar.
Un canal forzado se muestra como forzado en la interfaz, para que quede claro que su estado de ejecución es una instrucción y no una medida.
La vista previa cuenta como espectador
Section titled “La vista previa cuenta como espectador”Abrir la vista previa en la interfaz web registra un espectador para ese canal, así que un canal bajo demanda arranca al previsualizarlo y sigue en marcha mientras la vista previa esté abierta. Sin esto, previsualizar un canal inactivo no mostraría nada y previsualizar uno en emisión lo mantendría vivo por accidente; ambas cosas resultarían confusas. Al cerrar la vista previa se deja correr el temporizador de permanencia normal.
Cuándo desactivarla
Section titled “Cuándo desactivarla”La emisión bajo demanda no es complejidad gratuita, y hay dos casos en los que no aporta nada:
- Una parrilla pequeña siempre activa en una caja con memoria de sobra. Si ocho canales caben con holgura y los ocho se ven la mayor parte del día, la emisión bajo demanda añade un retardo de arranque en la primera sintonización de la mañana y no ahorra nada que necesite. Ejecútelos siempre activos.
- Un segmento en el que no se puede capturar tráfico. Si el equipo no puede ver el IGMP de los televisores —porque no está en su segmento de capa 2, o porque la instalación prohíbe la captura en modo promiscuo—, la detección de espectadores no tiene con qué trabajar. Fallará en abierto y emitirá todo igualmente, pero debe desactivarla explícitamente en lugar de dejar un indicador de degradación permanente, que acostumbra a los operadores a ignorar las advertencias.
En todos los demás casos, la memoria que libera es la razón de que el número de canales en estos equipos sea el que es.