Skip to content

Выгрузка отрезка архива

Отрезок записанного архива скачивается одним файлом MP4, который открывается в обычных проигрывателях, например в VLC. Файл собирается из архива в момент запроса, заранее ничего готовить не нужно.

Выгрузка работает только у потоков с включенной записью (dvr).

Адрес выгрузки

http://server/streaming/v/<stream>/archive-<from>-<duration>.mp4
  • from — начало отрезка, UTC в секундах;
  • duration — длительность отрезка в секундах.

Например, archive-1789546139-600.mp4 — десять минут архива начиная с указанного момента.

Если у потока настроена авторизация, токен передается так же, как для проигрывания архива, например ?token=<token> — см. Авторизация.

Выбор дорожек

Без параметров в файл попадают все видео- и аудиодорожки отрезка. Нужные дорожки выбираются параметром filter.tracks:

http://server/streaming/v/<stream>/archive-<from>-<duration>.mp4?filter.tracks=v1a1

Дорожки обозначаются так же, как в плейлистах: v1, v2 — видео, a1 — аудио. Если в файл не попала ни одна видеодорожка, он отдается с типом audio/mp4.

Субтитры и служебные дорожки в выгрузке пока не поддерживаются, запрос такой дорожки отклоняется с кодом 422.

Что попадает в файл

  • Начало — файл начинается с ключевого кадра не позже запрошенного момента, поэтому бывает на несколько секунд длиннее запрошенного. Если начало попало в разрыв записи, файл начинается с первого ключевого кадра после разрыва.
  • Разрывы записи — склеиваются: в файле только записанное время, и он может оказаться короче запрошенного отрезка.
  • Смена параметров потока — если в отрезке менялись параметры дорожки, например разрешение камеры, файл заканчивается на месте смены.

Имя файла сервер предлагает в заголовке Content-Disposition: <stream>_<ГГГГ-ММ-ДД>_<ЧЧ-ММ-СС>Z_<секунд>s.mp4. Время в имени — UTC, длительность — фактически записанная.

Размер файла известен до скачивания: запрос HEAD на тот же адрес возвращает Content-Length без самого файла.

Настройки

Ограничения задаются в секции dvr сервера:

dvr:
  root: /storage
  export_max_duration_secs: 10800   # предельная длительность одной выгрузки, секунд
  export_max_concurrent: 4          # сколько выгрузок выполняется одновременно
Параметр По умолчанию Описание
export_max_duration_secs 10800 (3 часа) запрос длиннее отклоняется с кодом 422 до чтения архива
export_max_concurrent 4 запрос сверх предела получает 503 с заголовком Retry-After

Нулевое значение не допускается.

Ответы сервера

Код Когда
200 файл отдается
404 в отрезке нет записи
422 запрос нельзя выполнить, причина названа в теле ответа
503 уже выполняется предельное число выгрузок; повторить через Retry-After секунд
401, 403 не пройдена авторизация; 403 также для зашифрованного потока

Причины кода 422:

  • длительность больше предела export_max_duration_secs;
  • названа отсутствующая дорожка или дорожка без записи в отрезке;
  • запрошены субтитры или служебная дорожка;
  • duration задан как now — выгрузка «до текущего момента» не поддерживается;

Статистика

Счетчики выгрузки отдаются вместе с метриками процесса (/streamer/api-v4/runtime/metrics, см. Мониторинг):

  • archive_export_requests_total — число выгрузок;
  • archive_export_recorded_secs_total — выгружено секунд записи;
  • archive_export_bytes_total — выгружено байт;
  • archive_export_failures_total — отказы с меткой reason.

Что дальше