Транскодирование
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 |
Как работает
- Клиент запрашивает видео в неподдерживаемом формате
- Al(co)pac запускает FFmpeg для транскодирования в HLS
- HLS-сегменты отдаются клиенту в реальном времени
- После
IdleTimeoutSecпростоя процесс завершается и временные файлы удаляются
MaxConcurrent в зависимости от мощности сервера.Поддержка HEVC (H.265)
Транскодирование автоматически определяет кодек видео (H.264 или HEVC) и применяет правильный bitstream filter:
- H.264 →
h264_mp4toannexb - HEVC (H.265) →
hevc_mp4toannexb
Определение происходит через ffprobe при старте потока. Если кодек не удаётся определить, используется H.264 по умолчанию.
Codec 'hevc' is not supported by the bitstream filter 'h264_mp4toannexb' — обновите сервер, проблема исправлена.Новое в 0.5
Мультиаудио — горячее переключение озвучек
Раньше смена звуковой дорожки означала перезапуск транскодера и повторное чтение источника с нуля. Теперь все дорожки складываются «на полку» без перекодирования (-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.