Skip to content

Exportação de um trecho do arquivo

Um trecho do arquivo gravado é baixado como um único arquivo MP4 que abre nos reprodutores comuns, por exemplo no VLC. O arquivo MP4 é montado a partir da gravação no momento da solicitação; não é preciso preparar nada com antecedência.

A exportação funciona só em streams com gravação ligada (dvr).

URL de exportação

http://server/streaming/v/<stream>/archive-<from>-<duration>.mp4
  • from — início do trecho, UTC em segundos;
  • duration — duração do trecho em segundos.

Por exemplo, archive-1789546139-600.mp4 são dez minutos de arquivo a partir do momento indicado.

Se o stream exige autorização, o token é passado como na reprodução do arquivo, por exemplo ?token=<token> — veja Autorização.

Seleção de faixas

Sem parâmetros, o arquivo MP4 recebe todas as faixas de vídeo e áudio do trecho. As faixas são escolhidas com o parâmetro filter.tracks:

http://server/streaming/v/<stream>/archive-<from>-<duration>.mp4?filter.tracks=v1a1

As faixas são nomeadas como nas playlists: v1, v2 são vídeo, a1 é áudio. Se nenhuma faixa de vídeo entrar no arquivo MP4, ele é entregue como audio/mp4.

Legendas e faixas de serviço ainda não são suportadas na exportação; uma solicitação de uma faixa assim é rejeitada com 422.

O que entra no arquivo MP4

  • Início — o arquivo MP4 começa no quadro-chave anterior ou igual ao momento solicitado, por isso pode durar alguns segundos a mais que o pedido. Se o início cair numa lacuna da gravação, ele começa no primeiro quadro-chave depois da lacuna.
  • Lacunas da gravação — são unidas: o arquivo MP4 contém só tempo gravado e pode ser mais curto que o trecho solicitado.
  • Mudança de parâmetros do stream — se os parâmetros de uma faixa mudaram dentro do trecho, por exemplo a resolução da câmera, o arquivo MP4 termina no ponto da mudança.

O servidor propõe o nome do arquivo no cabeçalho Content-Disposition: <stream>_<AAAA-MM-DD>_<HH-MM-SS>Z_<segundos>s.mp4. A hora no nome está em UTC e a duração é a efetivamente gravada.

O tamanho é conhecido antes do download: uma solicitação HEAD para a mesma URL devolve Content-Length sem o arquivo.

Configuração

Os limites são definidos na seção dvr do servidor:

dvr:
  root: /storage
  export_max_duration_secs: 10800   # duração máxima de uma exportação, segundos
  export_max_concurrent: 4          # quantas exportações rodam ao mesmo tempo
Parâmetro Padrão Descrição
export_max_duration_secs 10800 (3 horas) uma solicitação mais longa é rejeitada com 422 antes de ler o arquivo
export_max_concurrent 4 uma solicitação acima do limite recebe 503 com o cabeçalho Retry-After

O valor zero não é permitido.

Respostas do servidor

Código Quando
200 o arquivo MP4 está sendo entregue
404 não há gravação no trecho
422 a solicitação não pode ser atendida; o motivo é indicado no corpo da resposta
503 o número máximo de exportações já está em execução; tentar de novo após Retry-After segundos
401, 403 a autorização falhou; 403 também para um stream cifrado

Motivos do código 422:

  • duração acima do limite export_max_duration_secs;
  • uma faixa inexistente é nomeada, ou uma faixa sem gravação no trecho;
  • legendas são solicitadas, ou uma faixa de serviço;
  • duration é now — a exportação «até o momento atual» não é suportada;

Estatísticas

Os contadores de exportação são entregues junto com as métricas do processo (/streamer/api-v4/runtime/metrics, veja Monitoramento):

  • archive_export_requests_total — número de exportações;
  • archive_export_recorded_secs_total — segundos gravados exportados;
  • archive_export_bytes_total — bytes exportados;
  • archive_export_failures_total — recusas com o rótulo reason.

Próximos passos