Doorgaan naar hoofdinhoud
Onofficiële Beta-vertaling

Deze pagina is vertaald door PageTurner AI (beta). Niet officieel goedgekeurd door het project. Een fout gevonden? Probleem melden →

Zelfstudie hardwareversnelling voor AMD GPU

Deze zelfstudie begeleidt je bij het instellen van volledige hardwareversnelling voor video op AMD's geïntegreerde GPU en discrete GPU via AMF of VA-API. Gebruik VideoToolbox als je macOS gebruikt.

Versnellingsmethoden

Hardwareversnelling voor transcoderen wordt ondersteund op AMD GPU's sinds de GCN-architectuur.

Op Windows is AMF de enige beschikbare methode.

Op Linux zijn er twee methoden:

  • VA-API - Aanbevolen voor alle GPU's, volledige versnelling op Polaris(RX400/500)+ GPU's, open source.

  • AMF - Niet aanbevolen, beperkte ondersteuning, alleen hardwarematige encoder, closed source.

De AMF-interface op Windows is gebaseerd op DXVA/D3D11VA, maar op Linux is deze gebaseerd op hun Pro Vulkan- en OpenCL-stack, een closed source-oplossing. We bieden alleen volledige hardwareversnelling hiervoor op Windows.

De VA-API-interface op Linux is een open source-implementatie. Deze open driverstack omarmt Intel's Libva-standaard en geeft hun videohardware bloot via de Mesa Gallium RadeonSI-driver. Dankzij de ontwikkelaars van RADV Vulkan-driver kunnen we samenwerken tussen VA-API en Vulkan op Polaris+ GPU's, waardoor we Vulkan-berekeningen kunnen gebruiken voor volledige hardwareversnelling op Linux.

opmerking
  • In tegenstelling tot NVIDIA NVENC geldt er geen limiet voor gelijktijdige encodesessies op AMD GPU.

  • AMF en VA-API ondersteunen headless-servers op zowel Windows als Linux, wat betekent dat een aangesloten monitor niet vereist is.

Tone-mappingmethoden

Hardwareversnelling voor HDR/DV naar SDR tone-mapping wordt ondersteund op alle AMD GPU's die HEVC 10-bit decodering hebben.

Er zijn twee verschillende methoden die op Windows en/of Linux kunnen worden gebruikt. Voor- en nadelen worden hieronder vermeld:

  1. OpenCL

    • Voordelen - Ondersteunt Dolby Vision P5, gedetailleerde afstelmogelijkheden, breed ondersteunde hardware.

    • Nadelen - Zero-copy wordt niet ondersteund op Linux.

  2. Vulkan

    • Voordelen - Ondersteunt Dolby Vision P5, libplacebo-renderer, vereist geen ROCm OpenCL-runtime.

    • Nadelen - Alleen Linux, zero-copy ondersteunt alleen Polaris+ GPU's.

GPU-hardware selecteren

Voor beginners: raadpleeg de Hardware Selectiehandleiding voor tips over het selecteren van hardware. Voor gevorderde gebruikers: lees verder in deze sectie.

let op

De meeste AMD dGPU's hebben video-encoders, maar let op bij bepaalde modellen - RX 6400/6500 series hebben geen video-encoders.

AMD Ryzen APU's (modellen met G/GE/H/HS/HX suffix) en Zen 4-processors hebben geïntegreerde grafische mogelijkheden.

Controleer altijd de videocodec-ondersteuning via de AMD-productspecificaties voordat je een GPU voor hardwareversnelling aanschaft.

H.264 transcoderen

AVC / H.264 8-bit wordt nog steeds veel gebruikt vanwege de uitstekende compatibiliteit. Alle AMD GPU's die AMF of VA-API ondersteunen, kunnen dit decoderen en encoderen.

  • Decoderen & encoderen H.264 8-bit - Elke AMD GPU met AMF of VA-API-ondersteuning

HEVC transcoderen

HEVC / H.265 blijft de eerste keuze voor het opslaan van 4K 10-bit, HDR- en Dolby Vision-video. Het heeft volwassen software-encodingondersteuning dankzij x265, evenals breed geïmplementeerde hardware-encodingondersteuning in de meeste GPU's uitgebracht na 2016.

De HEVC-ondersteuning op AMD is complex:

  • Decoderen HEVC 8-bit - Radeon R9 Fury en nieuwer (Fiji)

  • Encoderen HEVC 8-bit - Radeon RX 400-serie (Polaris) en nieuwer

  • Decoderen HEVC 10-bit - Radeon RX 400-serie (Polaris) en nieuwer

  • Encoderen HEVC 10-bit - Ryzen 4000-serie APU (Renoir), Radeon RX 5000-serie (Navi 1x) en nieuwer

AV1 transcoderen

AV1 is een royaltyvrije, toekomstbestendige videocodec. Het bespaart veel opslagruimte en netwerkbandbreedte dankzij kleinere bestandsgrootte. Het nadeel is dat decoderen en encoderen zeer zwaar zijn voor de CPU. Hardwareversnelling maakt het mogelijk om AV1-streams on-the-fly te transcoderen. AV1-encoding wordt ondersteund in Jellyfin 10.9 en nieuwer.

AMD heeft ondersteuning voor AV1-versnelling toegevoegd in hun nieuwste GPU's:

  • Decoderen AV1 8/10-bit - Radeon RX 6000-serie (Navi 2x), Ryzen 6000 mobiele APU en nieuwer (behalve RX 6400/6500)

  • Encoderen AV1 8/10-bit - Radeon RX 7000-serie (Navi 3x), Ryzen 7000/8000, AI 7/9 HX mobiele APU, Ryzen 8000G desktop APU en nieuwer

Andere codecs transcoderen

Raadpleeg deze links:

Snelheid en kwaliteit

Door het ontbreken van B-frame-ondersteuning is de encodingkwaliteit van de AMD H.264-hardwareencoder teleurstellend. Hoewel RX 6000/VCN3.0 B-frame-ondersteuning terugbrengt, is de kwaliteitsverbetering beperkt.

De AMD HEVC-encoder is veel beter dan de H.264-encoder, en de nieuwe AMD AV1-encodingondersteuning op RX 7000/VCN4.0 lijkt de redding voor AMD's encodingkwaliteit. Toch zijn ze momenteel geen partij voor Intel QSV en NVIDIA NVENC. VCN4.0 verbeterde bovendien de encodingsnelheid aanzienlijk. De encodingkwaliteit is sterk verbeterd in VCN5.0, en het lost ook het probleem op in VCN4.0 waarbij de AV1-encoder een hoogte van 64 vereiste (1080p werd incorrect geëncodeerd als 1082p met zwarte pixels).

Encodingsnelheid en -kwaliteit:

  • VCN5(RX 9000) >> VCN4(RX 7000) > VCN3/VCN2(RX 6000/RX 5000/Renoir) > VCN1/VCE(Raven/Picasso/GCN GPU's)

Windows-instellingen

Windows 10 64-bit en nieuwer wordt aanbevolen. AMF is niet beschikbaar in Windows Docker en WSL/WSL2.

Bekende problemen en beperkingen op Windows

Raadpleeg dit gedeelte voor bekende problemen en beperkingen.

Configureren op Windows-host

  1. Verwijder oude stuurprogramma's met DDU als je een upgrade hebt uitgevoerd vanaf een pre-GCN AMD GPU zonder schone installatie.

  2. Installeer de nieuwste stuurprogramma's schoon vanaf AMD Drivers and Support.

  3. Sta niet toe dat de GPU wordt overgenomen door de Windows Remote Desktop-sessie.

    • Typ gpedit.msc in het dialoogvenster van de sneltoets Win+R en voer uit om de "Local Group Policy Editor" te openen.

    • Navigeer in de linkerbomenstructuur naar [Computerconfiguratie > Beheersjablonen > Windows-onderdelen]

    • Hier vind je [Extern bureaublad-services > Host voor extern bureaublad-sessies > Omgeving voor externe sessies]

    • Dubbelklik aan de rechterkant op [Gebruik hardware-grafische adapters voor alle sessies van Extern bureaublad-services]

    • Stel [Uitgeschakeld] in het pop-upvenster in en klik op [OK], herstart het systeem.

    Configuratie van GPU voor extern bureaublad

  4. Schakel AMF in Jellyfin in en vink niet-ondersteunde codecs uit.

Verifiëren op Windows

  1. Speel een video af in de Jellyfin-webclient en activeer transcodering door een lagere resolutie of bitrate in te stellen.

  2. Open "Taakbeheer" en navigeer naar het GPU-tabblad.

  3. Controleer het gebruik van de engines als volgt.

    opmerking

    Dubbele engine-namen geven aan dat de GPU mogelijk meerdere video-engines heeft.

    • 3D - 2D/3D-engine of GPGPU-workload

    • Copy - Blitter/Copy-engine-workload

    • Video Codec - Video-decoder of encoder-workload

    • Video Decode - Video-decoder-workload

    • Video Encode - Video-encoder-workload

    • Compute - GPGPU-workload

    AMD op Windows verifiëren

Linux-installaties

Een 64-bit Linux-distributie is vereist. Ondersteunde GPU's variëren per kernel- en firmwareversies.

Bekende problemen en beperkingen op Linux

Raadpleeg deze sectie voor bekende problemen en beperkingen.

Configureren op Linux-host

Debian en Ubuntu Linux

Het voor Jellyfin vereiste jellyfin-ffmpeg* deb-pakket bevat alle benodigde Mesa-stuurprogramma's in gebruikersmodus.

Daarnaast hoeft u alleen de rechten van de jellyfin-gebruiker te configureren.

opmerking

Rootrechten zijn vereist.

  1. Ga ervan uit dat u de Jellyfin-repository aan uw apt-bronnenlijst hebt toegevoegd en jellyfin-server en jellyfin-web hebt geïnstalleerd.

  2. Installeer het jellyfin-ffmpeg7-pakket. Verwijder het verouderde jellyfin-metapakket als dit afhankelijkheden verstoort:

    sudo apt update && sudo apt install -y jellyfin-ffmpeg7
  3. Zorg dat minstens één renderD*-apparaat bestaat in /dev/dri. Upgrade anders uw kernel of schakel de iGPU in de BIOS in. Let op de rechten en groep met schrijftoegang, in dit geval render en video:

    $ ls -l /dev/dri

    total 0
    drwxr-xr-x 2 root root 120 Mar 5 05:15 by-path
    crw-rw----+ 1 root video 226, 0 Mar 5 05:15 card0
    crw-rw----+ 1 root video 226, 1 Mar 5 05:15 card1
    crw-rw----+ 1 root render 226, 128 Mar 5 05:15 renderD128
    crw-rw----+ 1 root render 226, 129 Mar 5 05:15 renderD129
  4. Voeg de gebruiker jellyfin toe aan de render- en video-groep, en start daarna de jellyfin-service opnieuw:

    opmerking

    Bij sommige releases kan de groep input zijn.

    sudo usermod -aG render jellyfin
    sudo usermod -aG video jellyfin
    sudo systemctl restart jellyfin
  5. Controleer de ondersteunde VA-API-codecs:

    opmerking

    Mesa Gallium driver geeft aan dat de VA-API-interface wordt ondersteund.

    sudo /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128

    libva info: VA-API version 1.17.0
    libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/radeonsi_drv_video.so
    libva info: Found init function __vaDriverInit_1_17
    libva info: va_openDriver() returns 0
    Trying display: drm
    vainfo: VA-API version: 1.17 (libva 2.17.0)
    vainfo: Driver version: Mesa Gallium driver 23.1.0-devel for AMD Radeon RX Vega (vega10, LLVM 15.0.7, DRM 3.49, 6.1.14-1)
    vainfo: Supported profile and entrypoints
    ...

    VAEntrypointVLD betekent dat je kaart dit formaat kan decoderen, VAEntrypointEncSlice betekent dat je naar dit formaat kunt encoderen.

    Jellyfin-instellingVA-API-profiel
    H264VAProfileH264Baseline
    VAProfileH264Main
    VAProfileH264High
    VAProfileH264ConstrainedBaseline
    HEVCVAProfileHEVCMain
    MPEG2VAProfileMPEG2Simple
    VAProfileMPEG2Main
    VC1VAProfileVC1Simple
    VAProfileVC1Main
    VAProfileVC1Advanced
    VP8VAProfileVP8Version0
    VAProfileVP8Version1
    VAProfileVP8Version2
    VAProfileVP8Version3
    VP9VAProfileVP9Profile0
    AV1VAProfileAV1Profile0
    HEVC 10bitVAProfileHEVCMain10
    VP9 10bitVAProfileVP9Profile2
  6. Controleer de status van de Vulkan-runtime:

    sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device drm=dr:/dev/dri/renderD128 -init_hw_device vulkan@dr

    [AVHWDeviceContext @ 0x557f13a57bc0] GPU listing:
    [AVHWDeviceContext @ 0x557f13a57bc0] 0: AMD Radeon RX Vega (RADV VEGA10) (discrete) (0x687f)
    [AVHWDeviceContext @ 0x557f13a57bc0] 1: llvmpipe (LLVM 15.0.7, 256 bits) (software) (0x0)
    [AVHWDeviceContext @ 0x557f13a57bc0] Device 0 selected: AMD Radeon RX Vega (RADV VEGA10) (discrete) (0x687f)
    [AVHWDeviceContext @ 0x557f13a57bc0] Queue families:
    [AVHWDeviceContext @ 0x557f13a57bc0] 0: graphics compute transfer sparse (queues: 1)
    [AVHWDeviceContext @ 0x557f13a57bc0] 1: compute transfer sparse (queues: 4)
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_push_descriptor
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_sampler_ycbcr_conversion
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_synchronization2
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_external_memory_fd
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_external_memory_dma_buf
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_image_drm_format_modifier
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_KHR_external_semaphore_fd
    [AVHWDeviceContext @ 0x557f13a57bc0] Using device extension VK_EXT_external_memory_host
    ...
  7. Als je de tweede GPU wilt gebruiken, wijzig dan renderD128 in renderD129 in het Jellyfin-dashboard.

  8. Schakel VA-API in Jellyfin in en vink de niet-ondersteunde codecs uit op basis van de vainfo-uitvoer.

Linux Mint

Linux Mint gebruikt Ubuntu als pakketbasis.

Volg de configuratiestappen voor Debian en Ubuntu Linux, maar installeer alle Jellyfin-pakketten jellyfin-server, jellyfin-web en jellyfin-ffmpeg7 handmatig vanaf de Jellyfin Server Releases-pagina. Zorg er ook voor dat je de juiste codenaam kiest volgens de officiële versiemappingen.

Arch Linux

opmerking

Rootrechten zijn vereist.

  1. Installeer het Archlinux/extra jellyfin-ffmpeg-pakket:

    sudo pacman -Syu jellyfin-ffmpeg
  2. Mesa stuurprogramma's in gebruikersmodus moeten handmatig worden geïnstalleerd voor VA-API en RADV Vulkan:

    sudo pacman -Syu libva-mesa-driver vulkan-radeon
  3. Controleer de VA-API-codecs:

    sudo pacman -Syu libva-utils
    sudo vainfo --display drm --device /dev/dri/renderD128
  4. Controleer de status van de Vulkan-runtime:

    sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device drm=dr:/dev/dri/renderD128 -init_hw_device vulkan@dr
  5. Ga naar de resterende delen van Debian en Ubuntu Linux.

Andere Distro's

We bieden draagbare jellyfin-ffmpeg-binaries voor distro's zonder vaste onderhouder.

Download ze via een van deze links:

opmerking

Minimale vereisten voor glibc en Linux-versies:

  • x86_64 / amd64 - glibc ≥ 2.28, Linux ≥ 4.18 (meeste distro's uit 2018 en later)

Pak uit en installeer op het juiste pad, wijzig het FFmpeg-pad in het Jellyfin-dashboard:

opmerking

Rootrechten zijn vereist.

cd ~/
mkdir -p jellyfin-ffmpeg
wget https://repo.jellyfin.org/releases/ffmpeg/<VERSION>/jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz
tar -xvf jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz -C jellyfin-ffmpeg
sudo mv jellyfin-ffmpeg /usr/lib
sudo ldd -v /usr/lib/jellyfin-ffmpeg/ffmpeg

Installeer andere benodigde Mesa-driverpakketten en hun afhankelijkheden met deze sleutelwoorden:

  • Mesa libva vaapi driver - RadeonSI

  • Mesa vulkan driver - RADV

Configureren met Linux-virtualisatie

Officiële Docker

Het officiële Docker-image bevat alle benodigde Mesa-drivers in gebruikersmodus.

Je hoeft alleen de render-groep-ID van de host aan Docker door te geven en configuraties aan te passen.

opmerking

Rootrechten zijn vereist.

  1. Vraag de ID's van de render- en video-groepen op het hostsysteem op en gebruik deze in de Docker CLI of docker-compose-bestand:

    opmerking

    Bij sommige releases heet de groep input.

    getent group render | cut -d: -f3
    getent group video | cut -d: -f3
  2. Gebruik Docker command line of docker compose:

    • Voorbeeld command line:

      docker run -d \
      --name=jellyfin \
      --volume /path/to/config:/config \
      --volume /path/to/cache:/cache \
      --volume /path/to/media:/media \
      --user 1000:1000 \
      --group-add="122" \ # Change this to match your "render" host group id and remove this comment
      --net=host \
      --restart=unless-stopped \
      --device /dev/dri/renderD128:/dev/dri/renderD128 \
      jellyfin/jellyfin
    • Voorbeeld docker-compose configuratiebestand in YAML:

      services:
      jellyfin:
      image: jellyfin/jellyfin
      user: 1000:1000
      group_add:
      - '122' # Change this to match your "render" host group id and remove this comment
      network_mode: 'host'
      volumes:
      - /path/to/config:/config
      - /path/to/cache:/cache
      - /path/to/media:/media
      devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
  3. Als u de tweede GPU op uw systeem wilt gebruiken, wijzig dan renderD128 in renderD129.

  4. Om de onstabiele build te proberen, verander jellyfin/jellyfin in jellyfin/jellyfin:unstable op eigen risico.

  5. Controleer de VA-API-codecs:

    docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128
  6. Controleer de Vulkan-runtimestatus:

    docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device vulkan
  7. Schakel VA-API in Jellyfin in en vink de niet-ondersteunde codecs uit.

Linuxserver.io Docker

LSIO Docker-images worden onderhouden door linuxserver.io, raadpleeg hun documentatie op GitHub - linuxserver/docker-jellyfin.

opmerking

De paden van Jellyfin-configuratie- en gegevensmappen in de officiële en LSIO Docker-images zijn verschillend. Daarom kunnen ze niet eenvoudig worden uitgewisseld.

Andere virtualisaties

Andere virtualisatievormen zijn niet geverifieerd en werken mogelijk wel of niet met AMD GPU's.

Zie de HWA-handleiding voor Intel GPU - Configureren met Linux-virtualisatie voor meer informatie.

Verificatie op Linux

Er is geen betrouwbare manier om het gebruik van de VCE/UVD/VCN-engines op AMD GPU's onder Linux uit te lezen.

Je kunt dit echter nog steeds controleren door andere engines uit te lezen met het radeontop-hulpprogramma.

opmerking

Rootrechten zijn vereist.

  1. Installeer het radeontop pakket. De naam verschilt per distributie.

    • Op Debian & Ubuntu:

      sudo apt update && sudo apt install -y radeontop
    • Op Arch Linux:

      sudo pacman -Syu radeontop
  2. Speel een video af in de Jellyfin-webclient en activeer videotranscodering door een lagere resolutie of bitrate in te stellen.

  3. Gebruik het radeontop-commando om het gebruik van de 3D-engines te controleren.