Reproducción del archivo¶
El archivo grabado se entrega por los mismos protocolos que el directo: HLS y DASH desde la cabecera. No hay una dirección «de archivo» aparte: la ventana grabada se fija con parámetros de la dirección habitual, y el retroceso tiene su propio camino.
La reproducción funciona en un stream con la grabación activada. En un stream sin grabación, la petición del archivo se rechaza. La profundidad de retención fija hasta dónde se puede retroceder: una petición más allá del comienzo del archivo se sirve desde el comienzo del archivo, no como una respuesta vacía.
Retroceso¶
Una lista retrocedida N segundos desde el momento actual:
http://<dirección-de-la-cabecera>/streaming/v/<stream>/rewind/<segundos>/index.m3u8
Por ejemplo, rewind/3600/ es una hora atrás.
La lista empieza en el archivo y continúa con el directo: en la unión no hay duplicados ni saltos, y el reproductor no nota la transición. La recarga bloqueante de LL-HLS sigue funcionando. Los huecos de la grabación se marcan con el EXT-X-DISCONTINUITY estándar.
Lo mismo existe para MPEG-TS HLS, bajo el segmento ts/:
http://<dirección-de-la-cabecera>/streaming/v/<stream>/ts/rewind/<segundos>/index.m3u8
Ventana por tiempo absoluto¶
La ventana grabada se fija con los parámetros from y to, en UTC y milisegundos:
http://<dirección-de-la-cabecera>/streaming/v/<stream>/index.m3u8?from=<ms>&to=<ms>
http://<dirección-de-la-cabecera>/streaming/v/<stream>/Manifest.mpd?from=<ms>&to=<ms>
- Sin
fromla dirección entrega el directo; confromempieza el archivo, y la lista HLS pasa a ser cerrada: describe exactamente la ventana grabada y no crece; - sin
toel borde derecho de la ventana queda abierto hacia delante.
En DASH los huecos de la grabación se convierten en Periods, y la escala de tiempo se elige con el parámetro timeline:
compact— por omisión: los periodos se suceden sin cortes y el tiempo del manifiesto es continuo;wallclock— los huecos se conservan, y la posición de la ventana en el manifiesto coincide con el tiempo de reloj.
Por ejemplo, una ventana con la escala de reloj:
http://<dirección-de-la-cabecera>/streaming/v/<stream>/Manifest.mpd?from=<ms>&to=<ms>&timeline=wallclock
Ventanas grabadas¶
Qué tramos están grabados lo entrega una petición aparte. El borde del archivo y su límite inferior:
http://<dirección-de-la-cabecera>/streaming/dvr-range/<stream>
{"from": 1789546139000, "to": 1789553339000}
Ambos valores están en UTC y milisegundos.
Las ventanas de grabación, página a página:
http://<dirección-de-la-cabecera>/streaming/dvr-ranges/<stream>?resolution=<ms>&limit=<cantidad>&cursor=<cursor>
{
"estimated_count": 2,
"next": "MTc4OTU0NjEzOTAwMA",
"ranges": [
{"opened_at": 1789546139000, "closed_at": 1789549739000},
{"opened_at": 1789550400000, "closed_at": 1789553339000}
]
}
opened_atyclosed_at— el comienzo y el final de una ventana de grabación continua, en UTC y milisegundos;resolution— con qué precisión se unen las ventanas vecinas, en milisegundos. Cero significa la precisión de la propia grabación;limit— tamaño de página, 100 por omisión, 10000 como máximo;cursor— el valornextde la página anterior. El cursor es opaco: su forma interna no forma parte del contrato;nextfalta en la última página.
Las ventanas se pueden filtrar por tiempo: opened_at_gte, opened_at_lte, closed_at_gte, todos en UTC y milisegundos. Un valor que parece segundos de época se rechaza con 422: multiplicado por 1000 en silencio, devolvería una respuesta vacía del año 1970 en lugar de un error.
Previsualizaciones de fotogramas¶
- Un fotograma JPEG de la pista de imagen en un momento dado:
text
http://<dirección-de-la-cabecera>/streaming/v/<stream>/image/<pista>/<ms>.jpg
- Un fragmento MP4 corto desde un fotograma clave:
text
http://<dirección-de-la-cabecera>/streaming/dvr-preview-mp4/<stream>/<ms>
Ambas direcciones leen el archivo: el fotograma se arma con el fragmento más cercano, no se sirve desde una caché preparada.
La página del reproductor¶
Para comprobar el archivo en el navegador sin armar direcciones a mano está la página del reproductor:
http://<dirección-de-la-cabecera>/streaming/embed/<stream>?dvr=true&from=<ms>&to=<ms>
dvr=trueabre la línea de tiempo del archivo. Sin el parámetro la página muestra el directo: en un stream sin grabación vuelve por sí misma al reproductor en vivo;fromytofijan la ventana de la línea de tiempo, en UTC y milisegundos.
Estas direcciones comprueban la señal, no la entregan a espectadores: el balanceo, la autorización de espectadores y la contabilidad de sesiones empiezan donde termina la cabecera. Los requisitos del reproductor son los mismos que en el directo.
Qué sigue¶
- Exportación del archivo — un tramo en un solo archivo MP4.
- Grabación y lectura — dónde se escribe el archivo y cómo se comprueba la grabación.
- Subtítulos y teletexto — qué entra en el archivo junto con el vídeo.