Skip to content

Reserva de fontes

Um stream pode ter várias fontes. O Sapsan vigia a fonte ativa, comuta automaticamente para a próxima quando ela se degrada e volta para a principal quando ela se recupera. Esta lógica se chama LSI (Live Source Input).

Várias entradas

As entradas são listadas em ordem de prioridade — a primeira é a principal:

streams:
  - name: tv1
    inputs:
    - udp:
        host: 239.0.0.1
        port: 5000
    - tshttp:
        url: http://backup-origin.example.com/tv1/mpegts

Como funciona a comutação

Propriedades chave do algoritmo, importantes para o ar:

  • Uma fonte fica ativa apenas quando está pronta: ela precisa entregar os parâmetros do stream (MediaInfo) e o primeiro quadro-chave. Até lá os espectadores continuam recebendo a fonte atual.
  • Retorno sem tela preta: uma entrada de maior prioridade recuperada é sondada em segundo plano, e a comutação ocorre somente depois que ela entrega um quadro-chave.
  • Uma entrada caída reconecta com pausas crescentes (reconnect_initial_delayreconnect_delay_stepreconnect_max_delay); quando todas as entradas se esgotam, a rotação recomeça da primeira.
  • Uma fonte cuja taxa de bits excede max_bitrate é interrompida à força.
  • Tempos limite separados para a falta de vídeo e de áudio: o áudio perdido com vídeo vivo também conta como degradação.

Política de comutação

A seção lsi define a política para o stream inteiro; source_options numa entrada específica a sobrepõe:

streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    - udp:
        host: 239.0.0.2
        port: 5000
      source_options:
        source_timeout: 10
    lsi:
      source_timeout: 5
      video_timeout: 3
      audio_timeout: 3

Os tempos limite são definidos em segundos. Parâmetros principais (lsi e/ou source_options):

Parâmetro Descrição
source_timeout, video_timeout, audio_timeout tempos limite de ausência de dados/vídeo/áudio
max_bitrate limite de taxa de bits da fonte
reconnect_initial_delay, reconnect_delay_step, reconnect_max_delay política de reconexão
retry_limit, max_retry_timeout limites de tentativas
recheck_secondary_inputs_interval com que frequência verificar se uma entrada de maior prioridade voltou
allow_if, deny_if (apenas em source_options) ligar/desligar uma entrada por um arquivo de bandeira externo

allow_if/deny_if permitem controlar as entradas de fora sem editar a configuração: uma entrada é usada apenas enquanto o arquivo de bandeira permite.

O arquivo de vinheta (backup)

Se todas as fontes caírem, em vez de uma tela preta é exibido um arquivo (veja como preparar o arquivo):

streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    lsi:
      backup:
        file: /storage/technical-difficulties.mp4
        timeout: 5

A vinheta entra em ação timeout segundos depois da queda das entradas (imediatamente, se não houver entradas nenhuma) e tem seus próprios audio_timeout/video_timeout.

Observabilidade

Por stream: o tempo na entrada principal e nas de reserva, o tempo sem dados, o número de tentativas, a validade das entradas reserva e um detector de divergência de parâmetros — se uma entrada reserva entrega parâmetros de vídeo diferentes (o que torna impossível uma comutação sem interrupção), isso fica visível com antecedência, antes do incidente. Por entrada: os tempos de abertura/conexão/início e o último erro. Veja monitoramento.

Próximos passos