Репликация архива¶
media.dvr.replication
Репликация сохраняет дополнительные копии архивных фрагментов на другом стримере. Прозрачный просмотр истории, которая остаётся на прежних серверах после переноса камеры, описан в удалённом доступе к архиву.
Типовые задачи, которые это решает:
- миграция на новый сервер без потери истории — новый пишет свежий архив, старый хранит прошлое;
- чтение архива с серверов-реплик;
- восстановление после замены диска.
В кластере авторизацию запросов между серверами обеспечивает лейаутер в central. Он формирует серверные настройки взаимодействия; вручную выдавать отдельные разрешения для каждой пары серверов не требуется.
Настройка¶
streams:
- name: cam1
inputs:
- rtsp:
url: rtsp://10.0.0.5/stream0
dvr: {}
remotes:
- url: http://old-server:5080
timeout_ms: 5000
| Параметр | Описание |
|---|---|
url |
адрес удаленного сервера Sapsan, на котором есть архив этого потока |
timeout_ms |
таймаут запросов к удаленному серверу |
Удаленных серверов может быть несколько — Sapsan опросит все.
Ленивая репликация¶
При настроенной записи DVR и наличии архивных дисков прочитанные удалённые исторические фрагменты могут сохраняться в локальный архив. Шифротекст и фрагменты у живого края в такую запись не входят. Локально постепенно появляются те участки чужой истории, которые смотрят зрители; ошибка их сохранения не мешает отдаче зрителю.
Репликация пишет чужую историю на архивные диски и держит ее там до зачистки по ретенции. Если сервер должен не переносить архив к себе, а лишь экономить сеть на популярном — это кэш архива: отдельные кэш-диски, вытеснение по давности обращения и работа без архивных дисков вовсе.
Поведение при сбоях¶
- Если удаленный сервер недоступен, а данные есть локально — проигрывание продолжается, проблема только логируется.
- Sapsan запоминает, каких диапазонов на удаленном сервере нет (negative cache), и не опрашивает его повторно за отсутствующими данными.
- Init-фрагменты удаленных потоков кешируются.
Как достигается бесшовность¶
При каждом обращении к архиву Sapsan объединяет локальные и удаленные данные:
- Диапазоны архива — объединяются доступные интервалы всех серверов. Реальные промежутки без записи сохраняются.
- Плейлисты — списки фрагментов локального DVR и удалённых серверов объединяются, сортируются и дедуплицируются. Отсутствующие записи при этом не восстанавливаются.
- Фрагменты — читаются каскадом: live-буфер → локальный DVR → удаленный сервер. URL фрагмента для плеера одинаковый независимо от того, где лежат данные.
Это возможно благодаря стабильной адресации: фрагмент определяется именем стрима, дорожкой и целочисленным timestamp с его timescale. Адрес сохраняется на всех серверах при репликации и кластеризации, поэтому объединение архивов не требует пересчёта временной шкалы.