FILE¶
media.ingest.file
Описание¶
Вход file делает из локального файла MP4 или Matroska полноценный живой поток: файл проигрывается по кругу. Это продакшн-инструмент для каналов-заставок: технический канал «скоро вернемся», канал-промо, а также матрац при падении источников.
Настройка¶
Настройка выполняется через API central. Фрагмент конфигурации стрима:
streams:
- name: promo
inputs:
- file:
path: /storage/promo.mp4
dvr: {}
Параметры¶
| Параметр | Описание |
|---|---|
path |
путь файла MP4 или Matroska на стримере. Файл должен быть доступен процессу Sapsan. |
Варианты транспорта¶
Локальная файловая система, контейнер MP4 или Matroska. Файл проигрывается циклически; сетевое соединение не требуется.
Поддерживаемые кодеки¶
- H.264
- HEVC / H.265
- AV1
- JPEG (MP4)
- AAC
- AC-3
- E-AC-3
- MPEG Audio (MP4: Layer II / III; Matroska: MP3)
- Opus
MP4 и Matroska — контейнеры. Файлы с расширением .mkv или .webm читает Matroska-ридер; остальные — MP4-ридер. Для Matroska реализовано видео H.264, HEVC и AV1; JPEG относится к MP4. В MP4 AV1 требует av01/av1C, Opus — Opus/dOps, а MPEG Audio определяется по esds или sample entry MP3. Наличие sample entry mp4a само по себе не означает AAC. Приём сжатых кадров из файла не означает их автоматическое перекодирование.
Поведение при ошибках¶
Состояние входа и причина отказа доступны в статистике стрима. При обрыве или отсутствии кадров действует общий механизм повторных подключений и переключения на резерв.
Применение изменений¶
Изменения передаются через API central. При изменении адреса источника или формата захват открывается заново; это может прервать приём на время подключения. После применения проверьте состояние входа и поступление кадров.
Счётчики¶
Ниже — точные имена полей протокольной статистики. counter накапливает события, gauge показывает текущее значение; список включает оба вида. Нулевые поля могут отсутствовать в ответе. API и Prometheus используют разные проекции: весь список не следует ожидать в одном ответе Admin API. Доступ к детализации зависит от лицензии на счётчики.
Общие показатели входа: bytes, frames, errors, warnings. Они суммируют данные протокола, поэтому складывать их с протокольными счётчиками повторно не нужно.
FilePlay¶
| Поле | Тип |
|---|---|
bytes |
counter |
frames |
counter |
memory_bytes |
gauge |
Прочее¶
Как подготовить файл через ffmpeg¶
Чтобы MBR-файл проигрывался бесшовно, все качества должны быть идеально выровнены: одинаковые таймстемпы и ключевые кадры в одних и тех же местах. Это достигается одним прогоном ffmpeg с фильтром split:
ffmpeg -y -i source.mkv \
-filter_complex "\
[0:v:0]split=3[vhi][vme][vlo]; \
[vhi]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,setpts=PTS-STARTPTS[v1]; \
[vme]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,setpts=PTS-STARTPTS[v2]; \
[vlo]scale=960:540:force_original_aspect_ratio=decrease,pad=960:540:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,setpts=PTS-STARTPTS[v3]" \
-map "[v1]" -c:v:0 libx264 -b:v:0 6000k -g:v:0 100 -keyint_min:v:0 100 \
-sc_threshold:v:0 0 -x264-params:v:0 "scenecut=0:open_gop=0" \
-map "[v2]" -c:v:1 libx264 -b:v:1 3000k -g:v:1 100 -keyint_min:v:1 100 \
-sc_threshold:v:1 0 -x264-params:v:1 "scenecut=0:open_gop=0" \
-map "[v3]" -c:v:2 libx264 -b:v:2 1200k -g:v:2 100 -keyint_min:v:2 100 \
-sc_threshold:v:2 0 -x264-params:v:2 "scenecut=0:open_gop=0" \
-map 0:a:0 -c:a:0 aac -b:a:0 192k -ac 2 -ar 48000 \
-metadata:s:v:0 title="1080p" -metadata:s:v:1 title="720p" -metadata:s:v:2 title="540p" \
-metadata:s:a:0 language=rus \
-movflags +faststart \
promo.mp4
Что здесь принципиально:
- один прогон, один источник,
split— все качества получают одинаковые таймстемпы; setpts=PTS-STARTPTS— таймлайн каждого качества начинается с нуля;- одинаковый
fpsво всех качествах; - жесткий GOP:
-g=-keyint_min,-sc_threshold 0иscenecut=0:open_gop=0— ключевые кадры строго каждые N кадров в одних и тех же местах, кодировщик не имеет права вставлять их по смене сцены; - аудио AAC 48 кГц стерео;
-movflags +faststart— индекс в начале файла;-metadata:s:v title=.../language=...— подписи качеств и языки дорожек попадают в плейлисты.
Рабочий полный пример с несколькими аудиодорожками лежит в репозитории sapsan: storage/king.sh.
Проверка¶
Откройте http://server/streaming/v/promo/index.m3u8 — в мастер-плейлисте должны быть все качества, переключение между ними не должно вызывать рывков.