Recepción de ST 2110¶
ST 2110 es la señal de estudio transportada por una red IP: el vídeo sin comprimir, el audio y los datos auxiliares viajan en grupos multicast distintos, atados por un reloj PTP común. Mcaster toma esa señal como una fuente de stream corriente: las pistas entran en la cadena, se transcodifican, se graban y se entregan con los mismos medios que una señal de satélite o una fuente SRT.
Una cosa distingue al 2110 de cualquier otra entrada, y la configuración empieza por ella: aquí la fuente no es una dirección sino un conjunto de pistas. Vídeo, audio y datos auxiliares son tres grupos distintos con tres juegos de parámetros distintos, y el stream se arma con ellos y no con una sola URL.
Qué debe cumplir la red¶
Un flujo sin comprimir son gigabits por segundo, y la red se prepara para ello antes de que nadie abra el panel.
- Ancho de banda por flujo. 1080p60 a 10 bits son unos 2,5 Gbit/s y 260 mil paquetes por segundo. Una interfaz de 10 Gbit/s aguanta tres flujos así, no cuatro: el resto es margen para las ráfagas.
- El puerto lo elige el operador, no la estación. La suscripción sale por la interfaz indicada en los ajustes de la entrada, y ahí es donde el switch entrega el grupo. Un puerto indicado sin ancho de banda suficiente es el diagnóstico más frecuente: el flujo «llega» mientras la imagen se deshace, porque quien descarta paquetes es el switch — y los contadores del propio equipo siguen limpios.
- PTP es obligatorio. El reloj de 2110 viene del dominio PTP, y la estación concilia su propia escala de tiempo con él. Un reloj desviado se ve en el estado del stream aparte de los errores de recepción: no son lo mismo.
- Multicast e IGMPv3. Los grupos se entregan por la suscripción de la estación; cuando varios emisores alimentan un grupo y usted necesita uno de ellos, su dirección va al campo Origen (SSM).
Conecte las pistas¶
Cree un stream, abra la pestaña Fuentes y pulse + Añadir fuente. El protocolo es ST 2110.

Los campos de toda la entrada:
- Interfaz — el nombre del puerto (
dpdk0) o su dirección. Aquí no existe el valor «cualquiera», y es deliberado: la interfaz decide por dónde entrega el switch el grupo. - Direccionamiento — quién da las direcciones a las pistas. De eso trata la sección siguiente.
- Reducir 10 bits a 8 en la recepción — ahorra ancho de banda hasta el transcodificador a costa de los dos bits bajos. Desactivado por omisión.
Los receptores los anuncia la propia entrada: vídeo, audio y datos auxiliares se muestran siempre, y no se pregunta por su rol. El controlador ve exactamente esos tres receptores y les trae las direcciones. Una pista así no está en la configuración mientras no haya nada que decir de ella.
Puede haber más pistas de un mismo tipo: una segunda pista de audio para otro idioma se crea con Añadir pista en el bloque Pistas añadidas. Allí el rol (audio 2) lo pone usted, y hay que nombrar el tipo explícitamente — de una cadena libre no se deduce. La edición del rol se aplica cuando el campo pierde el foco.
Cada pista tiene la casilla Recibir: desmarcarla mantiene la pista en la configuración con todos sus parámetros, pero no se abre ningún socket.
No olvide Guardar: la edición de la entrada llega al servidor solo con el botón.
Dos formas de direccionar una pista¶
La forma se elige en el campo Direccionamiento y vale para toda la entrada, no para una pista suelta: una red o la gobierna un controlador o no, y una pista conmutada por el controlador junto a otra escrita a mano no es un escenario sino un malentendido que alguien tendría que depurar.
- Controlador (IS-05) — el camino principal. El operador enciende la entrada y nombra la interfaz; de dónde recibir lo dice el controlador, y para todas las pistas a la vez.
- A mano — lo mismo hecho por usted: el operador escribe la dirección y el formato de cada pista. Sirve para una red sin controlador y para pruebas.
El archivo de transporte no está en esa lista, y es deliberado. El SDP lo envía el controlador, y describe una conexión ya hecha en lugar de ser una manera de establecerla: nadie escribe SDP a mano. Una pista conmutada lleva la línea Conmutado por el controlador con el identificador del emisor, y debajo el Archivo de transporte, solo de lectura. Eso es diagnóstico — la respuesta a «de dónde llega esto ahora mismo» — y no un campo de entrada.
El direccionamiento a mano se ve así:

Una dirección sin formato se rechaza, y no es puntillosidad: el medio sin comprimir no lleva geometría propia dentro del flujo. Un paquete 2110-20 no declara ni el tamaño del cuadro, ni la frecuencia, ni el submuestreo — el receptor tiene que saberlos de antemano, o no hay contra qué analizar las líneas. De ahí el juego de campos: Ancho, Alto, Profundidad de bits, Submuestreo, Frecuencia de cuadros, Entrelazado, Transporte por campos (segmented).
La frecuencia se escribe como fracción, igual que en SDP: 60000/1001, no 59.94. El redondeo no es un detalle aquí — con él no se puede reconstruir la rejilla de marcas de tiempo.
De los esquemas de submuestreo, el que hoy llega a la cadena es YCbCr 4:2:2 con 8 o 10 bits. Los demás — 4:2:0, 4:4:4, RGB — se analizan y se reparten en grupos de píxeles, pero de ellos no se arma ningún cuadro: la pista se detiene y el motivo nombra el esquema y la profundidad.
Los dos campos de un cuadro entrelazado los une la propia estación; el desentrelazado sigue siendo trabajo del transcodificador.
Conmutación por un controlador NMOS¶
El direccionamiento a mano es el camino de reserva. La estación hace lo que la infraestructura de estudio espera de ella: se anuncia a un controlador por IS-04 y le entrega la conmutación de sus receptores por IS-05. El controlador escribe él mismo el archivo de transporte en la pista — la misma edición de configuración que habría hecho un operador.
El anuncio se configura en los ajustes del nodo, sección NMOS:

- Interfaz — el puerto anunciado. Un campo vacío significa que NMOS está apagado y el nodo no aparece siquiera en el registro.
- Identidad — de ella se derivan los identificadores de los recursos; vacío significa el nombre del host. Si la cambia, cambian todos los identificadores del nodo y el controlador ve un dispositivo nuevo.
- Etiqueta — lo que se muestra en el controlador.
- Dónde sirve este nodo las interfaces NMOS — Puerto e interfaz propios (recomendado) o Puerto HTTP compartido del nodo. El propio se define con Interfaz de las interfaces NMOS (la red de control; vacío significa la interfaz de medios) y Puerto de las interfaces NMOS (8090 por omisión).
La elección es sobre el acceso, no sobre la comodidad: la activación IS-05 no se autentica, y en el puerto compartido las interfaces aparecen en todos los puertos HTTP del nodo, incluidos los públicos. Solo la red puede limitar quién llega hasta ellas — por eso se recomienda un puerto aparte en la red de control.
La activación la sirve quien es propietario de la configuración: para un nodo gestionado por un clúster, el propio clúster (en sus ajustes es la sección NMOS (ST 2110) con la casilla Conmutar entradas a través de central); para una caja autónoma, ella misma. En el lado del nodo no hay nada que configurar para eso.
Sobre los receptores importa una cosa: un nodo nunca tiene receptores de sobra. El controlador ve exactamente los que se derivan de los streams, y una activación no crea ningún stream. Por eso el stream que se va a conmutar se crea de antemano, con una entrada ST 2110 en modo Controlador (IS-05), donde las pistas aún no tienen direcciones. Mientras el stream no exista, el controlador no tiene nada que conmutar.
Una pista conmutada lo dice en el formulario: Conmutado por el controlador con el identificador del emisor. Esa línea la rellena el controlador y no se puede editar.
La estación busca por sí misma un registro y, al encontrarlo, se registra en él y mantiene viva la inscripción con un latido. Si no hay registro en la red, habla directamente con el controlador, punto a punto.
Qué llega al stream¶
El stream arranca en cuanto empieza a llegar la primera pista y no espera a las demás. El estado de la recepción está en la pestaña Fuentes, en el bloque Salud de la fuente:

La tarjeta muestra el estado, la dirección de entrada, el conjunto de pistas y el bitrate de recepción. Las cifras de la captura son reales: 2501 Mbit/s es una pista de vídeo 1080p60 de 10 bits más dieciséis canales de audio L24.
El conjunto de pistas está en la pestaña Configuración básica, en el bloque Contenido del flujo:

El códec nombra la disposición en el cable y no aquello en lo que el flujo se convertirá: yuv422p10st para el vídeo de 10 bits y l24 para el audio. La estación no mezcla canales a la baja — toma tantos como declare el emisor y los entrega como una sola pista.
Un flujo sin comprimir necesita transcodificación¶
Un stream que no tiene más que una entrada 2110 es un estado de funcionamiento, no una avería: arranca, recibe datos y pasa cuadros a los suscriptores. Pero en él no hay segmentación, y la lista maestra llega sin una sola pista: una pista sin comprimir no puede ir en ella — un reproductor se rompería analizando su códec en lugar de recibir un honesto «no hay nada que reproducir».
Por eso el panel ofrece un enlace junto al conjunto de pistas — Transcodificar para reproducir en la web: abre la pestaña Transcodificador con un perfil listo. Después de eso el stream se reproduce, se graba en el archivo y alimenta los envíos como cualquier otro.
Los indicadores de cadena sin comprimir y de segmentación inactiva se muestran aparte en el estado del stream, para que ese estado no se confunda con un fallo.
Las miniaturas de un flujo sin comprimir funcionan sin transcodificador: se toman directamente de la pista sin comprimir, también hacia el archivo.
Datos auxiliares y subtítulos¶
Una pista del tipo datos auxiliares (2110-40) se recibe y se analiza en pares DID/SDID. Lo que ocurre después depende de qué sean esos datos:
- El teletexto OP-47 llega al stream como una pista de teletexto — la misma que produce el teletexto de MPEG-TS.
- Los subtítulos CEA-708/608 se analizan y el contador de su par DID/SDID crece, pero en el stream no aparece ninguna pista de subtítulos: esos subtítulos viven dentro del vídeo codificado, y entregarlos a la salida todavía no forma parte de la estación.
- Los pares desconocidos se cuentan y se descartan: no existe una pista de «datos auxiliares en bruto» que salga hacia fuera.
Un paquete que no supera su suma de control se descarta con un contador; una paridad rota se cuenta pero no descarta el paquete.
Ajuste fino¶
Normalmente no hace falta: un campo vacío significa el valor por omisión de la estación, no «apagado». Vive en dos bloques plegados.
Ajuste de esta pista — lo que pertenece a un grupo:
- Núcleo de CPU — fija el hilo de recepción de la pista a un núcleo. Cada pista tiene su propio hilo, por eso cada una tiene su propio campo. Vacío lo deja al planificador.
- Cola AF_XDP — la cola de la tarjeta que la pista toma para sí, saltándose el socket corriente. Vacío significa socket corriente.
Ajuste de la entrada — lo que es común:
- Búfer del socket (bytes) — cuánto retiene el núcleo en el búfer de recepción de cada socket.
- Cola de cuadros (bytes) — el límite de la cola de una pista entre la recepción y la cadena. Al desbordarse, lo que sobra se descarta con un contador: la recepción no se detiene.
- Cuadro de audio (ms) — la granularidad de los mensajes de audio. Menos significa menos retardo y más mensajes.
Qué está soportado¶
| Capacidad | Estado |
|---|---|
| Vídeo 2110-20: YCbCr 4:2:2 con profundidad de 8 y 10 bits | sí |
| Los 10 bits se conservan en la disposición del cable, sin reducción | sí |
| Otros esquemas 2110-20: 4:2:0, 4:4:4, RGB | no, se analizan pero no dan cuadro — el motivo nombra el esquema |
| Entrelazado: los dos campos se unen en un cuadro | sí |
| Transporte por campos (segmented) | la casilla se acepta pero todavía no afecta a la recepción |
Audio 2110-30: L16 y L24, cualquier número de canales, ptime del SDP |
sí |
| Datos auxiliares 2110-40: despaquetizado, suma de control, contadores | sí |
| Teletexto OP-47 como pista de teletexto | sí |
| Subtítulos CEA-708/608 | se analizan y se cuentan, no se entregan como pista |
| Direccionamiento por archivo de transporte (SDP) enviado por un controlador | sí |
| Suscripción a un emisor concreto (SSM, IGMPv3) | sí |
| Varias pistas de un mismo tipo en una entrada | sí |
| NMOS IS-04: anuncio del nodo, mDNS, registro en un registry | sí |
| NMOS IS-05: receptores conmutados por un controlador | sí |
| Que la estación descubra por su cuenta emisores ajenos | no, la dirección la trae un controlador o un operador |
| SDP con varias líneas de medio en una pista | no, un bloque de direccionamiento describe una pista |
| Salida 2110 (la estación como emisor) | no |
Aplicación de los cambios¶
Cambiar el grupo, el puerto, el emisor o el archivo de transporte recrea el socket con una suscripción nueva — la recepción de esa pista se interrumpe mientras las demás siguen. Los campos que no afectan a la recepción se aplican al vuelo.
Comprobación¶
Compruebe en este orden, porque cada paso solo tiene sentido cuando el anterior ha pasado:
- Los paquetes llegan —
tcpdump -i <interfaz> host <grupo>en la propia máquina de la estación. Una comprobación desde una máquina vecina no responde a esta pregunta: la entrega del grupo sigue a la suscripción, y quien la hizo es la estación. - Las pistas se levantaron — la tarjeta del bloque Salud de la fuente muestra el conjunto de pistas y el bitrate de recepción.
- El reloj no se ha desviado — la desviación del reloj en el estado del stream. Sin sincronización dejan de funcionar el archivo y el rebobinado, y la cura está en el dominio PTP, no en los ajustes de la entrada.
- La imagen es la esperada — la vista previa del stream: la geometría y el submuestreo se ponen a mano en el direccionamiento manual, y un error ahí da líneas torcidas en vez de una negativa a recibir.
Un script para un banco sin controlador¶
Un banco de pruebas normalmente no tiene controlador NMOS, y sin embargo hacen falta las direcciones de los grupos: en la mayoría de los emisores cambian de una activación a otra, así que anotarlas una vez no sirve.
Para ese caso se adjunta un pequeño script — nmosctl.py. Solo necesita Python 3; no tiene dependencias, y para encontrar nodos se usa avahi-browse.
python3 nmosctl.py discover # nodos de la red (mDNS)
python3 nmosctl.py list 10.0.0.90:8090 # dispositivos, emisores, receptores
python3 nmosctl.py enable 10.0.0.90:8090 <sender> # habilitar un emisor
python3 nmosctl.py sdp 10.0.0.90:8090 <sender> # su archivo de transporte
El texto que devuelve sdp es el que trae un controlador cuando conmuta una pista: en el banco sirve para comprobar el direccionamiento a mano, de donde se copian el grupo, el puerto y el formato.
Los dos tropiezos más frecuentes:
- Mientras un emisor no esté habilitado no hay archivo de transporte —
sdpresponde con un error, porque la dirección del grupo aparece solo al activarse. - La dirección cambia en cada activación. Tómela de nuevo en lugar de sacarla de sus apuntes: una suscripción al grupo anterior da cero paquetes en silencio.
Qué sigue¶
- Transcodifique el flujo — el perfil tras el cual una señal sin comprimir se reproduce y se graba.
- Añada una entrada de reserva — una segunda fuente y las reglas de conmutación.
- Errores de entrada — qué significan los contadores cuando una señal se degrada.
- Devuelva la señal a la red.