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-совместимых процессоров).
ОС Рекомендуемое ускорение 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 из командной строки.
- Настройте 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 Примечание. В некоторых версиях группой может быть видео вместо рендера.
- Добавьте пользователя службы Jellyfin к предыдущей группе, чтобы разрешить доступ к процессу Jellyfin FFMpeg к устройству, и перезапустите Jellyfin.
sudo usermod -aG рендер jellyfinsudo systemctl перезапустить jellyfin
- Установите ускорение VAAPI на странице «Транскодирование» панели администратора. Введите устройство / dev / dri / renderD128 выше в качестве значения устройства API-интерфейса VA.
- Посмотрите фильм и убедитесь, что транскодирование происходит, просмотрев логи ffmpeg-transcode - *. Txt в / var / log / jellyfin и используя radeontop или аналогичные инструменты.
Контейнер LXC или LXD
Это было протестировано с LXC 3.0 и может работать или не работать с более ранними версиями.
Выполните действия, описанные выше, чтобы добавить пользователя jellyfin в группу видео или рендера в зависимости от обстоятельств.
- Добавьте свой графический процессор в контейнер.
$ lxc config device add gpu gpu gid = <gid de su video o grupo de renderización;
- Убедитесь, что у вас есть карта внутри контейнера:
$ 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
- Установите Jellyfin для использования ускорения видео и укажите его на правильное устройство, если параметр по умолчанию неправильный.
- Попробуйте воспроизвести видео, которое требует перекодирования, и запустите следующее, вы должны получить хит.
$ ps aux | grep ffmpeg | Grep Accel
- Вы также можете попробовать воспроизвести видео, которое требует транскодирования, и если оно воспроизводится, у вас все хорошо.
Полезные ресурсы:
Raspberry Pi 3 и 4
- Добавьте пользователя службы Jellyfin в группу видео, чтобы разрешить процессу Jellyfin FFMpeg доступ к кодировщику, и перезапустите Jellyfin.sudo usermod -aG. для обновления ядра и прошивки.
- Выберите OpenMAX OMX в качестве аппаратного ускорения на вкладке «Транскодирование» панели мониторинга сервера.
- Измените количество памяти, выделенной для графического процессора. Графический процессор не может одновременно обрабатывать ускоренное декодирование и кодирование. 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-декодирование находится в стадии разработки.