Gravação do arquivo¶
media.dvr.record
O DVR do Sapsan é um armazenamento próprio em disco: o stream é gravado append-only em arquivos por hora, por pista, em vários discos ao mesmo tempo. Ler o arquivo não atrapalha gravá-lo.
Desempenho e endereçamento estável¶
O armazenamento foi testado com sucesso a 25 Gbit/s de gravação em discos mecânicos, simultaneamente com a limpeza do arquivo e a leitura. É o resultado de uma configuração testada; dimensione o hardware para a carga conjunta de gravação e leitura.
Cada fragmento e cada quadro tem um endereço estável: nome do stream, identificador da pista e timestamp inteiro. A linha do tempo usa ticks inteiros e sua frequência (timescale), sem arredondamento para segundos fracionários. O endereço independe do disco ou servidor físico e permanece igual em todo o cluster, na replicação e na migração do arquivo.
A análise de vídeo com IA pode guardar referências a eventos detectados, e os sistemas ERP podem acessar depois os mesmos quadros individuais. Um quadro em uma pista JPEG usa /streaming/v/<stream>/image/<track>/<utc_ms>.jpg; os endereços de fragmentos incluem a pista e um timestamp na forma <ticks>-<timescale>. A disponibilidade dos dados depende da retenção do arquivo e das permissões de acesso.
Armazenamento¶
A seção global dvr descreve o armazenamento inteiro:
dvr:
root: /storage # raiz do arquivo
catalog: /storage/catalog # catálogo de blobs (por padrão <root>/catalog)
disks:
- path: d1 # discos relativos a root
- path: d2
- path: d3
Parâmetros do disco:
| Parâmetro | Descrição |
|---|---|
path |
caminho do disco relativo a root |
mode |
Active (padrão) ou Degraded — o disco é lido, mas não se grava nele |
min_free_bytes |
reserva mínima de espaço livre |
check_mount verifica que o caminho do disco seja de fato um ponto de montagem (protege contra gravar num diretório vazio quando um disco cai).
Warning
Os discos de gravação são listados explicitamente. A root é a casa do catálogo e a base das rotas relativas, não um disco: com disks vazio, a gravação de cada fragmento termina em erro, visível nas estatísticas, e nada é gravado na root.
Além dos discos de arquivo, o armazenamento pode ter discos de cache (cache_disks) — neles assentam as partes do arquivo que foram lidas: o alheio trazido de outro servidor ou o próprio levantado dos discos de arquivo. A gravação ao vivo nunca os escolhe, e o espaço neles não é liberado pela limpeza, e sim pelo despejo conforme a idade do último acesso. Isso é o cache do arquivo num nó edge.
Ativar a gravação num stream¶
streams:
- name: cam1
inputs:
- rtsp:
url: rtsp://admin:password@10.0.0.5/stream0
dvr:
max_depth: 168 # profundidade do arquivo, horas
dvr: {} liga a gravação com as configurações padrão.
Distribuição da gravação entre discos¶
O Sapsan distribui sozinho a gravação entre os discos ativos:
- horas consecutivas de um mesmo stream alternam entre discos;
- streams vizinhos se espalham de forma parelha entre os discos;
- as pistas de um stream multi-bitrate são gravadas em paralelo em discos diferentes.
Um disco em modo degraded continua servindo leituras mas não recebe dados novos — é assim que um disco é aposentado sem perder o arquivo.
Como funciona o armazenamento¶
O arquivo está disposto nos discos como <disk>/<hash>/<stream>/<Y>/<M>/<D>/<hour>.mp4. Os ficheiros são apenas anexados, nunca reescritos; segmentos init idênticos são deduplicados dentro de um blob.
Um indexador em segundo plano reconcilia sem parar o catálogo com os discos e cura as divergências sem participação do administrador:
- blobs que apareceram no disco às costas do catálogo (por exemplo, depois de mover discos de outro servidor) são acrescentados ao catálogo;
- registros de ficheiros desaparecidos são removidos;
- o índice sidecar de um blob corrompido é reconstruído varrendo o próprio blob;
- os tamanhos em bytes e os filtros bloom dos blobs são preenchidos em segundo plano (blobs mais novos que uma hora não são mexidos).
As leituras toleram falhas: se o catálogo aponta para o disco errado, o fragmento é procurado em todos os discos daquela hora; registros órfãos do catálogo são pulados sem erro.
Observabilidade¶
O DVR entrega estatísticas por disco (espaço livre/total, contadores de operações e de bytes de leitura/gravação, número de blobs, bytes ocupados pelo arquivo) e do catálogo — veja o Admin API e o monitoramento.