Jellyfin: Difference between revisions

Clarify the driver selection code block
Add a section on setting up Jellyfin with VAAPI in a NixOS container
 
Line 197: Line 197:


Related: [[Accelerated Video Playback]] and [[Intel Graphics]]
Related: [[Accelerated Video Playback]] and [[Intel Graphics]]
==== VAAPI with Jellyfin in a NixOS Container ====
Containers don't inherit graphic drivers from their root system, so if you run Jellyfin in a NixOS container, you have to copy the <code>hardware.graphics</code> block from the main configuration into your container's configuration.
You have to passthrough the graphics card device as well - usually it's located under <code>/dev/dri/card0</code> and/or <code>/dev/dri/renderD128</code>:
<syntaxHighlight lang="nix">
{
  allowedDevices = [
    {
      node = "/dev/dri/card0";
      modifier = "rw";
    }
    {
      node = "/dev/dri/renderD128";
      modifier = "rw";
    }
  ];
  bindMounts = {
    "/dev/dri/card0" = {
      hostPath = "/dev/dri/card0";
      isReadOnly = false;
    };
    "/dev/dri/renderD128" = {
      hostPath = "/dev/dri/renderD128";
      isReadOnly = false;
    };
  };
  config =
  # ... your container's configuration, including the hardware.graphics part!
}
</syntaxHighlight>
You can check if you got the configuration correct by adding <code>libva-utils</code> to the container's <code>environment.systemPackages</code>, logging into the container (<code>machinectl shell container-name</code>), and running <code>vainfo</code> - if you got everything right, you should see something akin to:
<syntaxHighlight>
Trying display: drm                                                                                                                                                                             
libva info: VA-API version 1.22.0                                                                                                                                                               
libva info: Trying to open /run/opengl-driver/lib/dri/iHD_drv_video.so                                                                                                                           
libva info: Found init function __vaDriverInit_1_22                                                                                                                                             
libva info: va_openDriver() returns 0                                                                                                                                                           
vainfo: VA-API version: 1.22 (libva 2.22.0)                                                                                                                                                     
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 25.2.6 ()                                                                                                                   
vainfo: Supported profile and entrypoints                                                                                                                                                       
      VAProfileNone                  : VAEntrypointVideoProc                                                                                                                                   
      VAProfileNone                  : VAEntrypointStats     
      /* and many more, the list depends on your specific hardware */                                                                                                                                 
</syntaxHighlight>
With that, ffmpeg (and thus Jellyfin) should be able to use hardware transcoding.


[[Category:Server]]
[[Category:Server]]
[[Category:Applications]]
[[Category:Applications]]
[[Category:Web Applications]]
[[Category:Web Applications]]