Accelerated Video Playback: Difference between revisions

From NixOS Wiki
imported>Madsrumlenordstrom
m Changed vaapiIntel to its new package name intel-vaapi-driver. Currently vaapiIntel is aliases to intel-vaapi-driver so in the given example (before my edit) a collision would occur if vaapiIntel was attempted installed along with intel-vaapi-driver.
Unabomberlive (talk | contribs)
No edit summary
(16 intermediate revisions by 6 users not shown)
Line 1: Line 1:
This page is meant to help with techniques for getting accelerated video playback working in NixOS. This is generally done via libva and vaapi (and sometimes vdpau).
<languages/>
<translate>
<!--T:1-->
Accelerated video playback in NixOS is generally done by adding relevant packages to {{nixos:option|hardware.opengl.extraPackages}}.
</translate>


This is done by adding relevant <code>libva</code>-related packages to the <code>hardware.opengl.extraPackages</code> option.
<translate>
 
== Installation ==
Additionally, the <code>intel-vaapi-driver</code> (previously <code>vaapiIntel</code>) package can be overridden to enable [https://github.com/01org/intel-hybrid-driver Intel's Hybrid Driver].
</translate>
 
<translate>
Intel users also can enable <code>intel-media-driver</code>. It can be used at runtime with <code>LIBVA_DRIVER_NAME=iHD mpv ...</code> for example, if you use Mic92's mpv settings below.
=== Intel ===
 
</translate>
Sample configuration:
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
<syntaxHighlight lang=nix>
{
{
   ...
   hardware.graphics = { # hardware.opengl in 24.05 and older
  nixpkgs.config.packageOverrides = pkgs: {
    intel-vaapi-driver = pkgs.intel-vaapi-driver.override { enableHybridCodec = true; };
  };
  hardware.opengl = {
     enable = true;
     enable = true;
     extraPackages = with pkgs; [
     extraPackages = with pkgs; [
       intel-media-driver # LIBVA_DRIVER_NAME=iHD
       intel-media-driver # For Broadwell (2014) or newer processors. LIBVA_DRIVER_NAME=iHD
       intel-vaapi-driver # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
       intel-vaapi-driver # For older processors. LIBVA_DRIVER_NAME=i965
      vaapiVdpau
      libvdpau-va-gl
     ];
     ];
   };
   };
   environment.sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; }; # Force intel-media-driver
   environment.sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; }; # Optionally, set the environment variable
  ...
}
}
</syntaxHighlight>
</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>


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


== Prepared Hardware configuration ==
<!--T:5-->
Sometimes different opengl packages are required to achieve full performance. You can check different configuration repositories for similar hardware configuration:
AMD configuration (at least for Ryzen 5 iGPUs) works out of the box:
* [https://github.com/NixOS/nixos-hardware The NixOS-Hardware Repository]
</translate>
 
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
== Testing your configuration ==
{
  hardware.opengl.enable = true;
}
</nowiki>}}
<translate>
== Testing your configuration == <!--T:6-->


<!--T:7-->
You can test your configuration by running: <code>nix-shell -p libva-utils --run vainfo</code>
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>
=== Chromium === <!--T:10-->
See [[Chromium#Accelerated_video_playback]].
</translate>
<translate>
=== Firefox === <!--T:11-->


See [https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Verification Hardware video acceleration: Verification (Arch Wiki)] for more information.
<!--T:12-->
 
See [https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration Arch Linux wiki#Firefox].
== Applications ==
</translate>
 
<!--T:13-->
===Chromium===
<translate>
 
=== MPV ===
See [https://nixos.wiki/wiki/Chromium#Enable_GPU_accelerated_video_decoding_.28VA-API.29 Chromium].
</translate>
 
<translate>
=== Firefox ===
You can place the following configuration in {{ic|~/.config/mpv/mpv.conf}}:
 
</translate>
See [https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration Firefox#Hardware_video_acceleration (ArchWiki)].
<!--T:14-->
 
===[[MPV]]===
You can place the following configuration in <code>~/.config/mpv/mpv.conf</code>
for mpv to use hardware acceleration for VP9 on Intel Broadwell (and probably later):
 
<syntaxHighlight lang=ini>
<syntaxHighlight lang=ini>
hwdec=auto-safe
hwdec=auto-safe
vo=gpu
vo=gpu
profile=gpu-hq
profile=gpu-hq
gpu-context=wayland ; On wayland only
</syntaxHighlight>
</syntaxHighlight>


With Wayland, you need to nudge mpv to do the right thing:
<!--T:15-->
 
<translate>
<syntaxHighlight lang=ini>
See [https://wiki.archlinux.org/title/mpv#Hardware_video_acceleration Arch Linux wiki#mpv].
gpu-context=wayland
</translate>
</syntaxHighlight>
<translate>
 
<!--T:16-->
This is based on the [https://wiki.archlinux.org/title/mpv#Hardware_video_acceleration Arch Linux mpv article].
== Also see ==
* [https://wiki.archlinux.org/index.php/Hardware_video_acceleration Arch Linux wiki#Hardware video acceleration].
* [https://github.com/NixOS/nixos-hardware nixos-hardware] has example configurations for various types of hardware.
</translate>


===Other===
[[Category:Video]]
See the [https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Application_support Arch Linux wiki].

Revision as of 13:54, 21 July 2024

Accelerated video playback in NixOS is generally done by adding relevant packages to hardware.opengl.extraPackages.

Installation

Intel

/etc/nixos/configuration.nix
{
  hardware.graphics = { # hardware.opengl in 24.05 and older 
    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
}

Note, intel-vaapi-driver still performs better for browsers (gecko/chromium based) on newer Skylake (2015) processors.[1]

For 32-bit support, use hardware.graphics.extraPackages32:

/etc/nixos/configuration.nix
{
  # hardware.opengl.extraPackages32 in 24.05
  hardware.graphics.extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
}

AMD

AMD configuration (at least for Ryzen 5 iGPUs) works out of the box:

/etc/nixos/configuration.nix
{
  hardware.opengl.enable = true;
}

Testing your configuration

You can test your configuration by running: nix-shell -p libva-utils --run vainfo See Arch Linux wiki#Hardware video acceleration for more information.

Applications

Chromium

See Chromium#Accelerated_video_playback.

Firefox

See Arch Linux wiki#Firefox.

MPV

You can place the following configuration in ~/.config/mpv/mpv.conf:

hwdec=auto-safe
vo=gpu
profile=gpu-hq
gpu-context=wayland ; On wayland only

See Arch Linux wiki#mpv.

Also see