Skip to content

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;
  • pnr nunca é 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.

O que vem a seguir