Выгрузка отрезка архива¶
Отрезок записанного архива скачивается одним файлом 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.