Skip to content

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.

Próximos passos