Exportación de un segmento del archivo¶
Un segmento del archivo grabado se descarga como un único archivo MP4 que se abre en los reproductores habituales, por ejemplo en VLC. El archivo MP4 se ensambla a partir de la grabación en el momento de la solicitud; no hace falta preparar nada de antemano.
La exportación funciona solo en streams con la grabación activada (dvr).
URL de exportación¶
http://server/streaming/v/<stream>/archive-<from>-<duration>.mp4
from— inicio del segmento, UTC en segundos;duration— duración del segmento en segundos.
Por ejemplo, archive-1789546139-600.mp4 son diez minutos de archivo a partir del momento indicado.
Si el stream requiere autorización, el token se pasa igual que para la reproducción del archivo, por ejemplo ?token=<token> — consulte Autorización.
Selección de pistas¶
Sin parámetros, el archivo MP4 recibe todas las pistas de vídeo y audio del segmento. Las pistas se eligen con el parámetro filter.tracks:
http://server/streaming/v/<stream>/archive-<from>-<duration>.mp4?filter.tracks=v1a1
Las pistas se nombran igual que en las listas de reproducción: v1, v2 son vídeo, a1 es audio. Si ninguna pista de vídeo entra en el archivo MP4, se entrega como audio/mp4.
Los subtítulos y las pistas de servicio aún no se admiten en la exportación; una solicitud de una pista así se rechaza con 422.
Qué entra en el archivo MP4¶
- Inicio — el archivo MP4 empieza en el fotograma clave anterior o igual al momento solicitado, por lo que puede durar unos segundos más de lo pedido. Si el inicio cae en un hueco de la grabación, empieza en el primer fotograma clave después del hueco.
- Huecos de la grabación — se unen: el archivo MP4 contiene solo tiempo grabado y puede ser más corto que el segmento solicitado.
- Cambio de parámetros del stream — si los parámetros de una pista cambiaron dentro del segmento, por ejemplo la resolución de la cámara, el archivo MP4 termina en el punto del cambio.
El servidor propone el nombre del archivo en la cabecera Content-Disposition: <stream>_<AAAA-MM-DD>_<HH-MM-SS>Z_<segundos>s.mp4. La hora del nombre está en UTC y la duración es la realmente grabada.
El tamaño se conoce antes de descargar: una solicitud HEAD a la misma URL devuelve Content-Length sin el archivo.
Configuración¶
Los límites se definen en la sección dvr del servidor:
dvr:
root: /storage
export_max_duration_secs: 10800 # duración máxima de una exportación, segundos
export_max_concurrent: 4 # cuántas exportaciones se ejecutan a la vez
| Parámetro | Por defecto | Descripción |
|---|---|---|
export_max_duration_secs |
10800 (3 horas) |
una solicitud más larga se rechaza con 422 antes de leer el archivo |
export_max_concurrent |
4 |
una solicitud por encima del límite recibe 503 con la cabecera Retry-After |
No se admite el valor cero.
Respuestas del servidor¶
| Código | Cuándo |
|---|---|
200 |
se está entregando el archivo MP4 |
404 |
no hay grabación en el segmento |
422 |
la solicitud no se puede cumplir; el motivo se indica en el cuerpo de la respuesta |
503 |
ya se ejecuta el número máximo de exportaciones; reintentar tras Retry-After segundos |
401, 403 |
la autorización no se superó; 403 también para un stream cifrado |
Motivos del código 422:
- duración por encima del límite
export_max_duration_secs; - se nombra una pista inexistente, o una pista sin grabación en el segmento;
- se solicitan subtítulos, o una pista de servicio;
durationesnow— la exportación «hasta el momento actual» no está soportada;
Estadísticas¶
Los contadores de exportación se entregan junto con las métricas del proceso (/streamer/api-v4/runtime/metrics, consulte Monitorización):
archive_export_requests_total— número de exportaciones;archive_export_recorded_secs_total— segundos grabados exportados;archive_export_bytes_total— bytes exportados;archive_export_failures_total— rechazos con la etiquetareason.