Como ativar a decodificação de vídeo acelerada por hardware nos navegadores Google Chrome, Brave, Vivaldi e Opera no Debian, Ubuntu ou Linux Mint

27 de janeiro de 2021

Hardware acceleration MojoVideoDecoder Google Chrome Vivaldi Opera Brave Linux

O Google Chrome 88 (e mais recente) tornou a decodificação de vídeo acelerada por hardware disponível no Linux, mas não é habilitada por padrão. No entanto, o Google Chrome não é o único navegador baseado em Chromium a suportar aceleração de hardware no Linux. Este artigo explica como habilitar a decodificação de vídeo acelerada por hardware nos navegadores Google Chrome, Brave, Vivaldi e Opera em execução no Debian, Ubuntu, Pop!_OS ou Linux Mint (somente Xorg).

Usar a decodificação de vídeo acelerada por hardware em seu navegador deve resultar em menos uso da CPU (e, portanto, menos consumo de bateria) ao reproduzir vídeos online.

É importante notar que o navegador da web Chromium tinha patches que permitiam a decodificação de vídeo acelerada por hardware disponível no Linux por algum tempo, e algumas distribuições Linux o empacotaram usando esses patches. Portanto, os usuários do Chromium têm aceleração de hardware no Linux há algum tempo, dependendo da distribuição do Linux ou se instalaram o Chromium corrigido de alguma outra forma. Por exemplo. no Ubuntu/Linux Mint há um PPA com compilações do Chromium com patch VA-API. Portanto, essas instruções também podem funcionar para o navegador Chromium, dependendo de como ele é compilado.

Também gostaria de acrescentar que essas instruções para habilitar a decodificação de vídeo acelerada por hardware também funcionam em outras distribuições Linux, e não apenas em distribuições Linux baseadas em Debian/Ubuntu, no entanto, os nomes dos drivers são diferentes.

Testei essas instruções usando o desktop Ubuntu 20.10 com gráficos Nvidia e os navegadores listados abaixo foram instalados usando o pacote original do Ubuntu (usando um pacote DEB). Também testado usando um laptop com gráficos Intel (10ª geração) no Ubuntu 20.04 e 20.10.

Em meu teste, consegui fazer com que a decodificação de vídeo acelerada por hardware funcionasse no Linux usando:

  • Google Chrome estável 88
  • Brave estável 1,19
  • Snap do Vivaldi 3.6
  • Opera Beta 74

Obviamente, deve continuar a funcionar com versões mais recentes do que essas (por exemplo, Google Chrome 89, Brave 1.20, etc.).

Para mim, a decodificação de vídeo acelerada por hardware não funcionou usando:

  • Vivaldi estável 3,5
  • Opera estável 73
  • Microsoft Edge - não há nem mesmo um sinalizador chrome://flags/#enable-accelerated-video-decode (para permitir a decodificação de vídeo acelerada por hardware).

Além disso, isso não funciona no Wayland. Você pode usar VA-API no XWayland, usando a sinalização de linha de comando --use-gl=egl, mas eu não tentei.

Como habilitar a decodificação de vídeo acelerada por hardware nos navegadores Google Chrome, Brave, Vivaldi e Opera no Debian, Ubuntu ou Linux Mint

Coisas que você precisa para habilitar a decodificação de vídeo acelerada por hardware nos navegadores da web que mencionei acima (então Google Chrome 88+, Brave 1.19+, Vivaldi 3.6+ e Opera 74+):

1. Ative os seguintes sinalizadores de navegador da web:

  • Substituir lista de renderização de software: chrome://flags/#ignore-gpu-blocklist
  • Decodificação de vídeo acelerada por hardware: chrome://flags/#enable-accelerated-video-decode

2. Instale o driver VA-API para poder decodificar a mídia (fonte):

  • Para hardware Intel Gen 7 e anterior:

Comandos para usar no terminal

sudo apt install i965-va-driver-shaders

  • Para hardware Intel Gen 8+:

Comandos para usar no terminal

sudo apt install intel-media-va-driver-non-free

  • Para drivers Nouveau e AMD (não consegui fazer nenhum navegador usar aceleração de hardware com os drivers Nouveau, talvez você tenha mais sorte):

Comandos para usar no terminal

sudo apt install mesa-va-drivers

  • Para drivers proprietários da Nvidia - você pode instalá-los a partir dos repositórios ou usando o Proprietary GPU Drivers PPA (por exemplo, inicie a caixa de diálogo Drivers adicionais no Ubuntu e instale-o a partir daí). Se estiver usando drivers proprietários da Nvidia, você também precisará de um vdpau-va-driver com patch. Você pode obtê-lo aqui para Ubuntu/Linux Mint. O pacote Ubuntu 20.04 de lá também funciona no Ubuntu 20.10 e mais recente. Se você quiser ver os patches usados por este pacote, baixe o arquivo .debian.tar.gz (do mesmo link acima) e olhe dentro da pasta "patches".

Por que as versões não gratuitas do intel-media-va-driver e do i965-va-driver? Em teoria, isso deve funcionar com a versão gratuita (?), Mas em meu teste em um laptop com Intel Gen 10, a decodificação de vídeo acelerada por hardware funcionou apenas com o driver intel-media-va-driver-non-free, e não intel-media-va-driver (não tenho certeza sobre o driver i965, mas presumi que poderia ser semelhante).

3. Necessário apenas para placas gráficas que não suportam decodificação de vídeo por hardware VP9: instale a extensão do navegador h264ify.

Se sua placa de vídeo não suporta decodificação de vídeo de hardware VP9, instale a extensão do navegador h264ify (ou Enhanced-h264ify - alguns usuários dizem que isso funciona para eles, enquanto a extensão original não; para mim é o contrário) e certifique-se de que está habilitado para VP9.

Se você ainda não vê o MojoVideoDecoder na guia chrome://media-internals (veja abaixo na seção para saber como verificar se a decodificação de vídeo acelerada por hardware está ativada e realmente usada pelo navegador), tente reiniciar o navegador da web após instalar esta extensão. Já vi casos em que isso era necessário e alguns em que não era.

4. Inicie o navegador da web usando a sinalização --use-gl=desktop para ativar a aceleração de hardware VA-API.

Para poder usar VA-API para decodificação de vídeo, você precisará iniciar o navegador da web, seja ele Chromium, Google Chrome, Brave, Opera ou Vivaldi, usando a seguinte sinalização de linha de comando: --use-gl=desktop. Isso faz com que o navegador da web use OpenGL e desative o ANGLE como back-end de renderização. Embora haja lugares onde eu li que isso não deveria ser mais necessário, isso foi necessário em meu teste, com gráficos Nvidia e Intel (não tenho gráficos AMD para testar isso).

Por exemplo. para iniciar o Google Chrome usando este sinalizador:

Comandos para usar no terminal

google-chrome-stable --use-gl=desktop

Inicie o Brave usando este:

Comandos para usar no terminal

brave-browser --use-gl=desktop

E assim por diante.

Para tornar esta alteração permanente, copie o arquivo .desktop do navegador de /usr/share/applications para ~/.local/share/applications (se esta pasta não existir, crie-a). Ao copiar o arquivo aqui, garantimos que ele não será substituído por uma atualização. Em seguida, abra o arquivo .desktop (por exemplo, brave-browser.desktop, brave-browser-beta.desktop, google-chrome.desktop, etc.) a partir deste local ~/.local/share/applications, com um editor de texto. Nesse arquivo, procure a linha que começa com Exec= e altere o executável para incluir --use-gl=desktop. Por exemplo, para Brave: Exec=/usr/bin/brave-browser-stable --use-gl=desktop, ou para Google Chrome: Exec=/usr/bin/google-chrome-stable --use-gl=desktop %U

Observação importante: Se você vir uma imagem de vídeo completamente branca depois de fazer isso e estiver usando os drivers proprietários da Nvidia, verifique chrome://flags e certifique-se de que o Vulkan não está habilitado lá. Ter o Vulkan ativado, mas iniciar o navegador usando a opção --use-gl=desktop fará com que isso aconteça.

Outra observação, desta vez para usuários do Opera: se depois de usar a extensão h264ify, você não puder mais reproduzir vídeos no YouTube e outros sites semelhantes, consulte soluções daqui para habilitar o suporte h264 no Opera (observe que se o navegador da web que você está usando for Opera Beta, a pasta deve ser /opera-beta).

É isso aí.

Como verificar se a decodificação de vídeo acelerada por hardware está habilitada e funcionando em qualquer navegador da web baseado em Chromium

Agora vamos verificar se o navegador da Web está usando decodificação de vídeo acelerada por hardware.

Primeiro, vamos verificar se o navegador oferece suporte a vídeo acelerado por hardware. Faça isso abrindo uma nova guia e visitando chrome://gpu. Nesta página, você verá "Video Decode: Hardware accelerated" (em verde, como aqui):

Chrome video decodificar hardware acelerado Linux

Isso significa que seu navegador da web agora oferece suporte para decodificação de vídeo acelerada por hardware. Mas é realmente capaz de decodificar vídeo por hardware? Vamos verificar isso também, abrindo um vídeo do YouTube em uma guia, deixe essa guia em execução e abra uma nova guia com chrome://media-internals.

Na guia chrome://media-internals, clique no URL do vídeo (para expandi-lo), role para baixo e procure em Player Properties, e você deve encontrar a propriedade kVideoDecoderName:

Google Chrome MojoVideoDecoder Linux

Se o valor kVideoDecoderName for MojoVideoDecoder (anteriormente era GpuVideoDecoder, mas agora MojoVideoDecoder é usado no Linux), significa que o vídeo que está sendo reproduzido atualmente no YouTube na outra guia está usando decodificação de vídeo acelerada por hardware. Todos os outros valores kVideoDecoderName (VpxVideoDecoder, FFmpegVideoDecoder e Dav1dVideoDecoder) significam que o vídeo reproduzido na outra guia do navegador está usando renderização de software.

Propaganda
Propaganda