mirror of
https://github.com/jellyfin/jellyfin.org.git
synced 2026-09-03 05:10:34 +03:00
Apply suggestions from code review
Co-authored-by: Shadowghost <Shadowghost@users.noreply.github.com> Co-authored-by: Thibault <1619359+ThibaultNocchi@users.noreply.github.com> Signed-off-by: nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
co-authored by
Shadowghost
Thibault
parent
a0770b5cbc
commit
dd69841df2
@@ -5,7 +5,7 @@ title: HWA Tutorial On AMD GPU
|
||||
|
||||
# HWA Tutorial On AMD GPU
|
||||
|
||||
This tutorial guides you setting up full video hardware acceleration on AMD integrated GPU and discrete GPU via AMF and VA-API.
|
||||
This tutorial guides you on setting up full video hardware acceleration on AMD integrated GPU and discrete GPU via AMF and VA-API.
|
||||
|
||||
|
||||
|
||||
@@ -45,13 +45,13 @@ AMF and VA-API support headless server on both Windows and Linux, which means a
|
||||
|
||||
Hardware accelerated HDR/DV to SDR tone-mapping is supported on **all AMD GPUs that have HEVC 10-bit decoding**.
|
||||
|
||||
There are two methods can be used on Windows and/or Linux, here's the pros and cons of them:
|
||||
There are two different methods that can be used on Windows and/or Linux. Pros and cons are listed below:
|
||||
|
||||
1. **OpenCL**
|
||||
|
||||
- Pros - Supports Dolby Vision P5, detailed fine-tuning options, widely supported hardware.
|
||||
|
||||
- Cons - The Pro or ROCm OpenCL runtime need to be manually installed on Linux. No zero-copy support on Linux.
|
||||
- Cons - The Pro or ROCm OpenCL runtime needs to be manually installed on Linux. No zero-copy support on Linux.
|
||||
|
||||
2. **Vulkan**
|
||||
|
||||
@@ -65,7 +65,7 @@ There are two methods can be used on Windows and/or Linux, here's the pros and c
|
||||
|
||||
:::caution
|
||||
|
||||
Most AMD dGPU comes with video encoders but be careful with certain models - RX 6400/6500 series, which don't have video encoder.
|
||||
Most AMD dGPUs come with video encoders but be careful with certain models - RX 6400/6500 series don't have video encoders.
|
||||
|
||||
:::
|
||||
|
||||
@@ -77,13 +77,13 @@ Best to check the video codec support via the [AMD product specifications](https
|
||||
|
||||
AVC / H.264 8-bit is still widely used due to its excellent compatibility. All AMD GPUs that support AMF or VA-API can decode and encode it.
|
||||
|
||||
- **Decoding & Encoding H.264 8-bit** - Any AMD GPU that supports AMF or VA-API
|
||||
- **Decoding & Encoding H.264 8-bit** - Any AMD GPU supporting AMF or VA-API
|
||||
|
||||
|
||||
|
||||
### Transcode HEVC
|
||||
|
||||
HEVC / H.265 remains the first choice for storing 4K 10-bit, HDR and Dolby Vision video. It has mature software encoder [x265 and documentation](https://x265.readthedocs.io/en/master/) support, as well as the widely implemented hardware codecs in most GPUs released after 2016.
|
||||
HEVC / H.265 remains the first choice for storing 4K 10-bit, HDR and Dolby Vision video. It has mature software encoding support thanks to [x265](https://x265.readthedocs.io/en/master/), as well as the widely implemented hardware encoding support in most GPUs released after 2016.
|
||||
|
||||
The HEVC support on AMD is complicated:
|
||||
|
||||
@@ -97,7 +97,7 @@ The HEVC support on AMD is complicated:
|
||||
|
||||
:::note
|
||||
|
||||
Note that even though the RX 400 series have HEVC 10-bit decoding support but it doesn't support DRM-Vulkan format modifier, which means full hardware acceleration is not possible for these cards on Linux. Vega and newer GPU is recommended on Linux.
|
||||
Note that even though the RX 400 series have HEVC 10-bit decoding support, it doesn't support the DRM-Vulkan format modifier, which means full hardware acceleration is not possible for these cards on Linux. A Vega or newer GPU is recommended on Linux.
|
||||
|
||||
:::
|
||||
|
||||
@@ -105,7 +105,7 @@ Note that even though the RX 400 series have HEVC 10-bit decoding support but it
|
||||
|
||||
### Transcode AV1
|
||||
|
||||
AV1 is a royalty-free, future-proof video codec. It saves storage space and network bandwidth a lot. The downside is that decoding and encoding them are very stressful for your CPU. But hardware acceleration makes it possible to transcode to AV1 streams on the fly. AV1 encoding support in Jellyfin is planned in the future.
|
||||
AV1 is a royalty-free, future-proof video codec. It saves a lot of storage space and network bandwidth due to smaller file size. The downside is that decoding and encoding is very demanding on the CPU. Hardware acceleration makes it possible to transcode AV1 streams on the fly. AV1 encoding support in Jellyfin is planned in the future.
|
||||
|
||||
AMD added support for AV1 acceleration in their latest GPUs:
|
||||
|
||||
@@ -127,9 +127,9 @@ Please refer to these links:
|
||||
|
||||
### Speed And Quality
|
||||
|
||||
Due to the lack of B-frame support, the encoding quality of AMD H.264 encoder has been unsatisfactory. Although RX 6000/VCN3.0 brings back the B-frame support, the quality improvement is not much.
|
||||
Due to the lack of B-frame support, the encoding quality of the AMD H.264 hardware encoder has been unsatisfactory. Although RX 6000/VCN3.0 brings back the B-frame support, the quality improvement is not great.
|
||||
|
||||
AMD HEVC encoder is far better than AMD H.264 encoder, and the new AMD AV1 encoding support on RX 7000/VCN4.0 seems to be the savior of AMD encoding quality. Although they are currently no match for Intel QSV and NVIDIA NVENC. Plus the VCN4.0 drastically improved the encoding speed.
|
||||
The AMD HEVC encoder is far better than the AMD H.264 encoder, and the new AMD AV1 encoding support on RX 7000/VCN4.0 seems to be the savior of AMD encoding quality. Nonetheless they are currently no match for Intel QSV and NVIDIA NVENC. VCN4.0 additionally improved the encoding speed drastically.
|
||||
|
||||
|
||||
|
||||
@@ -169,12 +169,12 @@ Windows 10 64-bit and newer is recommeded. **AMF is not available in Windows Doc
|
||||
|
||||
### Verify On Windows
|
||||
|
||||
1. Play a video in Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
1. Play a video in the Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
|
||||
2. Open the "Task Manager" and navigate to the GPU page.
|
||||
|
||||
3. Check the occupancy of the engines as follows.
|
||||
Duplicate engine name indicates the GPU may have multiple video engines.
|
||||
Duplicate engine names indicate the GPU may have multiple video engines.
|
||||
|
||||
- **3D** - 2D/3D engine or GPGPU workload
|
||||
|
||||
@@ -192,7 +192,7 @@ Windows 10 64-bit and newer is recommeded. **AMF is not available in Windows Doc
|
||||
|
||||
## Linux Setups
|
||||
|
||||
Linux 64-bit distribution is required. **The supported GPU varies by kernel and firmware versions.**
|
||||
A 64-bit Linux distribution is required. **The supported GPU varies by kernel and firmware versions.**
|
||||
|
||||
### Known Issues And Limitations
|
||||
|
||||
@@ -210,7 +210,7 @@ Known affected distros:
|
||||
|
||||
- [Manjaro](https://forum.manjaro.org/t/stable-update-2022-12-06-kernels-mesa-plasma-cinnamon-nvidia-libreoffice-pipewire-virtualbox/128453)
|
||||
|
||||
This prevents you from using the AMD VA-API transcoding **on host system**.
|
||||
This prevents you from using the AMD VA-API transcoding **on the host system**.
|
||||
|
||||
You can use our Docker image instead or install thirt-party Mesa driver package.
|
||||
|
||||
@@ -228,7 +228,7 @@ Alternatively, rebuild the Mesa driver with these options added to restore the s
|
||||
|
||||
The `jellyfin-ffmpeg5` deb package required by Jellyfin 10.8 comes with all necessary user mode Mesa drivers.
|
||||
|
||||
Besides that you only need to install the OpenCL runtime (optional for Vega+ in Jellyfin 10.9+) and configure the the permission of `jellyfin` user.
|
||||
Besides that you only need to install the OpenCL runtime (optional for Vega+ in Jellyfin 10.9+) and configure the the permission of the `jellyfin` user.
|
||||
|
||||
:::note
|
||||
|
||||
@@ -258,7 +258,7 @@ Root permission is required.
|
||||
crw-rw----+ 1 root render 226, 129 Mar 5 05:15 renderD129
|
||||
```
|
||||
|
||||
4. Add the `jellyfin` user to the `render` and `video` group, then restart `jellyfin` service:
|
||||
4. Add the `jellyfin` user to the `render` and `video` group, then restart the `jellyfin` service:
|
||||
|
||||
:::note
|
||||
|
||||
@@ -293,7 +293,7 @@ Root permission is required.
|
||||
|
||||
:::note
|
||||
|
||||
`Mesa Gallium driver` indicates VA-API interface is supported.
|
||||
`Mesa Gallium driver` indicates that the VA-API interface is supported.
|
||||
|
||||
:::
|
||||
|
||||
@@ -353,7 +353,7 @@ Root permission is required.
|
||||
|
||||
#### Linux Mint
|
||||
|
||||
Linux Mint use Ubuntu as its package base.
|
||||
Linux Mint uses Ubuntu as its package base.
|
||||
|
||||
You can follow the configuration steps of [Debian And Ubuntu Linux](/docs/general/administration/hardware-acceleration/amd-hwa-tutorial#debian-and-ubuntu-linux) but install all Jellyfin packages `jellyfin-server`, `jellyfin-web` and `jellyfin-ffmpeg5` manually from the [Jellyfin Server Releases Page](https://repo.jellyfin.org/releases/server/). Also make sure you choosed the correct codename by following the [official version maps](https://linuxmint.com/download_all.php).
|
||||
|
||||
@@ -369,7 +369,7 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Make and install the AUR [`jellyfin-ffmpeg5-bin`](https://aur.archlinux.org/packages/jellyfin-ffmpeg5-bin), then change the ffmpeg path in Jellyfin dashboard to `/usr/lib/jellyfin-ffmpeg/ffmpeg`:
|
||||
1. Make and install the AUR [`jellyfin-ffmpeg5-bin`](https://aur.archlinux.org/packages/jellyfin-ffmpeg5-bin) package, then change the FFmpeg path in Jellyfin dashboard to `/usr/lib/jellyfin-ffmpeg/ffmpeg`:
|
||||
|
||||
```shell
|
||||
$ cd ~/
|
||||
@@ -410,7 +410,7 @@ Root permission is required.
|
||||
$ /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device drm=dr:/dev/dri/renderD128 -init_hw_device vulkan@dr
|
||||
```
|
||||
|
||||
6. Check to the rest parts of [Debian And Ubuntu Linux](/docs/general/administration/hardware-acceleration/amd-hwa-tutorial#debian-and-ubuntu-linux).
|
||||
6. Check to the remaining parts of [Debian And Ubuntu Linux](/docs/general/administration/hardware-acceleration/amd-hwa-tutorial#debian-and-ubuntu-linux).
|
||||
|
||||
|
||||
|
||||
@@ -432,7 +432,7 @@ Minimum requirements for glibc and Linux versions:
|
||||
|
||||
:::
|
||||
|
||||
Extract and install it to the correct path, change the ffmpeg path in Jellyfin dashboard to match it:
|
||||
Extract and install it to the correct path, change the FFmpeg path in the Jellyfin dashboard to match it:
|
||||
|
||||
```shell
|
||||
$ cd ~/
|
||||
@@ -459,7 +459,7 @@ Install other necessary Intel driver packages and their dependencies that contai
|
||||
|
||||
The official Docker image comes with all necessary user mode Mesa drivers.
|
||||
|
||||
What you need to do is install the OpenCL runtime and pass the host's `render`group id to Docker and modify the configurations to meet your requirements.
|
||||
What you need to do is install the OpenCL runtime and pass the host's `render` group id to Docker and modify the configurations to meet your requirements.
|
||||
|
||||
:::note
|
||||
|
||||
@@ -475,7 +475,7 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Query the `render` and `video` groups id on the host system and use it in Docker cli or docker-compose file:
|
||||
1. Query the ids of the `render` and `video` groups on the host system and use it in the Docker CLI or docker-compose file:
|
||||
|
||||
:::note
|
||||
|
||||
@@ -488,7 +488,7 @@ Root permission is required.
|
||||
$ getent group video | cut -d: -f3
|
||||
```
|
||||
|
||||
2. Use Docker command line **or** use docker-compose:
|
||||
2. Use Docker command line **or** docker-compose:
|
||||
|
||||
- Example command line:
|
||||
|
||||
@@ -586,7 +586,7 @@ LSIO Docker images are maintained by [linuxserver.io](https://www.linuxserver.io
|
||||
|
||||
- The paths of Jellyfin config and data folders in the official and LSIO Docker images are different. So they cannot be easily exchanged.
|
||||
|
||||
- Third-party LSIO Docker mod [jellyfin-amd](https://github.com/linuxserver/docker-mods/pull/544) can be used for enabling the OpenCL tone-mapping.
|
||||
- A third-party LSIO Docker mod [jellyfin-amd](https://github.com/linuxserver/docker-mods/pull/544) can be used for enabling the OpenCL tone-mapping.
|
||||
|
||||
:::
|
||||
|
||||
@@ -602,7 +602,7 @@ Refer to the [HWA Tutorial On Intel GPU - Configure With Linux Virtualization](/
|
||||
|
||||
### Verify On Linux
|
||||
|
||||
There is not reliable way to read the occupancy of the VCE/UVD/VCN engines on AMD GPU on Linux.
|
||||
There is no reliable way to read the occupancy of the VCE/UVD/VCN engines on AMD GPU on Linux.
|
||||
|
||||
But you can still verify this by reading other engines with the `radeontop` tool.
|
||||
|
||||
@@ -612,7 +612,7 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Install the `radeontop` package. The name varies with different distros.
|
||||
1. Install the `radeontop` package. The name varies between distros.
|
||||
|
||||
- On Debian & Ubuntu:
|
||||
|
||||
@@ -626,6 +626,6 @@ Root permission is required.
|
||||
# pacman -Sy radeontop
|
||||
```
|
||||
|
||||
2. Play a video in Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
2. Play a video in the Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
|
||||
3. Use `radeontop` command to check the occupancy of 3D engines.
|
||||
|
||||
@@ -5,13 +5,13 @@ title: Hardware Acceleration
|
||||
|
||||
# Hardware Acceleration
|
||||
|
||||
Jellyfin server can offload the process of on the fly video transcoding with the help of integrated or discrete graphics card ([GPU](https://en.wikipedia.org/wiki/Graphics_processing_unit)), which is designed to be suitable for accelerating this workload very efficiently without needing to burn your CPU.
|
||||
The Jellyfin server can offload on the fly video transcoding by utilizing an integrated or discrete graphics card ([GPU](https://en.wikipedia.org/wiki/Graphics_processing_unit)) suitable to accelerate this workloads very efficiently without straining your CPU.
|
||||
|
||||
|
||||
|
||||
## Supported Acceleration Methods
|
||||
|
||||
Jellyfin server uses a modified version of [FFmpeg](http://ffmpeg.org/) as its transcoder, namely [jellyfin-ffmpeg](https://github.com/jellyfin/jellyfin-ffmpeg). It enables Jellyfin server to access the fixed-function video codecs, video processors and [GPGPU](https://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units) computing interfaces provided by vendor and operating system of the installed GPU.
|
||||
The Jellyfin server uses a modified version of [FFmpeg](http://ffmpeg.org/) as its transcoder, namely [jellyfin-ffmpeg](https://github.com/jellyfin/jellyfin-ffmpeg). It enables the Jellyfin server to access the fixed-function video codecs, video processors and [GPGPU](https://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units) computing interfaces provided by vendor of the installed GPU and the operating system.
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ The supported and validated video [hardware acceleration (HWA)](https://trac.ffm
|
||||
|
||||
## Full & Partial Acceleration
|
||||
|
||||
Transcoding pipeline usually has multiple stages, which can be simpified to:
|
||||
The transcoding pipeline usually has multiple stages, which can be simplified to:
|
||||
|
||||
- Video Decoding
|
||||
|
||||
@@ -51,19 +51,19 @@ Transcoding pipeline usually has multiple stages, which can be simpified to:
|
||||
|
||||
:::note
|
||||
|
||||
Some of these stages cannot be GPU accelerated due to the software, hardware or driver limitations.
|
||||
Some of these stages cannot be GPU accelerated due to software, hardware or driver limitations.
|
||||
|
||||
Partial acceleration may result in slightly higher CPU usage and lower than expected transcoding FPS.
|
||||
Partial acceleration may result in slightly higher CPU usage and lower transcoding speed.
|
||||
|
||||
:::
|
||||
|
||||
Jellyfin 10.8 managed to support full acceleration on mainstream Intel, NVIDIA and AMD (Windows only) GPUs.
|
||||
Jellyfin 10.8 supports full acceleration on mainstream Intel, NVIDIA and AMD (Windows only) GPUs.
|
||||
|
||||
Jellyfin 10.9 enables full acceleration for AMD Vega and newer GPUs on Linux via VA-API and Vulkan interop.
|
||||
|
||||
|
||||
|
||||
Using our [jellyfin-ffmpeg](https://github.com/jellyfin/jellyfin-ffmpeg/releases) with Jellyfin is highly recommended, which has a `-Jellyfin` suffix in the version string.
|
||||
Using [jellyfin-ffmpeg](https://github.com/jellyfin/jellyfin-ffmpeg/releases) with Jellyfin is highly recommended, which has a `-Jellyfin` suffix in the version string.
|
||||
|
||||
```shell
|
||||
$ /usr/lib/jellyfin-ffmpeg/ffmpeg
|
||||
@@ -75,11 +75,11 @@ ffmpeg version 5.1.2-Jellyfin Copyright (c) 2000-2022 the FFmpeg developers
|
||||
|
||||
:::caution
|
||||
|
||||
Using the ffmpeg binaries downloaded from else where will result in partial acceleration.
|
||||
Using FFmpeg binaries downloaded from somewhere else will result in partial acceleration.
|
||||
|
||||
Jellyfin-ffmpeg usually ships with our deb package, official Docker images and Windows installers.
|
||||
|
||||
The only exception is when using portable installation or a unsupported distro you need to manually download and set it in Jellyfin.
|
||||
The only exception is when using a portable installation or an unsupported distro, then it's required to manually download and set it in Jellyfin.
|
||||
|
||||
:::
|
||||
|
||||
@@ -87,19 +87,19 @@ The only exception is when using portable installation or a unsupported distro y
|
||||
|
||||
## Configure & Verify Hardware Acceleration
|
||||
|
||||
There are some preparations that need to be done before enabling the hardware acceleration.
|
||||
There are some preparations that need to be done before enabling hardware acceleration.
|
||||
|
||||
The specific configuration steps may vary with different GPU vendors, installation methods, and operating systems.
|
||||
The specific configuration steps may vary between GPU vendors, installation methods, and operating systems.
|
||||
|
||||
|
||||
|
||||
On Linux you can check available GPU using `lspci` command:
|
||||
On Linux you can check available GPU using the `lspci` command:
|
||||
|
||||
```shell
|
||||
$ lspci -nn | grep -Ei "3d|display|vga"
|
||||
```
|
||||
|
||||
Or using `lshw` command:
|
||||
Or using `lshw`:
|
||||
|
||||
```shell
|
||||
$ lshw -C display
|
||||
@@ -129,7 +129,7 @@ Click [HWA Tutorial On NVIDIA GPU](/docs/general/administration/nvidia-hwa-tutor
|
||||
|
||||
As of **Jellyfin 10.8** hardware acceleration on Raspberry Pi via `OpenMAX OMX` was dropped and is no longer available.
|
||||
|
||||
This decision was made because Raspberry Pi is currently migrating to a `V4L2` based hardware acceleration, which is already available in Jellyfin but does not support all features other hardware acceleration methods provide due to lacking support in FFmpeg. Jellyfin will fallback to software codecs for those usecases.
|
||||
This decision was made because Raspberry Pi is currently migrating to a `V4L2` based hardware acceleration, which is already available in Jellyfin but does not support all features other hardware acceleration methods provide due to lacking support in FFmpeg. Jellyfin will fallback to software de/encoding for those usecases.
|
||||
|
||||
The current state of hardware acceleration support in FFmpeg can be checked on the [rpi-ffmpeg repository](https://github.com/jc-kynesim/rpi-ffmpeg).
|
||||
|
||||
@@ -139,7 +139,8 @@ The current state of hardware acceleration support in FFmpeg can be checked on t
|
||||
|
||||
Hardware acceleration options can be found in the Admin Dashboard under the **Transcoding** section of the **Playback** tab.
|
||||
|
||||
Select a valid hardware acceleration option from the drop-down menu, indicate a device if applicable, and check the boxes in **Enable hardware decoding for** and **Hardware encoding options** to enable encoding as well as decoding, if your hardware supports this.
|
||||
Select a valid hardware acceleration method from the drop-down menu and a device if applicable.
|
||||
Supported codecs need to be indicated by checking the boxes in **Enable hardware decoding for** and **Hardware encoding options**.
|
||||
|
||||
The hardware acceleration is available immediately for media playback. No server restart is required.
|
||||
|
||||
@@ -151,13 +152,13 @@ If your Jellyfin server does not support hardware acceleration, but you have ano
|
||||
|
||||
:::note
|
||||
|
||||
Currently Linux-only and requires SSH between the machines, as well as shared storage both for media and for the Jellyfin data directory.
|
||||
Currently Linux-only and requires SSH between the machines, as well as shared storage for media and the Jellyfin data directory.
|
||||
|
||||
:::
|
||||
|
||||
## Hardware Accelerated Tone-mapping
|
||||
|
||||
Hardware accelerated HDR10, HLG to SDR tone-mapping is supported in Jellyfin.
|
||||
Jellyfin supports hardware accelerated tone-mapping of HDR10 and HLG to SDR.
|
||||
|
||||
Dolby Vision (P5 & P8) to SDR tone-mapping is supported in Jellyfin 10.8 and requires jellyfin-ffmpeg 5.0.1-5 or newer.
|
||||
|
||||
@@ -165,7 +166,7 @@ Dolby Vision (P5 & P8) to SDR tone-mapping is supported in Jellyfin 10.8 and req
|
||||
|
||||
Intel VPP HDR10 tone-mapping is supported on Intel QSV and VA-API on Linux.
|
||||
|
||||
VPP is prefered when both tone-mapping options are checked on Intel GPU.
|
||||
VPP is prefered if both tone-mapping options are enabled.
|
||||
|
||||
:::
|
||||
|
||||
@@ -194,7 +195,7 @@ VPP is prefered when both tone-mapping options are checked on Intel GPU.
|
||||
|
||||
:::tip
|
||||
|
||||
Integrated GPU takes up a portion of system memory as its video memory, which means using dual-channel memory can double the video memory bandwidth. This can be quite useful for compute intensive workloads such as hardware HDR/DV tone-mapping.
|
||||
Integrated GPUs take up a portion of system memory as their video memory, which means using dual-channel memory can double the video memory bandwidth. This can be useful while computing intensive workloads such as hardware HDR/DV tone-mapping.
|
||||
|
||||
:::
|
||||
|
||||
@@ -202,7 +203,7 @@ VPP is prefered when both tone-mapping options are checked on Intel GPU.
|
||||
|
||||
:::tip
|
||||
|
||||
On modern GPUs the peak throughput of video transcoding can be limited by the I/O speed of your hard drives. In this case, SSD or RamDisk can be used for caching the transcoded termporary video segments.
|
||||
On modern GPUs the peak throughput of video transcoding can be limited by the I/O speed of your hard drives. In this case, an SSD or RamDisk can be used for caching the transcoded temporary video segments.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ title: HWA Tutorial On Intel GPU
|
||||
|
||||
# HWA Tutorial On Intel GPU
|
||||
|
||||
This tutorial guides you setting up full video hardware acceleration on Intel integrated GPU and ARC discrete GPU via QSV and VA-API.
|
||||
This tutorial guides you on setting up full video hardware acceleration on Intel integrated GPUs and ARC discrete GPUs via QSV and VA-API.
|
||||
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ Linux QSV [supported platforms](https://github.com/intel/media-driver#supported-
|
||||
|
||||
|
||||
|
||||
The QSV interface comes from Intel [OneVPL](https://github.com/oneapi-src/oneVPL) / [MediaSDK](https://github.com/Intel-Media-SDK/MediaSDK) is a high-level implementation based on Linux VA-API and Windows DXVA/D3D11VA, which gives better performance and more fine-tuning options on supported platforms.
|
||||
The QSV interface provided by Intel [OneVPL](https://github.com/oneapi-src/oneVPL) / [MediaSDK](https://github.com/Intel-Media-SDK/MediaSDK) is a high-level implementation based on Linux VA-API and Windows DXVA/D3D11VA providing better performance and more fine-tuning options on supported platforms.
|
||||
|
||||
QSV can be used together with VA-API and DXVA/D3D11VA for a more flexible hybrid transcoding pipeline.
|
||||
|
||||
@@ -71,7 +71,7 @@ QSV and VA-API support headless server on both Windows and Linux, which means a
|
||||
|
||||
Hardware accelerated HDR/DV to SDR tone-mapping is supported on **all Intel GPUs that have HEVC 10-bit decoding**.
|
||||
|
||||
There are two methods can be used on Windows and/or Linux, here's the pros and cons of them:
|
||||
There are two different methods that can be used on Windows and/or Linux. Pros and cons are listed below:
|
||||
|
||||
1. **OpenCL**
|
||||
|
||||
@@ -91,11 +91,11 @@ There are two methods can be used on Windows and/or Linux, here's the pros and c
|
||||
|
||||
:::caution
|
||||
|
||||
Rule out the model of Intel processors that ending in "F", which means it has no integrated GPU.
|
||||
Do not use models of Intel processors ending with "F" - those do not have an integrated GPU.
|
||||
|
||||
:::
|
||||
|
||||
Best to check Quick Sync Video support via the [Intel ark website](https://ark.intel.com/content/www/us/en/ark.html) before buying a new GPU for hardware acceleration.
|
||||
Quick Sync Video support can be checked via the [Intel ark website](https://ark.intel.com/content/www/us/en/ark.html) prior to buying a new GPU suitable for hardware acceleration.
|
||||
|
||||
### Transcode H.264
|
||||
|
||||
@@ -107,9 +107,9 @@ AVC / H.264 8-bit is still widely used due to its excellent compatibility. All I
|
||||
|
||||
### Transcode HEVC
|
||||
|
||||
HEVC / H.265 remains the first choice for storing 4K 10-bit, HDR and Dolby Vision video. It has mature software encoder [x265 and documentation](https://x265.readthedocs.io/en/master/) support, as well as the widely implemented hardware codecs in most GPUs released after 2016.
|
||||
HEVC / H.265 remains the first choice for storing 4K 10-bit, HDR and Dolby Vision video. It has mature software encoding support thanks to [x265](https://x265.readthedocs.io/en/master/), as well as the widely implemented hardware encoding support in most GPUs released after 2016.
|
||||
|
||||
No exception for Intel GPUs:
|
||||
Intel GPUs are no exception:
|
||||
|
||||
- **Decoding & Encoding HEVC 8-bit** - Gen 9 Sky Lake (6th Gen Core) and newer
|
||||
|
||||
@@ -125,7 +125,7 @@ Note that the 6th Gen Core lacks 10-bit support, it's best to choose 7th Gen and
|
||||
|
||||
### Transcode AV1
|
||||
|
||||
AV1 is a royalty-free, future-proof video codec. It saves storage space and network bandwidth a lot. The downside is that decoding and encoding them are very stressful for your CPU. But hardware acceleration makes it possible to transcode to AV1 streams on the fly. AV1 encoding support in Jellyfin is planned in the future.
|
||||
AV1 is a royalty-free, future-proof video codec. It saves a lot of storage space and network bandwidth due to smaller file size. The downside is that decoding and encoding is very demanding on the CPU. Hardware acceleration makes it possible to transcode AV1 streams on the fly. AV1 encoding support in Jellyfin is planned in the future.
|
||||
|
||||
Intel added support for AV1 acceleration in their latest GPUs:
|
||||
|
||||
@@ -157,7 +157,7 @@ They can be divided into 4 tiers by their performance:
|
||||
|
||||
:::tip
|
||||
|
||||
These iGPUs usually come from mini PC boxes or Synology NAS and they can transcode HEVC 10-bit and apply tone-mapping filters. You can't expect much due to performance and power constraints, but it's still adequate for personal use.
|
||||
These iGPUs usually come from mini PC boxes or Synology NASes and they can transcode HEVC 10-bit and apply tone-mapping filters. You can't expect much due to performance and power constraints, but it's still adequate for personal use.
|
||||
|
||||
:::
|
||||
|
||||
@@ -165,7 +165,7 @@ They can be divided into 4 tiers by their performance:
|
||||
|
||||
:::tip
|
||||
|
||||
These iGPUs have more computing power than entry-level, which makes them capable of multiple 4k HDR HEVC 10-bit transcoding at the same time. Note that the Gen 11 graphics has improved encoder quality over Gen 9 but not too much.
|
||||
These iGPUs have more computing power than entry-level, which makes them capable of multiple 4k HDR HEVC 10-bit transcoding at the same time. Note that the Gen 11 graphics have a slightly improved encoder quality over Gen 9.
|
||||
|
||||
:::
|
||||
|
||||
@@ -181,7 +181,7 @@ They can be divided into 4 tiers by their performance:
|
||||
|
||||
:::tip
|
||||
|
||||
ARC A-series GPU uses the latest Gen 12.5 XeHPG architecture, which continues to improve on the basis of XeLP, supports [AV1 hardware encoding and improved H.264 and HEVC encoding](https://github.com/intel/media-delivery/blob/master/doc/benchmarks/intel-data-center-gpu-flex-series/intel-data-center-gpu-flex-series.rst). This makes it competitive with the medium preset of the x264 and x265 software encoders. All ARC A-series GPU models comes with two MFX video engines.
|
||||
ARC A-series GPUs use the latest Gen 12.5 XeHPG architecture, which continues to improve on the basis of XeLP, supports [AV1 hardware encoding and improved H.264 and HEVC encoding](https://github.com/intel/media-delivery/blob/master/doc/benchmarks/intel-data-center-gpu-flex-series/intel-data-center-gpu-flex-series.rst). This makes it competitive with the medium preset of the x264 and x265 software encoders. All ARC A-series GPU models come with two MFX video engines.
|
||||
|
||||
:::
|
||||
|
||||
@@ -189,15 +189,15 @@ They can be divided into 4 tiers by their performance:
|
||||
|
||||
### OneVPL And MediaSDK
|
||||
|
||||
[OneVPL](https://github.com/oneapi-src/oneVPL) is a new QSV implementation to supersede [MediaSDK](https://github.com/Intel-Media-SDK/MediaSDK). Both provide Quick Sync Video (QSV) runtime.
|
||||
[OneVPL](https://github.com/oneapi-src/oneVPL) is a new QSV implementation to supersede [MediaSDK](https://github.com/Intel-Media-SDK/MediaSDK). Both provide the Quick Sync Video (QSV) runtime.
|
||||
|
||||
Intel supports OneVPL on Gen 12+ graphics (11th Gen Core and newer processor, namly Tiger Lake & Rocket Lake).
|
||||
|
||||
:::note
|
||||
|
||||
The most notable difference is that OneVPL supports new AV1 hardware encoder on ARC GPU.
|
||||
The most notable difference is that OneVPL supports the new AV1 hardware encoder on ARC GPU.
|
||||
|
||||
[FFmpeg 6.0](http://ffmpeg.org/download.html#release_6.0) enables OneVPL and this process is seamless for the end users.
|
||||
[FFmpeg 6.0](http://ffmpeg.org/download.html#release_6.0) enables OneVPL. This process is seamless for the end users.
|
||||
|
||||
:::
|
||||
|
||||
@@ -216,11 +216,11 @@ Tips for ARC GPU:
|
||||
- [Reizeable-BAR](https://game.intel.com/story/intel-arc-graphics-resizable-bar/) is not mandatory for hardware acceleration, but it can affect the performance of VPP tone-mapping.
|
||||
It's recommended to enable the Resizable-BAR if the processor, motherboard and BIOS support it.
|
||||
|
||||
- [ASPM](https://www.intel.com/content/www/us/en/support/articles/000092564/graphics.html) can be enabled in the supported BIOS, which greatly reduces the idle power consumption of the ARC GPU.
|
||||
- [ASPM](https://www.intel.com/content/www/us/en/support/articles/000092564/graphics.html) should be enabled in the BIOS if supported. This greatly reduces the idle power consumption of the ARC GPU.
|
||||
|
||||
- Low-Power encoding is used by default on ARC GPU. **GuC & HuC firmware can be missing on non-rolling release distros**.
|
||||
- Low-Power encoding is used by default on ARC GPUs. **GuC & HuC firmware can be missing on non-rolling release distros**, you might need to manually download it from the [Kernel firmware git](https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915).
|
||||
|
||||
- Old kernel build configs [may not have the MEI modules enabled](https://gitlab.freedesktop.org/drm/intel/-/issues/7732), which is necessary for using ARC GPU on Linux.
|
||||
- Old kernel build configs [may not have the MEI modules enabled](https://gitlab.freedesktop.org/drm/intel/-/issues/7732), which are necessary for using ARC GPU on Linux.
|
||||
|
||||
:::
|
||||
|
||||
@@ -228,7 +228,7 @@ Tips for ARC GPU:
|
||||
|
||||
## Windows Setups
|
||||
|
||||
Windows 10 64-bit and newer is recommeded. **QSV is not available in Windows Docker and WSL/WSL2.**
|
||||
Windows 10 64-bit and newer is recommeded. **QSV is not available on Windows Docker and WSL/WSL2.**
|
||||
|
||||
### Configure On Windows Host
|
||||
|
||||
@@ -256,7 +256,7 @@ Windows 10 64-bit and newer is recommeded. **QSV is not available in Windows Doc
|
||||
|
||||
### Verify On Windows
|
||||
|
||||
1. Play a video in Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
1. Play a video in the Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
|
||||
2. Open the "Task Manager" and navigate to the GPU page.
|
||||
|
||||
@@ -264,7 +264,7 @@ Windows 10 64-bit and newer is recommeded. **QSV is not available in Windows Doc
|
||||
|
||||
:::note
|
||||
|
||||
Duplicate engine name indicates the GPU may have multiple MFX video engines.
|
||||
Duplicate engine names indicate the GPU may have multiple MFX video engines.
|
||||
|
||||
:::
|
||||
|
||||
@@ -282,17 +282,17 @@ Windows 10 64-bit and newer is recommeded. **QSV is not available in Windows Doc
|
||||
|
||||
## Linux Setups
|
||||
|
||||
Linux 64-bit distribution is required. **The supported GPU varies by kernel and firmware versions.**
|
||||
A 64-bit Linux distribution is required. **The supported GPU varies by kernel and firmware versions.**
|
||||
|
||||
### Known Issues And Limitations
|
||||
|
||||
:::caution
|
||||
|
||||
There are some known upstream kernel and firmware issues that can affect the Intel hardware transcoding. Some of them can be fixed by upgrading your Linux distro, kernel and firmware packages, or editing the needed kernel parameters.
|
||||
There are some known upstream Linux Kernel and firmware issues that can affect the Intel hardware transcoding. Some of them can be fixed by upgrading your Linux distro, kernel and firmware packages, or adding the required kernel parameters.
|
||||
|
||||
:::
|
||||
|
||||
1. Intel Gen 11 [**Jasper Lake**](https://ark.intel.com/content/www/us/en/ark/products/codename/128823/products-formerly-jasper-lake.html) and [**Elkhart Lake**](https://ark.intel.com/content/www/us/en/ark/products/codename/128825/products-formerly-elkhart-lake.html) platforms (e.g. N5095, N5105, N6005, J6412) have quirks when using video encoders on Linux. The [Low-Power Encoding](/docs/general/administration/hardware-acceleration/intel-hwa-tutorial#low-power-encoding) mode MUST be configured and enabled for doing the correct VBR or CBR bitrate control that is required by the Jellyfin on the fly video streaming.
|
||||
1. Intel Gen 11 [**Jasper Lake**](https://ark.intel.com/content/www/us/en/ark/products/codename/128823/products-formerly-jasper-lake.html) and [**Elkhart Lake**](https://ark.intel.com/content/www/us/en/ark/products/codename/128825/products-formerly-elkhart-lake.html) platforms (e.g. N5095, N5105, N6005, J6412) have quirks when using video encoders on Linux. The [Low-Power Encoding](/docs/general/administration/hardware-acceleration/intel-hwa-tutorial#low-power-encoding) mode MUST be configured and enabled for correct VBR and CBR bitrate control that is required by Jellyfin.
|
||||
|
||||
- Ticket: https://gitlab.freedesktop.org/drm/intel/-/issues/8080
|
||||
|
||||
@@ -396,9 +396,9 @@ Root permission is required.
|
||||
|
||||
:::note
|
||||
|
||||
`iHD driver` indicates both QSV and VA-API interfaces are supported.
|
||||
`iHD driver` indicates support for the QSV and VA-API interfaces.
|
||||
|
||||
`i965 driver` indicates only VA-API interface is supported, which should only be used on pre-Broadwell platforms.
|
||||
`i965 driver` indicates only support for the VA-API interface, which should only be used on pre-Broadwell platforms.
|
||||
|
||||
:::
|
||||
|
||||
@@ -436,7 +436,7 @@ Root permission is required.
|
||||
|
||||
#### Linux Mint
|
||||
|
||||
Linux Mint use Ubuntu as its package base.
|
||||
Linux Mint uses Ubuntu as its package base.
|
||||
|
||||
You can follow the configuration steps of [Debian And Ubuntu Linux](/docs/general/administration/hardware-acceleration/intel-hwa-tutorial#debian-and-ubuntu-linux) but install all Jellyfin packages `jellyfin-server`, `jellyfin-web` and `jellyfin-ffmpeg5` manually from the [Jellyfin Server Releases Page](https://repo.jellyfin.org/releases/server/). Also make sure you choosed the correct codename by following the [official version maps](https://linuxmint.com/download_all.php).
|
||||
|
||||
@@ -452,7 +452,7 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Make and install the AUR [`jellyfin-ffmpeg5-bin`](https://aur.archlinux.org/packages/jellyfin-ffmpeg5-bin), then change the ffmpeg path in Jellyfin dashboard to `/usr/lib/jellyfin-ffmpeg/ffmpeg`:
|
||||
1. Make and install the AUR [`jellyfin-ffmpeg5-bin`](https://aur.archlinux.org/packages/jellyfin-ffmpeg5-bin) package, then change the FFmpeg path in Jellyfin dashboard to `/usr/lib/jellyfin-ffmpeg/ffmpeg`:
|
||||
|
||||
```shell
|
||||
$ cd ~/
|
||||
@@ -481,7 +481,7 @@ Root permission is required.
|
||||
$ /usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va
|
||||
```
|
||||
|
||||
4. Check to the rest parts of [Debian And Ubuntu Linux](/docs/general/administration/hardware-acceleration/intel-hwa-tutorial#debian-and-ubuntu-linux).
|
||||
4. Check to the remaining parts of [Debian And Ubuntu Linux](/docs/general/administration/hardware-acceleration/intel-hwa-tutorial#debian-and-ubuntu-linux).
|
||||
|
||||
|
||||
|
||||
@@ -503,7 +503,7 @@ Minimum requirements for glibc and Linux versions:
|
||||
|
||||
:::
|
||||
|
||||
Extract and install it to the correct path, change the ffmpeg path in Jellyfin dashboard to match it:
|
||||
Extract and install it to the correct path, change the FFmpeg path in the Jellyfin dashboard to match it:
|
||||
|
||||
```shell
|
||||
$ cd ~/
|
||||
@@ -534,9 +534,9 @@ Install other necessary Intel driver packages and their dependencies that contai
|
||||
|
||||
The official Docker image comes with all necessary user mode Intel media drivers and the OpenCL runtime.
|
||||
|
||||
What you need to do is pass the host's `render`group id to Docker and modify the configurations to meet your requirements.
|
||||
What you need to do is pass the host's `render` group id to Docker and modify the configurations to meet your requirements.
|
||||
|
||||
1. Query the `render` and `video` groups id on the host system and use it in Docker cli or docker-compose file.
|
||||
1. Query the ids of the `render` and `video` groups on the host system and use it in the Docker CLI or docker-compose file:
|
||||
|
||||
:::note
|
||||
|
||||
@@ -548,7 +548,7 @@ What you need to do is pass the host's `render`group id to Docker and modify the
|
||||
$ getent group render | cut -d: -f3
|
||||
```
|
||||
|
||||
2. Use docker command line **or** use docker-compose:
|
||||
2. Use docker command line **or** docker-compose:
|
||||
|
||||
- Example command line:
|
||||
|
||||
@@ -578,6 +578,8 @@ What you need to do is pass the host's `render`group id to Docker and modify the
|
||||
user: 1000:1000
|
||||
group_add:
|
||||
- "122" # Change this to match your "render" host group id and remove this comment
|
||||
- "123" # Change this to match your "video" host group id and remove this comment
|
||||
- "123" # Change this to match your "video" host group id and remove this comment
|
||||
network_mode: 'host'
|
||||
volumes:
|
||||
- /path/to/config:/config
|
||||
@@ -624,7 +626,7 @@ The paths of Jellyfin config and data folders in the official and LSIO Docker im
|
||||
|
||||
This follows the same principles as for the Docker, with one small change that your container within the pod much run as **privileged**.
|
||||
|
||||
The devices in Kubernetes are added as a host path mounts, they are not separated into separate volumes as in the Docker.
|
||||
The devices in Kubernetes are added as host path mounts, they are not separated into separate volumes like in the Docker example.
|
||||
|
||||
1. Example Kubernetes (API version 1) configuraton file written in YAML:
|
||||
|
||||
@@ -666,7 +668,7 @@ The devices in Kubernetes are added as a host path mounts, they are not separate
|
||||
|
||||
2. When the pod starts, you can check the QSV and VA-API codecs.
|
||||
|
||||
If you get `error: failed to initialize display` then double check that the `supplementalGroups` are correct.
|
||||
If you get `error: failed to initialize display`, double check that the `supplementalGroups` are correct.
|
||||
|
||||
```shell
|
||||
$ kubectl exec <JELLYFIN_POD_NAME> -- /usr/lib/jellyfin-ffmpeg/vainfo
|
||||
@@ -684,7 +686,7 @@ This has been tested with LXC 3.0 and may or may not work with older versions.
|
||||
|
||||
:::
|
||||
|
||||
1. Query the `render` and `video` group id on the host system.
|
||||
1. Query the ids of the `render` and `video` groups on the host system.
|
||||
|
||||
:::note
|
||||
|
||||
@@ -765,7 +767,7 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Install the `intel-gpu-tools` package, which is used for debugging Intel graphics driver on Linux. The name varies with different distros.
|
||||
1. Install the `intel-gpu-tools` package, which is used for debugging Intel graphics driver on Linux. The name varies between distros.
|
||||
|
||||
- On Debian & Ubuntu:
|
||||
|
||||
@@ -781,11 +783,11 @@ Root permission is required.
|
||||
|
||||
2. Play a video in Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
|
||||
3. Use `intel_gpu_tool` command to check the occupancy of the engines as follows:
|
||||
3. Use `intel_gpu_top` command to check the occupancy of the engines as follows:
|
||||
|
||||
:::note
|
||||
|
||||
Duplicate engine name indicates the GPU may have multiple MFX video engines.
|
||||
Duplicate engine names indicate the GPU may have multiple MFX video engines.
|
||||
|
||||
:::
|
||||
|
||||
@@ -823,7 +825,7 @@ Intel video encoders on Gen 9+ graphics support two encoding modes:
|
||||
|
||||
- non Low-Power / LP encoding (PAK + media kernel + VME)
|
||||
|
||||
Low-Power encoding can offload the GPU usage with the help of the [HuC firmware](https://01.org/linuxgraphics/downloads/firmware).
|
||||
Low-Power encoding can offload the GPU usage with the help of the [HuC firmware](https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915).
|
||||
|
||||
This can be useful for speeding up the OpenCL based HDR/DV tone-mapping.
|
||||
|
||||
@@ -871,7 +873,7 @@ Gen X refers to Intel graphics architechure instead of the CPU generation. (i.e.
|
||||
|
||||
:::caution
|
||||
|
||||
The setup is not necessary unless you are using an Intel **Jasper Lake** or **Elkhart Lake** processor, or you want faster OpenCL tone-mapping speed on Linux. This also applies to the bleeding edge hardware such as **12th Gen Intel processors**, **ARC GPU** and newer **but the step 3 and 4 should be skipped**.
|
||||
The setup is not necessary unless you are using an Intel **Jasper Lake** or **Elkhart Lake** processor, or you want faster OpenCL tone-mapping speed on Linux. This also applies to the bleeding edge hardware such as **12th Gen Intel processors**, **ARC GPU** and newer **but step 3 and 4 should be skipped**.
|
||||
|
||||
:::
|
||||
|
||||
@@ -881,7 +883,7 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Install the latest linux firmware packages **on host system**. The name varies with different distros.
|
||||
1. Install the latest linux firmware packages **on the host system**. The name varies between distros.
|
||||
|
||||
- On Debian:
|
||||
|
||||
@@ -909,14 +911,14 @@ Root permission is required.
|
||||
# cp -r linux-firmware/i915 /usr/lib/firmware
|
||||
```
|
||||
|
||||
2. Add an i915 kernel parameter on host to enable GuC loading HuC firmware:
|
||||
2. Add the required i915 kernel parameter on the host system to enable loading GuC and HuC firmware:
|
||||
|
||||
```shell
|
||||
# mkdir -p /etc/modeprobe.d
|
||||
# sh -c "echo 'options i915 enable_guc=2' >> /etc/modeprobe.d/i915.conf"
|
||||
```
|
||||
|
||||
3. Update the initramfs and grub. The commands varies with different distros.
|
||||
3. Update the initramfs and grub. The commands varies between distros.
|
||||
|
||||
- On Debian & Ubuntu:
|
||||
|
||||
@@ -946,7 +948,7 @@ Root permission is required.
|
||||
# cat /sys/kernel/debug/dri/0/i915_huc_load_status
|
||||
```
|
||||
|
||||
5. Now you can safely enable the Intel Low-Power encoder in Jellyfin dashboard.
|
||||
5. Now you can safely enable the Intel Low-Power encoder in the Jellyfin dashboard.
|
||||
|
||||
:::tip
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ title: HWA Tutorial On NVIDIA GPU
|
||||
|
||||
# HWA Tutorial On NVIDIA GPU
|
||||
|
||||
This tutorial guides you setting up full video hardware acceleration on NVIDIA GPU via NVENC.
|
||||
This tutorial guides you on setting up full video hardware acceleration on NVIDIA GPU via NVENC.
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ On Windows and Linux **NVENC** is the only available method.
|
||||
|
||||
|
||||
|
||||
The NVENC/NVDEC are the proprietary video codec APIs of NVIDIA GPU, which can be used with CUDA to achieve full hardware acceleration.
|
||||
The NVENC/NVDEC are the proprietary video codec APIs of NVIDIA GPUs, which can be used with CUDA to achieve full hardware acceleration.
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ Consumer targeted [Geforce and some entry-level Quadro](https://developer.nvidia
|
||||
|
||||
:::note
|
||||
|
||||
NVENC support headless server on both Windows and Linux, which means a connected monitor is not required.
|
||||
NVENC supports headless server on both Windows and Linux, which means a connected monitor is not required.
|
||||
|
||||
:::
|
||||
|
||||
@@ -47,25 +47,25 @@ On Windows and Linux **CUDA** is the only available tone-mapping method. It also
|
||||
|
||||
:::caution
|
||||
|
||||
Most NVIDIA GPU comes with NVENC/NVDEC support but be **some low-end and mobile models (e.g. GT1030 and MX450)** are exceptions.
|
||||
Most NVIDIA GPUs come with NVENC/NVDEC support but **some low-end and mobile models (e.g. GT1030 and MX450)** are exceptions.
|
||||
|
||||
:::
|
||||
|
||||
Best to check the video codec support via the [NVIDIA GPU Codec Support Matrix](https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new) before buying a GPU for hardware acceleration.
|
||||
Video codec support can be checked via the [NVIDIA GPU Codec Support Matrix](https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new) prior to buying a GPU suitable for hardware acceleration.
|
||||
|
||||
### Transcode H.264
|
||||
|
||||
AVC / H.264 8-bit is still widely used due to its excellent compatibility. All NVIDIA GPUs that support NVENC/NVDEC can decode and/or encode it.
|
||||
AVC / H.264 8-bit is still widely used due to its excellent compatibility. All NVIDIA GPUs supporting NVENC/NVDEC can decode and/or encode it.
|
||||
|
||||
- **Decoding & Encoding H.264 8-bit** - Any NVIDIA GPU that supports NVENC/NVDEC
|
||||
- **Decoding & Encoding H.264 8-bit** - Any NVIDIA GPU supporting NVENC/NVDEC
|
||||
|
||||
|
||||
|
||||
### Transcode HEVC
|
||||
|
||||
HEVC / H.265 remains the first choice for storing 4K 10-bit, HDR and Dolby Vision video. It has mature software encoder [x265 and documentation](https://x265.readthedocs.io/en/master/) support, as well as the widely implemented hardware codecs in most GPUs released after 2016.
|
||||
HEVC / H.265 remains the first choice for storing 4K 10-bit, HDR and Dolby Vision video. It has mature software encoding support thanks to [x265](https://x265.readthedocs.io/en/master/), as well as the widely implemented hardware encoding support in most GPUs released after 2016.
|
||||
|
||||
Maxwell+ GPU provide support for HEVC:
|
||||
Maxwell+ GPUs provide support for HEVC:
|
||||
|
||||
- **Decoding & Encoding HEVC 8-bit** - Maxwell 2nd Gen (GM206) and newer
|
||||
|
||||
@@ -75,9 +75,9 @@ Maxwell+ GPU provide support for HEVC:
|
||||
|
||||
:::note
|
||||
|
||||
Note that in Maxwell 2nd Gen series only the GM206 variants provide the HEVC 10-bit decoding support.
|
||||
Note that in Maxwell 2nd Gen series only the GM206 variants provide HEVC 10-bit decoding support.
|
||||
|
||||
Its sucessor Pascal has full support for HEVC 10-bit and improved speed and quality performance.
|
||||
Its sucessor Pascal has full support for HEVC 10-bit and improved speed and quality.
|
||||
|
||||
:::
|
||||
|
||||
@@ -85,7 +85,7 @@ Its sucessor Pascal has full support for HEVC 10-bit and improved speed and qual
|
||||
|
||||
### Transcode AV1
|
||||
|
||||
AV1 is a royalty-free, future-proof video codec. It saves storage space and network bandwidth a lot. The downside is that decoding and encoding them are very stressful for your CPU. But hardware acceleration makes it possible to transcode to AV1 streams on the fly. AV1 encoding support in Jellyfin is planned in the future.
|
||||
AV1 is a royalty-free, future-proof video codec. It saves a lot of storage space and network bandwidth due to smaller file size. The downside is that decoding and encoding is very demanding on the CPU. Hardware acceleration makes it possible to transcode AV1 streams on the fly. AV1 encoding support in Jellyfin is planned in the future.
|
||||
|
||||
NVIDIA added support for AV1 acceleration in their latest GPUs:
|
||||
|
||||
@@ -113,7 +113,7 @@ Encoding quality:
|
||||
|
||||
- AV1 - Ada Lovelace only
|
||||
|
||||
Decoding & Encoding speed in same generation:
|
||||
Decoding & Encoding speed within the same generation:
|
||||
|
||||
- Multiple NVENC/NVDEC models > Single NVENC/NVDEC models
|
||||
|
||||
@@ -155,7 +155,7 @@ Refer to [Configure On Linux Host](/docs/general/administration/hardware-acceler
|
||||
|
||||
### Verify On Windows
|
||||
|
||||
1. Play a video in Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
1. Play a video in the Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
|
||||
2. Open the "Task Manager" and navigate to the GPU page.
|
||||
|
||||
@@ -175,7 +175,7 @@ Refer to [Configure On Linux Host](/docs/general/administration/hardware-acceler
|
||||
|
||||
## Linux Setups
|
||||
|
||||
Linux 64-bit distribution is required. **In Jellyfin 10.8 the minimum required NVIDIA driver version is 470.57.02**.
|
||||
A 64-bit Linux distribution is required. **In Jellyfin 10.8 the minimum required NVIDIA driver version is 470.57.02**.
|
||||
|
||||
### Configure On Linux Host
|
||||
|
||||
@@ -183,7 +183,7 @@ Linux 64-bit distribution is required. **In Jellyfin 10.8 the minimum required N
|
||||
|
||||
The `jellyfin-ffmpeg5` deb package required by Jellyfin 10.8 doesn't include any NVIDIA proprietary driver.
|
||||
|
||||
So you have to install the NVIDIA driver from the distro and configure the the permission of `jellyfin` user.
|
||||
You have to install the NVIDIA driver from the distro and configure the the permission of the `jellyfin` user.
|
||||
|
||||
:::note
|
||||
|
||||
@@ -244,7 +244,7 @@ Root permission is required.
|
||||
|
||||
#### Linux Mint
|
||||
|
||||
Linux Mint use Ubuntu as its package base.
|
||||
Linux Mint uses Ubuntu as its package base.
|
||||
|
||||
You can follow the configuration steps of [Debian And Ubuntu Linux](/docs/general/administration/hardware-acceleration/nvidia-hwa-tutorial#debian-and-ubuntu-linux) but install all Jellyfin packages `jellyfin-server`, `jellyfin-web` and `jellyfin-ffmpeg5` manually from the [Jellyfin Server Releases Page](https://repo.jellyfin.org/releases/server/). Also make sure you choosed the correct codename by following the [official version maps](https://linuxmint.com/download_all.php).
|
||||
|
||||
@@ -260,7 +260,7 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Make and install the AUR [`jellyfin-ffmpeg5-bin`](https://aur.archlinux.org/packages/jellyfin-ffmpeg5-bin), then change the ffmpeg path in Jellyfin dashboard to `/usr/lib/jellyfin-ffmpeg/ffmpeg`:
|
||||
1. Make and install the AUR [`jellyfin-ffmpeg5-bin`](https://aur.archlinux.org/packages/jellyfin-ffmpeg5-bin) package, then change the FFmpeg path in Jellyfin dashboard to `/usr/lib/jellyfin-ffmpeg/ffmpeg`:
|
||||
|
||||
```shell
|
||||
$ cd ~/
|
||||
@@ -305,7 +305,7 @@ Minimum requirements for glibc and Linux versions:
|
||||
|
||||
:::
|
||||
|
||||
Extract and install it to the correct path, change the ffmpeg path in Jellyfin dashboard to match it:
|
||||
Extract and install it to the correct path, change the FFmpeg path in the Jellyfin dashboard to match it:
|
||||
|
||||
```shell
|
||||
$ cd ~/
|
||||
@@ -316,7 +316,7 @@ $ tar -xvf jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz -C jellyfin-ffm
|
||||
$ ldd -v /usr/lib/jellyfin-ffmpeg/ffmpeg
|
||||
```
|
||||
|
||||
Install NVIDIA proprietary driver packages and their dependencies that contain these key words:
|
||||
Install the NVIDIA proprietary driver packages and their dependencies that contain these key words:
|
||||
|
||||
- NVIDIA NVDEC CUVID - DECODE
|
||||
|
||||
@@ -330,7 +330,7 @@ Install NVIDIA proprietary driver packages and their dependencies that contain t
|
||||
|
||||
The official Docker image doesn't include any NVIDIA proprietary driver.
|
||||
|
||||
So you have to install the NVIDIA driver and NVIDIA Container Toolkit on host to allow Docker access your GPU.
|
||||
You have to install the NVIDIA driver and NVIDIA Container Toolkit on the host system to allow Docker access to your GPU.
|
||||
|
||||
:::note
|
||||
|
||||
@@ -338,13 +338,13 @@ Root permission is required.
|
||||
|
||||
:::
|
||||
|
||||
1. Install the NVIDIA proprietary driver on host. See above instructions.
|
||||
1. Install the NVIDIA proprietary driver on the host system. See above instructions.
|
||||
|
||||
2. Install the NVIDIA Container Toolkit on host by following the link:
|
||||
2. Install the NVIDIA Container Toolkit on the host system by following this link:
|
||||
|
||||
- https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installation-guide
|
||||
|
||||
3. Use Docker command line **or** use docker-compose:
|
||||
3. Use the Docker command line **or** docker-compose:
|
||||
|
||||
- Example command line:
|
||||
|
||||
@@ -389,14 +389,14 @@ Root permission is required.
|
||||
# usermod -aG video $USER
|
||||
```
|
||||
|
||||
5. Update configure dynamic links and restart the Docker service:
|
||||
5. Update dynamic links and restart the Docker service:
|
||||
|
||||
```shell
|
||||
$ docker exec -it jellyfin ldconfig
|
||||
# systemctl restart docker
|
||||
```
|
||||
|
||||
6. Check the NVIDIA GPU status by using `nvidia-smi`:
|
||||
6. Check the NVIDIA GPU's status by using `nvidia-smi`:
|
||||
|
||||
```shell
|
||||
$ docker exec -it jellyfin nvidia-smi
|
||||
@@ -410,7 +410,7 @@ Root permission is required.
|
||||
|
||||
:::note
|
||||
|
||||
Note that the official Jellyfin Docker image already set the required environment variables for NVIDIA GPUs. If you are building your own image don't forget the add two extra environment variables into the Docker configs.
|
||||
Note that the official Jellyfin Docker image already sets the required environment variables for NVIDIA GPUs. If you are building your own image don't forget the add two extra environment variables into the Docker configs.
|
||||
|
||||
- `NVIDIA_DRIVER_CAPABILITIES=all`
|
||||
|
||||
@@ -442,7 +442,7 @@ Refer to the [HWA Tutorial On Intel GPU - Configure With Linux Virtualization](/
|
||||
|
||||
### Verify On Linux
|
||||
|
||||
1. Play a video in Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
1. Play a video in the Jellyfin web client and trigger a video transcoding by setting a lower resolution or bitrate.
|
||||
|
||||
2. Use `nvidia-smi` command to check the occupancy of the NVIDIA GPU and the VRAM usage of each jellyfin-ffmpeg process:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user