Skip to content

O arquivo de outro servidor (remotes)

O Sapsan sabe reproduzir sem emenda um arquivo que está gravado (ou já esteve gravado) em outro servidor. O stream lista os servidores remotos — e os arquivos deles se tornam uma extensão do local: o espectador vê um arquivo contínuo único e nunca sabe de onde os dados chegam fisicamente.

As tarefas típicas que isso resolve:

  • migrar para um servidor novo sem perder histórico — o novo grava o arquivo fresco, o velho guarda o passado;
  • ler o arquivo de servidores réplica;
  • se recuperar depois da troca de um disco.

Configuração

streams:
  - name: cam1
    inputs:
    - rtsp:
        url: rtsp://10.0.0.5/stream0
    dvr: {}
    remotes:
    - url: http://old-server:5080
      timeout_ms: 5000
Parâmetro Descrição
url endereço do servidor Sapsan remoto onde está o arquivo deste stream
timeout_ms tempo limite das requisições ao servidor remoto

Pode haver vários servidores remotos — o Sapsan consulta todos.

Como se consegue a emenda perfeita

A cada acesso ao arquivo o Sapsan une os dados locais e os remotos:

  • Bordas do arquivo — a união das faixas de todos os servidores: o começo mais cedo e o fim mais tarde. Nas interfaces e na API o stream parece um arquivo contínuo único.
  • Playlists — as listas de fragmentos do DVR local e de todos os servidores remotos são unidas, ordenadas e deduplicadas. Na junção de dois arquivos não há nem emenda, nem buraco, nem duplicata.
  • Fragmentos — são lidos em cascata: buffer do ao vivo → DVR local → servidor remoto. A URL do fragmento é a mesma para o reprodutor independentemente de onde os dados moram.

Isso é possível graças ao endereçamento absoluto de fragmentos do Sapsan: o nome de um fragmento é a sua hora UTC, portanto o mesmo fragmento se chama igual em todos os servidores, e unir arquivos não exige recalcular a linha do tempo.

Replicação diferida

Um fragmento lido de um servidor remoto é gravado automaticamente no arquivo local. O DVR local vai «puxando» os pedaços de história alheia que os espectadores de fato assistem — e com o tempo deixa de buscá-los pela rede. Uma falha dessa gravação nunca atrapalha a entrega ao espectador.

A replicação grava a história alheia nos discos de arquivo e a mantém ali até a retenção limpá-la. Se o servidor não deve trazer o arquivo para si, e sim apenas economizar rede no que é popular, isso é o cache do arquivo: discos de cache separados, despejo pela idade do último acesso e funcionamento sem discos de arquivo algum.

Comportamento diante de falhas

  • Se um servidor remoto está inacessível mas os dados existem localmente, a reprodução continua; o problema é apenas registrado no log.
  • O Sapsan memoriza de quais faixas um remoto não dispõe (cache negativo) e não volta a consultá-lo por dados ausentes.
  • Os fragmentos init dos streams remotos ficam em cache.

Note

TODO: autorização de requisições entre servidores, recomendações de tempos limite, limites (quantos remotes são razoáveis), interação com config_external.

Próximos passos