Skip to content

Recepção de ST 2110

ST 2110 é o sinal de estúdio transportado por uma rede IP: vídeo não comprimido, áudio e dados auxiliares viajam em grupos multicast separados, amarrados por um relógio PTP comum. O Mcaster recebe esse sinal como uma fonte de stream comum: as trilhas entram na cadeia, são transcodificadas, gravadas e entregues pelos mesmos meios que um sinal de satélite ou uma fonte SRT.

Uma coisa distingue o 2110 de qualquer outra entrada, e a configuração começa por ela: aqui a fonte não é um endereço, e sim um conjunto de trilhas. Vídeo, áudio e dados auxiliares são três grupos diferentes com três conjuntos de parâmetros diferentes, e o stream é montado a partir deles, não de uma única URL.

O que a rede precisa cumprir

Um fluxo não comprimido são gigabits por segundo, e a rede é preparada para isso antes de alguém abrir o painel.

  • Banda por fluxo. 1080p60 com 10 bits são cerca de 2,5 Gbit/s e 260 mil pacotes por segundo. Uma interface de 10 Gbit/s aguenta três fluxos desses, não quatro: o restante é folga para as rajadas.
  • Quem escolhe a porta é o operador, não a estação. A inscrição sai pela interface indicada nas configurações da entrada, e é ali que o switch entrega o grupo. Uma porta indicada sem banda suficiente é o diagnóstico mais comum: o fluxo «chega» enquanto a imagem se desfaz, porque quem descarta pacotes é o switch — e os contadores da própria máquina continuam limpos.
  • PTP é obrigatório. O relógio do 2110 vem do domínio PTP, e a estação concilia a própria escala de tempo com ele. Um relógio desviado aparece no status do stream separadamente dos erros de recepção: não são a mesma coisa.
  • Multicast e IGMPv3. Os grupos são entregues pela inscrição da estação; quando vários emissores alimentam um grupo e você precisa de um deles, o endereço dele vai no campo Origem (SSM).

Conecte as trilhas

Crie um stream, abra a aba Fontes e clique em + Adicionar fonte. O protocolo é ST 2110.

Entrada ST 2110: interface, endereçamento e os três receptores

Os campos de toda a entrada:

  • Interface — o nome da porta (dpdk0) ou o endereço dela. Aqui não existe o valor «qualquer», e isso é proposital: a interface decide por onde o switch entrega o grupo.
  • Endereçamento — quem dá os endereços às trilhas. É o assunto da seção seguinte.
  • Reduzir 10 bits para 8 na recepção — economiza banda até o transcodificador ao custo dos dois bits baixos. Desligado por padrão.

Os receptores são anunciados pela própria entrada: vídeo, áudio e dados auxiliares aparecem sempre, e o papel deles não é perguntado. O controlador vê exatamente esses três receptores e traz os endereços para eles. Uma trilha assim não está na configuração enquanto não houver nada a dizer sobre ela.

Pode haver mais trilhas de um mesmo tipo: uma segunda trilha de áudio para outro idioma é criada com Adicionar faixa no bloco Faixas adicionadas. Ali o papel (audio 2) é escolhido por você, e o tipo precisa ser nomeado explicitamente — de uma string livre ele não se deduz. A edição do papel é aplicada quando o campo perde o foco.

Cada trilha tem a caixa Receber: desmarcá-la mantém a trilha na configuração com todos os parâmetros, mas nenhum socket é aberto.

Não esqueça de Salvar: a edição da entrada chega ao servidor apenas pelo botão.

Duas formas de endereçar uma trilha

A forma é escolhida no campo Endereçamento e vale para a entrada inteira, não para uma trilha isolada: uma rede ou é governada por um controlador ou não é, e uma trilha comutada pelo controlador ao lado de outra digitada à mão não é um cenário, e sim um mal-entendido que alguém teria de depurar.

  • Controlador (IS-05) — o caminho principal. O operador liga a entrada e nomeia a interface; de onde receber é o controlador que diz, e para todas as trilhas de uma vez.
  • À mão — o mesmo feito por você: o operador digita o endereço e o formato de cada trilha. Serve para uma rede sem controlador e para testes.

O arquivo de transporte não está nessa lista, e isso é proposital. O SDP é enviado pelo controlador, e descreve uma conexão já feita em vez de ser um jeito de estabelecê-la: ninguém escreve SDP à mão. Uma trilha comutada traz a linha Comutado pelo controlador com o identificador do emissor, e abaixo dela o Arquivo de transporte, somente leitura. Isso é diagnóstico — a resposta a «de onde isto está chegando agora» — e não um campo de entrada.

O endereçamento à mão fica assim:

Endereçamento à mão: grupo, porta e formato

Um endereço sem formato é rejeitado, e não é implicância: mídia não comprimida não carrega geometria própria dentro do fluxo. Um pacote 2110-20 não declara nem o tamanho do quadro, nem a taxa, nem a subamostragem — o receptor precisa saber disso de antemão, ou não há contra o que analisar as linhas. Daí o conjunto de campos: Largura, Altura, Profundidade de bits, Subamostragem, Taxa de quadros, Entrelaçado, Transporte por campos (segmented).

A taxa é escrita como fração, como no SDP: 60000/1001, não 59.94. O arredondamento aqui não é um detalhe — a partir dele não se reconstrói a grade de marcas de tempo.

Dos esquemas de subamostragem, o que hoje chega à cadeia é YCbCr 4:2:2 com 8 ou 10 bits. Os demais — 4:2:0, 4:4:4, RGB — são analisados e distribuídos em grupos de pixels, mas deles não se monta quadro algum: a trilha para e o motivo nomeia o esquema e a profundidade.

Os dois campos de um quadro entrelaçado a própria estação junta; o desentrelaçamento continua sendo trabalho do transcodificador.

Comutação por um controlador NMOS

O endereçamento à mão é o caminho reserva. A estação faz o que a infraestrutura de estúdio espera dela: anuncia-se a um controlador por IS-04 e entrega a ele a comutação dos seus receptores por IS-05. O controlador escreve ele mesmo o arquivo de transporte na trilha — a mesma edição de configuração que um operador teria feito.

O anúncio é configurado nas configurações do nó, seção NMOS:

A seção NMOS nas configurações do nó

  • Interface — a porta anunciada. Um campo vazio significa que o NMOS está desligado e o nó nem sequer aparece no registro.
  • Identidade — dela derivam os identificadores dos recursos; vazio significa o nome do host. Se você a mudar, todos os identificadores do nó mudam e o controlador vê um dispositivo novo.
  • Rótulo — o que aparece no controlador.
  • Onde este nó serve as interfaces NMOSPorta e interface próprias (recomendado) ou Porta HTTP compartilhada do nó. A própria é definida por Interface das interfaces NMOS (a rede de controle; vazio significa a interface de mídia) e Porta das interfaces NMOS (8090 por padrão).

A escolha é sobre acesso, não sobre conveniência: a ativação IS-05 não é autenticada, e na porta compartilhada as interfaces aparecem em todas as portas HTTP do nó, inclusive as públicas. Só a rede pode limitar quem chega até elas — por isso a recomendação é uma porta separada na rede de controle.

A ativação é servida por quem é proprietário da configuração: para um nó gerenciado por um cluster, o próprio cluster (nas configurações dele é a seção NMOS (ST 2110) com a caixa Comutar entradas pelo central); para uma caixa autônoma, ela mesma. Do lado do nó não há nada a configurar para isso.

Sobre os receptores importa uma coisa: um nó nunca tem receptores sobrando. O controlador vê exatamente aqueles derivados dos streams, e uma ativação não cria stream algum. Por isso o stream a ser comutado é criado de antemão, com uma entrada ST 2110 no modo Controlador (IS-05), onde as trilhas ainda não têm endereços. Enquanto o stream não existir, o controlador não tem o que comutar.

Uma trilha comutada diz isso no formulário: Comutado pelo controlador com o identificador do emissor. Essa linha é preenchida pelo controlador e não pode ser editada.

A estação procura um registro por conta própria e, ao encontrá-lo, registra-se nele e mantém a inscrição viva com um batimento. Se não houver registro na rede, ela fala diretamente com o controlador, ponto a ponto.

O que chega ao stream

O stream começa assim que a primeira trilha passa a chegar e não espera pelas demais. O estado da recepção fica na aba Fontes, no bloco Saúde das fontes:

Saúde de uma fonte ST 2110

O cartão mostra o status, o endereço de entrada, o conjunto de trilhas e o bitrate de recepção. Os números da captura são reais: 2501 Mbit/s é uma trilha de vídeo 1080p60 de 10 bits mais dezesseis canais de áudio L24.

O conjunto de trilhas fica na aba Configurações básicas, no bloco Conteúdo do fluxo:

Trilhas de um stream não comprimido

O codec nomeia a disposição no cabo, e não aquilo em que o fluxo vai se tornar: yuv422p10st para o vídeo de 10 bits e l24 para o áudio. A estação não faz downmix de canais — pega tantos quantos o emissor declarar e os entrega como uma única trilha.

Um fluxo não comprimido precisa de transcodificação

Um stream que não tem nada além de uma entrada 2110 é um estado de funcionamento, não uma falha: ele arranca, recebe dados e passa quadros aos assinantes. Mas nele não há segmentação, e a playlist mestre chega sem uma única trilha: uma trilha não comprimida não pode entrar nela — um player quebraria analisando o codec dela em vez de receber um honesto «não há nada para reproduzir».

Por isso o painel oferece um link ao lado do conjunto de trilhas — Transcodificar para reproduzir na web: ele abre a aba Transcodificador com um perfil pronto. Depois disso o stream reproduz, grava no arquivo e alimenta os envios como qualquer outro.

Os indicadores de cadeia não comprimida e de segmentação inativa aparecem separadamente no status do stream, para que esse estado não seja confundido com um defeito.

As miniaturas de um fluxo não comprimido funcionam sem transcodificador: são tiradas diretamente da trilha não comprimida, inclusive para o arquivo.

Dados auxiliares e legendas

Uma trilha do tipo dados auxiliares (2110-40) é recebida e analisada em pares DID/SDID. O que acontece depois depende do que sejam esses dados:

  • O teletexto OP-47 chega ao stream como uma trilha de teletexto — a mesma que o teletexto do MPEG-TS produz.
  • As legendas CEA-708/608 são analisadas e o contador do par DID/SDID delas cresce, mas nenhuma trilha de legendas aparece no stream: essas legendas vivem dentro do vídeo codificado, e entregá-las na saída ainda não faz parte da estação.
  • Os pares desconhecidos são contados e descartados: não existe uma trilha de «dados auxiliares crus» saindo para fora.

Um pacote que não passa na soma de verificação é descartado com um contador; uma paridade quebrada é contada, mas não descarta o pacote.

Ajuste fino

Normalmente desnecessário: um campo vazio significa o padrão da estação, não «desligado». Ele vive em dois blocos recolhidos.

Ajuste desta faixa — o que pertence a um grupo:

  • Núcleo de CPU — fixa a thread de recepção da trilha em um núcleo. Cada trilha tem a própria thread, por isso cada uma tem o próprio campo. Vazio deixa ao escalonador.
  • Fila AF_XDP — a fila da placa que a trilha assume, contornando o socket comum. Vazio significa socket comum.

Ajuste da entrada — o que é comum:

  • Buffer do socket (bytes) — quanto o kernel retém no buffer de recepção de cada socket.
  • Fila de quadros (bytes) — o teto da fila de uma trilha entre a recepção e a cadeia. No estouro, o excedente é descartado com um contador: a recepção não trava.
  • Quadro de áudio (ms) — a granularidade das mensagens de áudio. Menos significa menos atraso e mais mensagens.

O que é suportado

Capacidade Estado
Vídeo 2110-20: YCbCr 4:2:2 com profundidade de 8 e 10 bits sim
Os 10 bits são mantidos na disposição do cabo, sem redução sim
Outros esquemas 2110-20: 4:2:0, 4:4:4, RGB não, são analisados mas não geram quadro — o motivo nomeia o esquema
Entrelaçado: os dois campos são unidos em um quadro sim
Transporte por campos (segmented) a caixa é aceita mas ainda não afeta a recepção
Áudio 2110-30: L16 e L24, qualquer número de canais, ptime do SDP sim
Dados auxiliares 2110-40: despacotamento, soma de verificação, contadores sim
Teletexto OP-47 como trilha de teletexto sim
Legendas CEA-708/608 analisadas e contadas, não entregues como trilha
Endereçamento por arquivo de transporte (SDP) enviado por um controlador sim
Inscrição em um emissor específico (SSM, IGMPv3) sim
Várias trilhas de um mesmo tipo em uma entrada sim
NMOS IS-04: anúncio do nó, mDNS, registro em um registry sim
NMOS IS-05: receptores comutados por um controlador sim
A estação descobrir emissores alheios por conta própria não, o endereço vem de um controlador ou de um operador
SDP com várias linhas de mídia em uma trilha não, um bloco de endereçamento descreve uma trilha
Saída 2110 (a estação como emissora) não

Aplicação das mudanças

Mudar o grupo, a porta, o emissor ou o arquivo de transporte recria o socket com uma inscrição nova — a recepção daquela trilha é interrompida enquanto as demais seguem. Os campos que não afetam a recepção são aplicados na hora.

Verificação

Verifique nesta ordem, porque cada passo só faz sentido depois que o anterior passou:

  • Os pacotes chegamtcpdump -i <interface> host <grupo> na própria máquina da estação. Uma verificação de uma máquina vizinha não responde a esta pergunta: a entrega do grupo segue a inscrição, e quem a fez foi a estação.
  • As trilhas subiram — o cartão do bloco Saúde das fontes mostra o conjunto de trilhas e o bitrate de recepção.
  • O relógio não se desviou — o desvio do relógio no status do stream. Sem sincronização o arquivo e o rebobinar param de funcionar, e a cura está no domínio PTP, não nas configurações da entrada.
  • A imagem é a esperada — a prévia do stream: a geometria e a subamostragem são definidas à mão no endereçamento manual, e um erro ali dá linhas tortas em vez de uma recusa a receber.

Um script para uma bancada sem controlador

Uma bancada de testes normalmente não tem controlador NMOS, e ainda assim os endereços dos grupos são necessários: na maioria dos emissores eles mudam de uma ativação para outra, então anotá-los uma vez não funciona.

Para esse caso vai anexado um pequeno script — nmosctl.py. Ele precisa apenas de Python 3; não tem dependências, e para encontrar nós é usado o avahi-browse.

python3 nmosctl.py discover                       # nós na rede (mDNS)
python3 nmosctl.py list 10.0.0.90:8090            # dispositivos, emissores, receptores
python3 nmosctl.py enable 10.0.0.90:8090 <sender> # habilitar um emissor
python3 nmosctl.py sdp 10.0.0.90:8090 <sender>    # o arquivo de transporte dele

O texto que o sdp devolve é o que um controlador traz ao comutar uma trilha: na bancada ele serve para conferir o endereçamento à mão, e dele se copiam o grupo, a porta e o formato.

Os dois tropeços mais frequentes:

  • Enquanto um emissor não estiver habilitado não há arquivo de transporte — o sdp responde com erro, porque o endereço do grupo aparece só na ativação.
  • O endereço muda a cada ativação. Pegue-o de novo em vez de tirá-lo das suas anotações: uma inscrição no grupo anterior dá zero pacotes em silêncio.

O que vem a seguir