Аппаратное транскодирование на Nvidia NVENC
Транскодирование видео на NVIDIA Nvenc
Flussonic Media Server умеет кодировать видео, используя GPU на видеокартах NVIDIA. Список поддерживаемых видеокарт можно найти на сайте Nvidia.
Также в системе должен быть установлен драйвер Nvidia версии выше 400.
Caution
При использовании NVIDIA Nvenc наш транскодер может обрабатывать 10-битные H.265 (HEVC) потоки.
Установка драйвера
Драйвер устанавливается из соответствующего пакета.
Ubuntu 18.04:
apt-get install nvidia-460 --no-install-recommends
В sources.list
должен быть включен компонент non-free
.
Для других системах можно установить драйвер с официального сайта Nvidia. Инструкция по установке драйвера для Ubuntu
Для работы с большим количеством транскодируемых потоков может потребоваться увеличение лимита на открытые файлы. Сделать это можно командой: ulimit -n 4096
Добавьте в файл следующие строки в файл: /etc/security/limits.conf:
* hard nofile 4096
* hard nofile 4096
Включение транскодера
Настройки транскодера можно задать:
- В конфигурационном файле Flussonic /etc/flussonic/flussonic.conf в опциях потока, используя директиву
transcoder
с разными опциями. - В интерфейсе администратора в Media > выбрать поток > Transcoder.
Для включения аппаратного кодирования с использованием Nvenc необходимо прописать опцию hw=nvenc
:
transcoder vb=2048k hw=nvenc ab=128k
Выбор кодека
По умолчанию используется H.264. При кодировании на Nvenc вы можете использовать H.265 (HEVC):
transcoder vb=2048k hw=nvenc vcodec=hevc ab=128k
Поддержка потоков с 10-битной глубиной цвета
Транскодер Flussonic может работать с 10-битными H.265 (HEVC) потоками при использовании NVIDIA Nvenc. Для этого необходимо использовать опцию pix_fmt
и указать необходимый пиксельный формат.
Возможны следующие преобразования (на входе -> на выходе):
- 10-bit HEVC -> 8-bit HEVC
vb=3000k vcodec=hevc pix_fmt=yuv420p ab=128k
- 10-bit HEVC -> 8-bit H.264
vb=3000k pix_fmt=yuv420p ab=128k
- 10-bit HEVC -> 10-bit HEVC
vb=3000k vcodec=hevc ab=128k
- 8-bit HEVC или H.264 -> 10-bit HEVC
vb=3000k vcodec=hevc pix_fmt=yuv420p10 ab=128k
Необходимо использовать драйвера NVIDIA - версии выше 400, и версию Ubuntu - 18.04 или выше.
Выбор видеокарты
Вручную
Если в системе установлено несколько видеокарт, то можно выбрать какую из них использовать для транскодирования. Для этого используется опция deviceid
:
transcoder vb=2048k hw=nvenc deviceid=2 ab=128k
Номер видеокарты можно узнать при помощи команды nvidia-smi
. По умолчанию используется первая видеокарта deviceid=0
.
Автоматически
Если у вас много потоков, то Flussonic поможет автоматически распределить их между видеокартами для транскодирования. Автоматическое распределение потоков происходит на основании анализа загрузки карты и потребления видеопамяти.
Включить распределение потоков между GPU можно в конфигурационном файле, указав в transcoder
опцию deviceid=auto
для каждого потока:
transcoder vb=2048k hw=nvenc deviceid=auto ab=128k
Обрезка видео
Опция crop
позволяет обрезать видео. Указывается отдельно для каждого видеопотока.
Использование: crop=x:y:width:height
, где:
x:y
— координаты левого верхнего угла выходного видео в пределах размеров входного видео,width
— ширина выходного видеоheight
— высота выходного видео.
Пример:
transcoder vb=2048k hw=nvenc crop=0:0:100:100 ab=128k
Декодирование на CPU
По умолчанию, декодирование также происходит на GPU. Чтобы использовать для декодирования центральный процессор, вместо hw=nvenc
укажите hw=nvenc2
:
transcoder vb=2048k hw=nvenc2 ab=128k
Деинтерлейсинг
Деинтерлейсинг (устранение чересстрочности) при использовании nvenc
происходит по умолчанию. Но можно указать определенный метод при помощи опции deinterlace
. Например, добавьте deinterlace=yadif
, чтобы применить метод CUDA yadif:
stream test {
input file://vod/test.ts;
transcoder vb=4000k ab=128k deinterlace=yadif hw=nvenc;
}
Все доступные для NVIDIA Nvenc методы можно увидеть в UI в настройках транскодера для потока, в поле Deinterlace mode.
В случае nvenc2
(использование CPU) деинтерлейсинг следует включить с помощью опции deinterlace=yes
.
Для отключения дорогостоящего деинтерлейса укажите deinterlace=0
.
Прочие параметры, такие как size
, preset
, bframes
, level
, используются аналогично CPU транскодеру.
Возможные значения параметра preset
: veryfast
, medium
, slow
.
Статистика производительности Nvidia
Вы можете собирать статистику о работе GPU Nvidia, если включите сохранение статистики в базе данных Pulse. Чтобы начать сохранять данные, добавьте в файл конфигурации Flussonic следующую директиву:
nvidia_monitor true;
Чтобы прекратить сохранять статистику по Nvidia, обновите конфиг:
nvidia_monitor false;
Чтобы визуализировать данные, составьте запрос и выполните его в интерфейсе администратора в разделе Pulse, поле Custom query:
Note
Cтатистика о работе GPU (GPU usage, GPU temperature, Decoder usage, Encoder usage) показывается по умолчанию. Вам больше не нужно составлять и выполнять запросы в поле Custom Query. Необходимо, чтобы было подключено хотя бы одно устройство nvenc
и добавлена директива nvidia_monitor true;
в конфигурационный файл Flussonic.
Графики выглядят следующим образом:
В запросе используйте основные метрики (метрики температуры могут не поддерживаться видеокартой):
gpu_pwr
— энергопотребление (в Вт)gpu_temp
— температура графического процессора (в градусах Цельсия)gpu_sm
— использование SM (streaming multiprocessor) в %gpu_mem
— использование памяти в %gpu_enc
— использование энкодера в %gpu_dec
— использование декодера в %gpu_usedmem
— количество используемой видеопамяти в байтах или килобайтах.
Пример запроса:
sum:1m-avg:gpu_dec{from=-2h,gpu=nv0}
Другие метрики:
gpu_mclk
,gpu_pclk
— частота памяти и процессора (в МГц)gpu_pviol
,gpu_tviol
— превышение энергопотребления (в %) и превышение температурного режима (в виде булева значения)gpu_fb
,gpu_bar1
— использование буфера кадров и памяти Bar1 (в Мбайтах)gpu_sbecc
,gpu_dbecc
— ECC (количество агрегированных single-bit и double-bit ошибок ECC) и количество ошибок воспроизведения PCIegpu_pci
,gpu_rxpci
,gpu_txpci
— PCIe Rx и Tx пропускная способность в Мбайт/c (для поколений Maxwell и выше).
Если у Вас возникнет необходимость сохранить графики в качестве изображений (PNG), то это можно сделать, нажав на кнопку Save Pulse as image на вкладке Pulse: