Транскодирование

Транскодирование

Al(co)pac может транскодировать видео-потоки через FFmpeg для совместимости с устройствами, не поддерживающими исходный формат.

Требования

  • FFmpeg установлен на сервере (ставится автоматически при curl-установке)
  • Достаточно CPU и RAM для real-time транскодирования

Конфигурация

{
  "Transcoding": {
    "Enable": true,
    "FFmpeg": "/usr/bin/ffmpeg",
    "TempRoot": "/tmp/lampac-transcode",
    "IdleTimeoutSec": 300,
    "MaxConcurrent": 2,
    "HLS": {
      "SegmentDuration": 6,
      "ListSize": 10
    },
    "Audio": {
      "Codec": "aac",
      "Bitrate": "128k"
    },
    "Subtitle": {
      "Extract": true
    }
  }
}

Параметры

Поле Описание По умолчанию
Enable Включить транскодирование false
FFmpeg Путь к бинарнику FFmpeg /usr/bin/ffmpeg
TempRoot Директория для временных сегментов /tmp
IdleTimeoutSec Таймаут простоя потока (сек) 300
MaxConcurrent Максимум одновременных потоков 2

HLS-параметры

Поле Описание По умолчанию
SegmentDuration Длительность HLS-сегмента (сек) 6
ListSize Количество сегментов в playlist 10

Аудио

Поле Описание По умолчанию
Codec Аудио-кодек aac
Bitrate Битрейт аудио 128k

Субтитры

Поле Описание По умолчанию
Extract Извлекать субтитры из потока true

Как работает

  1. Клиент запрашивает видео в неподдерживаемом формате
  2. Al(co)pac запускает FFmpeg для транскодирования в HLS
  3. HLS-сегменты отдаются клиенту в реальном времени
  4. После IdleTimeoutSec простоя процесс завершается и временные файлы удаляются
Транскодирование нагружает CPU. Рекомендуется ограничивать MaxConcurrent в зависимости от мощности сервера.

Поддержка HEVC (H.265)

Транскодирование автоматически определяет кодек видео (H.264 или HEVC) и применяет правильный bitstream filter:

  • H.264h264_mp4toannexb
  • HEVC (H.265)hevc_mp4toannexb

Определение происходит через ffprobe при старте потока. Если кодек не удаётся определить, используется H.264 по умолчанию.

Если ранее при транскодировании HEVC-видео (4K контент Mirage и др.) возникала ошибка 502 с сообщением Codec 'hevc' is not supported by the bitstream filter 'h264_mp4toannexb' — обновите сервер, проблема исправлена.

Новое в 0.5

0.5 — крупное обновление транскодера: мультиаудио, HDR/DV, trickplay, ASS-субтитры, ABR и выносное транскодирование.

Мультиаудио — горячее переключение озвучек

Раньше смена звуковой дорожки означала перезапуск транскодера и повторное чтение источника с нуля. Теперь все дорожки складываются «на полку» без перекодирования (-c copy, нулевая нагрузка на CPU), а активная кодируется в AAC на лету. Master-плейлист содержит полноценную EXT-X-MEDIA AUDIO-группу — плеер переключает озвучку мгновенно, без прерывания просмотра.

HDR и Dolby Vision

  • При транскодировании HDR/DV-контента в SDR применяется корректный тонмаппинг (zscale + hable) — вместо блеклой/пересвеченной картинки.
  • Master-плейлист прописывает VIDEO-RANGE и кодеки в формате RFC 6381 (включая Dolby Vision) — совместимые плееры получают HDR как есть, остальные — честный SDR.

Trickplay

Миниатюры-превью при перемотке — плеер показывает кадр на позиции, куда вы мотаете.

ASS/SSA-субтитры

Продвинутые субтитры со стилями и караоке рендерятся через JASSUB без выжигания в видео.

ABR (мультикачество)

Транскодер отдаёт master-плейлист с несколькими вариантами качества — плеер сам выбирает подходящее под канал.

Выносное транскодирование

Транскодирование можно вынести на отдельный сервер: основной сервер принимает запросы и раздаёт HLS, а тяжёлую работу выполняет удалённый «бокс». Полезно, когда основной сервер — слабая VPS.

  • Устойчивость к обрывам источника: переподключение с корректными заголовками (Referer и т.п.).
  • Защита от OOM: тяжёлые задачи (4K Dolby Vision) не запускаются, если памяти недостаточно.
  • Отдельный пул воркеров — транскодирование не душит остальные функции сервера.

Включение

Через вкладку Плагины в админ-панели или в init.conf.