Аппаратное транскодирование на NVIDIA NVENC¶
Транскодирование видео на NVIDIA NVENC¶
Flussonic Media Server умеет кодировать видео, используя GPU на видеокартах NVIDIA. Список поддерживаемых видеокарт можно найти на сайте Nvidia.
Также в системе должен быть установлен драйвер Nvidia версии выше 400.
При использовании NVIDIA Nvenc наш транскодер может обрабатывать 10-битные потоки.
Для транскодирования видео в кодеке AV1 требуется видеокарта NVIDIA Ada Lovelace и выше.
Note
Некоторые видеокарты Nvidia NVENC имеют ограничение на количество одновременных сессий (транкодируемых потоков). Если с помощью видеокарты Nvidia NVENC транскодируется слишком много потоков, во Flussonic UI будет показано соответствующее предупреждение. Чтобы посмотреть максимально допустимое количество одновременных сессий для вашей карты, см. сайт NVIDIA. Кроме того, если карта «не соответствует требованиям» (unqualified), то ограничение количества сессий может быть «на сервер», а не только «на карту»; для этого ознакомьтесь с политикой NVIDIA.
Установка драйвера¶
Драйвер устанавливается из соответствующего пакета.
Ubuntu 20.04:
apt-get install nvidia-driver-515-server --no-install-recommends
В sources.list
должен быть включен компонент non-free
.
Для других системах можно установить драйвер с официального сайта Nvidia. Инструкция по установке драйвера для Ubuntu
Для работы с большим количеством транскодируемых потоков может потребоваться увеличение лимита на открытые файлы. Сделать это можно командой:
ulimit -n 4096
Добавьте в файл следующие строки в файл /etc/security/limits.conf
:
* soft 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
- AV1:
transcoder vb=2048k hw=nvenc vcodec=av1 ab=128k
Поддержка потоков с 10-битной глубиной цвета¶
Транскодер Flussonic может работать с 10-битными потоками при использовании NVIDIA Nvenc. Эта функция поддерживается для всех вариантов кодеков на входе и выходе.
Чтобы транскодировать видео из не-10-битного в 10-битное, используйте значение опции pix_fmt
, оканчивающееся на p10
. Список всех доступных значений см. в схеме API.
Например, для транскодирования 8-bit HEVC/H.264/AV1 в 10-bit HEVC задайте опции транскодера так:
transcoder vb=3000k vcodec=hevc pix_fmt=yuv420p10 ab=128k
Необходимо использовать драйвера NVIDIA версии выше 400, а версию Ubuntu — 18.04 или выше.
Выбор видеокарты¶
Вручную¶
Если в системе установлено несколько видеокарт, то можно выбрать какую из них использовать для транскодирования. Для этого используется опция deviceid
:
transcoder vb=2048k hw=nvenc deviceid=1 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=128
Декодирование на 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
.
Чтение телетекста из VBI при транскодировании SDI-потока на NVIDIA NVENC¶
Flussonic может читать телетекст из VBI при транскодировании SDI-источника с помощью NVIDIA NVENC. Примеры конфигурации смотрите в статье: Примеры конфигураций для чтения телетекста из разных источников.
Статистика производительности NVIDIA¶
Вы можете собирать статистику о работе GPU Nvidia, если включите сохранение статистики в базе данных Pulse. Чтобы начать сохранять данные, добавьте в файл конфигурации Flussonic следующую директиву:
nvidia_monitor true;
Чтобы прекратить сохранять статистику по Nvidia, обновите конфиг:
nvidia_monitor false;
Чтобы визуализировать данные, зайдите в интерфейс администратора, перейдите на страницу Pulse в боковом меню и составьте запрос в поле Custom pulse query:
Note
Cтатистика о работе GPU (GPU usage, GPU temperature, Decoder usage, Encoder usage) показывается по умолчанию. Вам больше не нужно составлять и выполнять запросы в поле Custom pulse query. Для этого необходимо, чтобы было подключено хотя бы одно устройство nvenc
и добавлена директива nvidia_monitor true;
в конфигурационный файл Flussonic.
Индикаторы IN: и OUT: показывают полезный трафик 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 (см. скриншот выше).