Accelerated Video Playback: Difference between revisions

Ibizaman (talk | contribs)
m Add an example for AMD iGPU. I'm adding it because I searched examples in the wiki and elsewhere and didn't find anything related to AMD. It was maybe too obvious but just one line of config is enough.
TLATER (talk | contribs)
m Add missing module args to he nvidia config example
 
(19 intermediate revisions by 7 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.graphics.extraPackages}}.
</translate>


This is done by adding relevant <code>libva</code>-related packages to the <code>hardware.opengl.extraPackages</code> option.
<translate>
 
== Installation == <!--T:18-->
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 === <!--T:19-->
 
</translate>
Sample Intel configuration:
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
<syntaxHighlight lang=nix>
{
{
  ...
   hardware.graphics = {
  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
      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.graphics.extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
}
</nowiki>}}
<translate>
=== AMD === <!--T:4-->


AMD configuration (at least for Ryzen 5 iGPUs) works out of the box:<syntaxhighlight lang="nix">
<!--T:5-->
AMD configuration (at least for Ryzen 5 iGPUs) works out of the box:
</translate>
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
{
   hardware.opengl.enable = true;
   hardware.graphics.enable = true;
}
}
</syntaxhighlight>
</nowiki>}}
 
<translate>
=== NVIDIA ===


== Prepared Hardware configuration ==
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>.
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]


== Testing your configuration ==
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.


You can test your configuration by running: <code>nix-shell -p libva-utils --run vainfo</code>
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>


See [https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Verification Hardware video acceleration: Verification (Arch Wiki)] for more information.
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{ config, lib, ...}: {
  environment.variables.LIBVA_DRIVER_NAME = "nvidia"


== Applications ==
  # If used with Firefox
  environment.variables.MOZ_DISABLE_RDD_SANDBOX = "1";


===Chromium===
  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";


See [[Chromium#Enable GPU accelerated video decoding (VA-API) | Chromium]].
    "gfx.x11-egl.force-enabled" = true;
    "widget.dmabuf.force-enabled" = true;


=== Firefox ===
    # 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;
  };
}
</nowiki>}}
<translate>


See [https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration Firefox#Hardware_video_acceleration (ArchWiki)].
== Testing your configuration == <!--T:6-->


===[[MPV]]===
<!--T:7-->
You can place the following configuration in <code>~/.config/mpv/mpv.conf</code>
You can test your configuration by running: <code>nix-shell -p libva-utils --run vainfo</code>
for mpv to use hardware acceleration for VP9 on Intel Broadwell (and probably later):
</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>
<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>
<!--T:22-->
gpu-context=wayland
See [https://wiki.archlinux.org/title/mpv#Hardware_video_acceleration Arch Linux wiki#mpv].
</syntaxHighlight>
</translate>
 
<translate>
This is based on the [https://wiki.archlinux.org/title/mpv#Hardware_video_acceleration Arch Linux mpv article].
<!--T:16-->
== 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].