Configuração da saída MPEG-TS¶
Todas as saídas MPEG-TS de um stream — a reprodução por HTTP, SRT, os pushes por UDP, SRT e RIST — são produzidas por um único multiplexador. A seção mpegts do stream define as suas tabelas de serviço: o número do programa, os PIDs das trilhas e a descrição do serviço na SDT. A mesma seção num canal de saída individual sobrepõe esses valores apenas para esse canal: receptores diferentes recebem o mesmo stream sob números de programa e PIDs diferentes.
A seção mpegts do stream¶
streams:
- name: tv1
inputs:
- udp: {host: 239.0.0.1, port: 5000}
mpegts:
pnr: 1030
pmt_pid: 1000
service_name: TV One
provider_name: Example Media
pids:
v1: 1011
a1: 1012
Todo parâmetro é opcional; um campo não definido significa o padrão do servidor:
| Parâmetro | O que define | Padrão |
|---|---|---|
pnr |
número do programa: a entrada na PAT, program_number na PMT e service_id na SDT |
1 |
pmt_pid |
o PID da tabela PMT | atribuído automaticamente |
pids |
PIDs explícitos das trilhas por nome: v1, a1, … |
atribuídos automaticamente |
service_name |
o nome do serviço na SDT | o nome do stream |
provider_name |
o nome do provedor na SDT | string vazia |
ts_stream_id |
transport_stream_id na PAT e no cabeçalho da SDT |
1 |
onid |
original_network_id no cabeçalho da SDT |
1 |
Regras verificadas ao salvar a configuração:
- os PIDs devem estar na faixa 32–8190: valores abaixo são reservados às tabelas de serviço, acima, aos pacotes nulos;
- PIDs duplicados dentro da seção são rejeitados, inclusive um PID de trilha igual a
pmt_pid; pnrnunca é zero — o número de programa zero na PAT é reservado à NIT;- os nomes do serviço e do provedor juntos são limitados para que a SDT caiba em um único pacote TS.
Uma entrada em pids para uma trilha que o stream não tem agora é válida: ela vale quando a trilha aparece. Se um PID configurado explicitamente colide com o PID atribuído automaticamente a outra trilha, o valor explícito vence e a trilha desalojada migra de forma determinística para um PID livre — com um aviso no log.
SDT¶
Junto com a PAT e a PMT, a saída leva uma tabela SDT (PID 0x11): um único serviço do tipo digital television, service_id igual a pnr, e os nomes do serviço e do provedor tirados da seção mpegts. As strings são codificadas conforme o DVB: o latino vai como está e todo o resto como UTF-8 com a codificação declarada, por isso nomes não latinos são lidos corretamente pelos receptores.
Quando as configurações mudam, as versões das tabelas PAT/PMT/SDT afetadas são incrementadas e os receptores pegam as novas como devem. A edição da seção mpegts é aplicada em tempo real: pushes e clientes conectados não reconectam.
Configuração própria por canal¶
Os canais de saída individuais aceitam a mesma seção mpegts:
- um push por UDP, SRT ou RIST — o RTMP não tem MPEG-TS, por isso a seção não se combina com o transporte
rtmp; srt_play— a reprodução SRT da porta dedicada do stream.
streams:
- name: tv1
inputs:
- udp: {host: 239.0.0.1, port: 5000}
mpegts:
pnr: 1030
service_name: TV One
srt_play:
port: 4010
mpegts:
pnr: 200
pushes:
local-multicast:
udp:
host: 239.1.1.1
port: 5500
mpegts:
pnr: 300
pids:
v1: 211
a1: 221
A seção do canal é fundida sobre a do stream campo a campo: um valor definido no canal sobrepõe o do stream, e um não definido é herdado. A exceção é o mapa pids: é um campo único, e um mapa não vazio do canal substitui inteiro o do stream — não há fusão por trilha.
A substituição está disponível apenas para os canais que o próprio stream envia. A reprodução MPEG-TS por HTTP e a porta SRT compartilhada do servidor servem sempre a saída comum do stream, com as configurações do nível do stream.
Como funciona¶
Para um canal com configurações próprias não se inicia um segundo multiplexador. O canal recebe uma cópia da saída comum na qual só as tabelas de serviço e os PIDs dos pacotes são reescritos: o arranjo dos pacotes no tempo, o PCR e os contadores de continuidade do multiplex comum são preservados, por isso as propriedades CBR da saída valem também para os canais sobrepostos. Canais com configurações efetivas idênticas dividem um stream byte a byte idêntico — cem pushes iguais custam tanto quanto um.
A versão de tabelas de uma saída reescrita é mantida pela sua própria história de mudanças, e nunca copiada da saída comum.