Accelerated Video Playback: Difference between revisions

imported>Colemickens
Add intel hybrid codec information
Jopejoe1 (talk | contribs)
Format an clean up the nix code
(48 intermediate revisions by 22 users not shown)
Line 1: Line 1:
This page is meant to help with techniques for getting accelerated video playback working in NixOS.
<languages/>
<translate>
<!--T:1-->
Accelerated video playback in NixOS is generally done by adding relevant packages to {{nixos:option|hardware.graphics.extraPackages}}.
</translate>


This is done by adding relevant `libva`-related packages to the `hardware.opengl.extraPackages` option.
<translate>
== Installation == <!--T:18-->
</translate>
<translate>
=== Intel === <!--T:19-->
</translate>
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
  pkgs,
  ...
}:


Additionally, the `vaapiIntel` package can be overriden to enable [Intel's Hybrid Driver](https://github.com/01org/intel-hybrid-driver).
{
  hardware.graphics = {
    enable = true;
    extraPackages = with pkgs; [
      intel-media-driver # For Broadwell (2014) or newer processors. LIBVA_DRIVER_NAME=iHD
      intel-vaapi-driver # For older processors. LIBVA_DRIVER_NAME=i965
    ];
  };
  environment.sessionVariables = {
    LIBVA_DRIVER_NAME = "iHD";
  }; # Optionally, set the environment variable
}
</nowiki>}}
<translate>
<!--T:2-->
Note, <code>intel-vaapi-driver</code> still performs better for browsers (gecko/chromium based) on newer Skylake (2015) processors.<ref>https://github.com/intel/media-driver/issues/1024</ref>
</translate>


Sample configuration:
<translate>
<!--T:3-->
For 32-bit support, use
</translate> {{nixos:option|hardware.graphics.extraPackages32}}:
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
  pkgs,
  ...
}:
{
  hardware.graphics.extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
}
</nowiki>}}
<translate>
=== AMD === <!--T:4-->


   {
<!--T:5-->
     ...
AMD configuration (at least for Ryzen 5 iGPUs) works out of the box:
     nixpkgs.config.packageOverrides = pkgs: {
</translate>
       vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
   hardware.graphics.enable = true;
}
</nowiki>}}
 
<translate>
=== NVIDIA === <!--T:23-->
 
<!--T:24-->
NVIDIA do not officially support accelerated video playback on Linux. A third-party implementation exists, but does not support Chrome<ref>https://github.com/elFarto/nvidia-vaapi-driver#chrome</ref>, and has significant limitations compared to the other implementations<ref>https://github.com/elFarto/nvidia-vaapi-driver#codec-support</ref>.
 
<!--T:25-->
NVIDIA users with a separate iGPU should generally prefer to use their iGPU for this, and therefore look to the above Intel and AMD sections instead.
 
<!--T:26-->
Users with only an NVIDIA GPU can attempt to use the third party implementation; the package is added to <code>hardware.graphics.extraPackages</code> by default, but it requires some additional setup to be useful<ref>https://github.com/elFarto/nvidia-vaapi-driver#configuration</ref>:
</translate>
 
{{file|3=<nowiki>
{
  config,
  lib,
  ...
}:
 
{
  environment.variables.LIBVA_DRIVER_NAME = "nvidia";
 
  # If used with Firefox
  environment.variables.MOZ_DISABLE_RDD_SANDBOX = "1";
 
  programs.firefox.preferences =
     let
      ffVersion = config.programs.firefox.package.version;
     in
    {
      "media.ffmpeg.vaapi.enabled" = lib.versionOlder ffVersion "137.0.0";
      "media.hardware-video-decoding.force-enabled" = lib.versionAtLeast ffVersion "137.0.0";
      "media.rdd-ffmpeg.enabled" = lib.versionOlder ffVersion "97.0.0";
 
       "gfx.x11-egl.force-enabled" = true;
      "widget.dmabuf.force-enabled" = true;
 
      # Set this to true if your GPU supports AV1.
      #
      # This can be determined by reading the output of the
      # `vainfo` command, after the driver is enabled with
      # the environment variable.
      "media.av1.enabled" = false;
     };
     };
    hardware.opengl = {
}
      enable = true;
</nowiki>|name=/etc/nixos/configuration.nix|lang=nix}}
      extraPackages = with pkgs; [
<translate>
        vaapiIntel
 
        vaapiVdpau
== Testing your configuration == <!--T:6-->
        libvdpau-va-gl
 
      ];
<!--T:7-->
    };
You can test your configuration by running: <code>nix-shell -p libva-utils --run vainfo</code>
    ...
</translate>
  }
<translate>
 
<!--T:8-->
See [https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Verification Arch Linux wiki#Hardware video acceleration] for more information.
</translate>
<translate>
== Applications == <!--T:9-->
</translate>
<translate>
<!--T:10-->
=== Chromium ===
See [[Chromium#Accelerated_video_playback]].
</translate>
<translate>
=== Firefox === <!--T:11-->
 
<!--T:12-->
See [https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration Arch Linux wiki#Firefox].
</translate>
<!--T:13-->
<translate>
=== MPV === <!--T:20-->
</translate>
<translate>
<!--T:21-->
You can place the following configuration in {{ic|~/.config/mpv/mpv.conf}}:
</translate>
<!--T:14-->
<syntaxHighlight lang=ini>
hwdec=auto
</syntaxHighlight>
 
<!--T:15-->
<translate>
<!--T:22-->
See [https://wiki.archlinux.org/title/mpv#Hardware_video_acceleration Arch Linux wiki#mpv].
</translate>
<translate>
<!--T:16-->
== Also see ==
* [https://wiki.archlinux.org/index.php/Hardware_video_acceleration Arch Linux wiki#Hardware video acceleration].
* [https://wiki.gentoo.org/wiki/VAAPI Gentoo Wiki#VAAPI.]
* [https://github.com/NixOS/nixos-hardware nixos-hardware] has example configurations for various types of hardware.
</translate>


== Prepared Hardware configuration ==
[[Category:Video]]
Sometimes different opengl packages are required to achieve full performance. You can check different configuration repositories for similar hardware configuration:
* [https://github.com/NixOS/nixos-hardware The NixOS-Hardware Repository]