Skip to content

El archivo de otro servidor (remotes)

Sapsan puede reproducir sin costura un archivo que está grabado (o se grabó en su día) en otro servidor. El stream enumera los servidores remotos — y sus archivos se convierten en una extensión del local: el espectador ve un archivo continuo único y nunca sabe de dónde llegan físicamente los datos.

Las tareas típicas que esto resuelve:

  • migrar a un servidor nuevo sin perder historia — el nuevo graba el archivo fresco, el viejo conserva el pasado;
  • leer el archivo de servidores réplica;
  • recuperarse tras sustituir un disco.

Configuración

streams:
  - name: cam1
    inputs:
    - rtsp:
        url: rtsp://10.0.0.5/stream0
    dvr: {}
    remotes:
    - url: http://old-server:5080
      timeout_ms: 5000
Parámetro Descripción
url dirección del servidor Sapsan remoto donde está el archivo de este stream
timeout_ms tiempo de espera de las solicitudes al servidor remoto

Puede haber varios servidores remotos — Sapsan los interroga todos.

Cómo se logra la unión sin costura

En cada acceso al archivo Sapsan fusiona los datos locales y los remotos:

  • Fronteras del archivo — la unión de los rangos de todos los servidores: el inicio más temprano y el fin más tardío. En las interfaces y en la API el stream se ve como un archivo continuo único.
  • Playlists — las listas de fragmentos del DVR local y de todos los servidores remotos se fusionan, se ordenan y se deduplican. En la unión de dos archivos no hay ni costura, ni hueco, ni duplicados.
  • Fragmentos — se leen en cascada: búfer del directo → DVR local → servidor remoto. La URL del fragmento es la misma para el reproductor independientemente de dónde vivan los datos.

Esto es posible gracias al direccionamiento absoluto de fragmentos de Sapsan: el nombre de un fragmento es su hora UTC, así que el mismo fragmento se llama igual en todos los servidores, y unir archivos no exige recalcular la línea de tiempo.

Replicación diferida

Un fragmento leído de un servidor remoto se escribe automáticamente en el archivo local. El DVR local va «absorbiendo» los trozos de historia ajena que los espectadores de verdad ven — y con el tiempo deja de buscarlos por la red. Un fallo de esa escritura nunca interfiere con la entrega al espectador.

La replicación escribe la historia ajena en los discos de archivo y la mantiene ahí hasta que la retención la limpia. Si el servidor no debe llevarse el archivo consigo, sino solo ahorrar red en lo popular, eso es la caché del archivo: discos de caché aparte, desalojo por antigüedad del último acceso y funcionamiento sin discos de archivo en absoluto.

Comportamiento ante fallos

  • Si un servidor remoto no está accesible pero los datos existen localmente, la reproducción continúa; el problema solo se registra en el log.
  • Sapsan memoriza qué rangos faltan en un remoto (caché negativa) y no vuelve a interrogarlo por los datos ausentes.
  • Los fragmentos init de los streams remotos se cachean.

Note

TODO: autorización de solicitudes entre servidores, recomendaciones de tiempos de espera, límites (cuántos remotes son razonables), interacción con config_external.

Siguientes pasos