Skip to content

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 — в мастер-плейлисте должны быть все качества, переключение между ними не должно вызывать рывков.

Что дальше