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ótuloreason.