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.