перейти к содержанию

Аппаратное ускорение

Jellyfin поддерживает аппаратное ускорение (HWA) кодирования / декодирования видео с использованием FFMpeg. FFMpeg и Jellyfin могут поддерживать несколько реализаций аппаратного ускорения, таких как Intel Quicksync (QSV), AMD AMF, nVidia NVENC / NVDEC, OpenMax OMX и MediaCodec через API ускорения видео.

VAAPI - это API ускорения видео, который использует libva для взаимодействия с локальными контроллерами для обеспечения HWA. QSV использует модифицированную (разветвленную) версию VAAPI и связывает ее с libmfx и его проприетарными драйверами (список QSV-совместимых процессоров).

<figcaption class=Аппаратное ускорение"width =" 832 "height =" 451 "/>Аппаратное ускорение

ОС Рекомендуемое ускорение HW LinuxQSV, NVENC, VAAPI WindowsQSV, NVENC, AMF, VAAPIMacOSNone (скоро появится VideoToolbox) AndroidMediaCodec, OMXRPiOMX

Сравнение видеокарт с использованием HWA

NVIDIA использует официальный список ffmpeg. Не все карты были проверены. Эти драйверы рекомендуются для Linux и Windows. Вот официальный список видеокарт NVIDIA для поддерживаемых кодеков. Пример работы Ubuntu с NVENC. H264 10-bit не поддерживает ускорение NVIDIA.

Список кодеков, поддерживаемых VAAPI.

Поддержка AMF Linux пока не является официальной, и карты AMD GFX должны использовать VAAPI в Linux.

Дзен это просто процессор. Нет аппаратного ускорения для любой формы декодирования / кодирования видео. Вам понадобится APU или dGPU для аппаратного ускорения.

Тесты Intel QSV для Linux.

В Windows вы можете использовать библиотеки DXVA2 / D3D11VA для декодирования и библиотеку libmfx для кодирования.

Для CentOS могут потребоваться дополнительные драйверы для QSV.

Вот дополнительная информация, чтобы узнать больше.

Включение аппаратного ускорения

Параметры аппаратного ускорения можно найти на панели администратора в разделе транскодирование , Выберите допустимый параметр аппаратного ускорения в раскрывающемся меню, укажите устройство, если применимо, и установите флажок Включить аппаратное шифрование, чтобы включить шифрование и декодирование, если ваше оборудование поддерживает его.

Аппаратное ускорение сразу доступно для воспроизведения мультимедиа. Нет необходимости перезагружать сервер.

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

Каждый тип аппаратного ускорения, а также каждый тип установки Jellyfin требуют различных параметров конфигурации, прежде чем его можно будет использовать. Всегда лучше обратиться к документации FFMpeg о типе ускорения, который вы выбираете для получения последней информации.

Ускорение в докере

Чтобы использовать аппаратное ускорение в Docker, устройства должны быть перемещены в контейнер. Чтобы увидеть, какие видеоустройства доступны, вы можете запустить sudo lshw -c video или vainfo на вашем компьютере.

примечание

Графические процессоры NVIDIA в настоящее время не поддерживаются в Docker-Compose.

Вы можете использовать Docker Run для запуска сервера с помощью команды, подобной следующей.

Окно запуска: -d --volume / path / to / config: / config --volume / path / to / cache: / cache --volume / path / to / media: / media ~ -user 1000: 1000 --net = хост --restart = если не остановлен --dev / dev / dri / renderD128: / dev / dri / renderD128 --dev / dev / dri / card0: / dev / dri / card0 ~ jellyfin / jellyfin

В качестве альтернативы, вы можете использовать docker-compose с файлом конфигурации, чтобы вам не приходилось запускать длинную команду каждый раз при перезапуске вашего сервера.

версия: "3" сервисы: jellyfin: образ: jellyfin / jellyfin пользователь: 1000: 1000 network_mode: тома "хоста": - / путь / к / конфигурации: / config - / путь / к / кэш: / кэш - / путь / to / media: / media media: устройства # VAAPI - / dev / dri / renderD128: / dev / dri / renderD128 - / dev / dri / card0: / dev / dri / card0 # RPi 4 - / dev / vchiq: / dev / qchiq

Debian Docker Nvidia

Чтобы добиться аппаратного ускорения с помощью докера, необходимо выполнить несколько шагов.

Предпосылки:

https://github.com/nvidia/nvidia-docker/wiki/Installation-(versión-2.0)

GNU / Linux x86_64 с версией ядра; 3.10Docker; = 1.12 NVIDIA GPU с архитектурой; Драйверы NVIDIA Fermi (2.1) ~ = 361,93 (в предыдущих версиях не тестировалось)

Подтвердите, что ваш GPU появляется с этой командой.

lspci | grep VGA

Обновите хост, чтобы не было проблем с устаревшим программным обеспечением.

apt-get update && apt-get dist-upgrade -y

Установите локон, который будет использоваться для загрузки необходимых файлов.

apt-get установить curl

Отредактируйте sources.list в /etc/apt/sources.list и добавьте несвободные вклады в каждый источник по мере необходимости.

deb http://ftp.ch.debian.org/debian/ stretch main

Строка выше должна быть изменена, чтобы соответствовать следующей строке в качестве примера.

deb http://ftp.ch.debian.org/debian/ растянуть основной несвободный вклад

Загрузите и добавьте шрифты контейнера док-станции Nvidia.

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key adddistribution = $ (. / etc / os-release; echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

Снова обновите список пакетов, чтобы загрузить новейшее программное обеспечение, доступное в новом хранилище.

apt-get update

Установите заголовочные файлы linux и выполните следующую команду.

apt-get install linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)

В качестве альтернативы, запустите эту команду, если вы в гонке за совместимость.

apt-get install -t stretch-backports linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)

Установите Nvidia docker2 из репозитория.

apt-get установить nvidia-docker2

Когда будет предложено выбрать вариант обслуживания или установки пакета обслуживания, введите y, чтобы установить версию обслуживания.

После установки вы можете добавить nvidia в качестве среды выполнения по умолчанию: отредактировав /etc/docker/daemon.json следующим образом:

<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}

Перезапустите службы стивидоров, которые в данный момент работают.

sudo pkill -SIGHUP докер

Установите драйверы и зависимости nvidia.

apt-get install -t stretch-backports nvidia-driver libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi

Пожалуйста, перезапустите хост, чтобы применить все изменения.

перезагрузить сейчас

Убедитесь, что ваш драйвер и устройство сопряжения правильно настроены с помощью этого тест-драйва.

nvidia-smidocker run --gpus 0 nvidia / cuda: 9.0-base nvidia-smi

Подтвердите доступ к необходимым ресурсам хоста и стивидора.

ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1

Запустите свой контейнер, добавив эти параметры среды.

-e "NVIDIA_DRIVER_CAPABILITIES = все" -e NVIDIA_VISIBLE_DEVICES = все --runtime = nvidia --gpus all 

Полная команда выполнения будет выглядеть следующим образом.

запуск докера -d --name = jellyfin -e NVIDIA_DRIVER_CAPABILITIES = все -e NVIDIA_VISIBLE_DEVICES = все --gpus all --runtime = nvidia -p 8096: 8096 -p 8920: 8920 -v / config: / config -v / media: / media -v / cache: / cache --restore, если не остановлено ~ jellyfin / jellyfin

Есть несколько специальных шагов при запуске со следующей опцией.

- пользователь 1000: 1000

Возможно, вам придется добавить этого пользователя в группу видео.

usermod -aG видео пользователь

После запуска контейнера вы можете повторно проверить доступ к ресурсам хоста.

docker exec -it jellyfin ldconfig -p | grep cuviddocker exec -it jellyfin ldconfig -p | grep libnvidia-encode.so.1

Теперь перейдите к настройкам воспроизведения Jellyfin, включите Nvidia NVENC и выберите целевые кодеки в зависимости от того, что ваш графический процессор поддерживает для воспроизведения любого файла, который требует транскодирования. Изменение битрейта - хороший способ проверить это.

Просмотрите журналы транскодирования, чтобы убедиться, что все работает правильно.

Поток #0: 0 -----; #0: 0 (h264 (h264_cuvid) -------; h264 (h264_nvenc)) Поток #0: 2 -------; #0: 1 (ac3 (нативный) -------; aac (нативный))<-pre>

Настройка ускорения VAAPI в Debian / Ubuntu из пакетов .deb

Конфигурация VAAPI в Debian / Ubuntu требует некоторой дополнительной настройки, чтобы гарантировать правильность разрешений.

Чтобы проверить информацию VAAPI в вашей системе, установите и запустите vainfo из командной строки.

  1. Настройте VAAPI для вашей системы, следуя соответствующей документации. Убедитесь, что в / dev / dri есть устройство рендеринга, и запишите разрешения и группы, доступные для записи в него, в этом случае рендер: $ ls -l / dev / dritotal 0drwxr-xr-x 2 root 100 13 апр. 16:37 by-pathcrw-rw ---- 1 корневое видео 226, 0 апр. 13 16:37 card0crw-rw ---- 1 корневое видео 226, 1 апр. 13 16:37 card1crw-rw ---- 1 root render 226, 128 Apr 13 16:37 renderD128 Примечание. В некоторых версиях группой может быть видео вместо рендера.
  2. Добавьте пользователя службы Jellyfin к предыдущей группе, чтобы разрешить доступ к процессу Jellyfin FFMpeg к устройству, и перезапустите Jellyfin.
sudo usermod -aG рендер jellyfinsudo systemctl перезапустить jellyfin
  1. Установите ускорение VAAPI на странице «Транскодирование» панели администратора. Введите устройство / dev / dri / renderD128 выше в качестве значения устройства API-интерфейса VA.
  2. Посмотрите фильм и убедитесь, что транскодирование происходит, просмотрев логи ffmpeg-transcode - *. Txt в / var / log / jellyfin и используя radeontop или аналогичные инструменты.

Контейнер LXC или LXD

Это было протестировано с LXC 3.0 и может работать или не работать с более ранними версиями.

Выполните действия, описанные выше, чтобы добавить пользователя jellyfin в группу видео или рендера в зависимости от обстоятельств.

  1. Добавьте свой графический процессор в контейнер.
$ lxc config device add  gpu gpu gid = <gid de su video o grupo de renderización;
  1. Убедитесь, что у вас есть карта внутри контейнера:
$ lxc exec jellyfin - ls -l / dev / dritotal 0crw-rw ---- 1 корневое видео 226, 4 июня 02:13 card0crw-rw ---- 1 корневое видео 226, 4 июня 02:13 controlD64crw -rw ---- 1 root video 226, 128 Jun 4 02:13 renderD128
  1. Установите Jellyfin для использования ускорения видео и укажите его на правильное устройство, если параметр по умолчанию неправильный.
  2. Попробуйте воспроизвести видео, которое требует перекодирования, и запустите следующее, вы должны получить хит.
$ ps aux | grep ffmpeg | Grep Accel
  1. Вы также можете попробовать воспроизвести видео, которое требует транскодирования, и если оно воспроизводится, у вас все хорошо.

Полезные ресурсы:

Raspberry Pi 3 и 4

  1. Добавьте пользователя службы Jellyfin в группу видео, чтобы разрешить процессу Jellyfin FFMpeg доступ к кодировщику, и перезапустите Jellyfin.sudo usermod -aG. для обновления ядра и прошивки.
  2. Выберите OpenMAX OMX в качестве аппаратного ускорения на вкладке «Транскодирование» панели мониторинга сервера.
  3. Измените количество памяти, выделенной для графического процессора. Графический процессор не может одновременно обрабатывать ускоренное декодирование и кодирование. Sudo nano /boot/config.txt Для RPi4 добавьте строку gpu_mem = 320. Подробнее здесь Для RPi3 добавьте строку gpu_mem = 256. Рекомендуется для 4K HEVC. Проверьте разделение между памятью процессора и графического процессора: vcgencmd get_mem arm && vcgencmd get_mem gpu Мониторинг тактовой частоты и скорости процессора: vcgencmd measure_temp && vcgencmd measure_clock arm
примечание

RPi4 в настоящее время не поддерживает HWA-декодирование, только H.264 HWA-кодирование. Требуется активное охлаждение, пассивное охлаждение недостаточно для транскодирования. В тестах RPi3 транскодирование не работало достаточно быстро, чтобы работать в режиме реального времени, потому что размер видео изменялся.

Проверка транскодов

Чтобы убедиться, что вы используете соответствующие библиотеки, выполните эту команду для своей записи транскодирования. Это можно найти в Панели администратора> Журналы и в / var / log / jellyfin, если это происходит через репозиторий.

grep -A2 "Отображение потока: /var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txt

Это дало следующие результаты.

Текущее отображение: #0 ток: 0 ----; #0: 0 (hevc (собственный) ----; h264 (h264_omx)) Ток #0: 1 ----; #0: 1 (aac (нативный) ----; mp3 (libmp3lame))

Поток #0: 0 использовал программное обеспечение для декодирования HEVC и HWA для кодирования.

Поток #0: 1 имел те же результаты. Декодирование проще, чем кодирование, так что это, как правило, хорошие результаты. HWA-декодирование находится в стадии разработки.

ru_RUРусский