Blog Linux Avante

Como ativar a aceleração de hardware no Chromium no Ubuntu ou Linux Mint (VA-API Patched PPA Builds)

3 de dezembro de 2020

Você deve ter notado que assistir a vídeos HD do Youtube e outros sites semelhantes nos navegadores Google Chrome ou Chromium no Linux aumenta consideravelmente o uso da CPU e, se você usa um laptop, ele fica muito quente e a bateria esgota-se muito rapidamente. Isso ocorre porque o Chrome/Chromium (Firefox também, mas não há como forçar isso) não suporta decodificação de vídeo acelerada por hardware no Linux.

Este artigo explica como instalar uma versão beta ou de desenvolvimento do Chromium que inclui um patch que habilita VA-API no Linux, trazendo suporte para decodificação de vídeo acelerada por GPU, o que deve diminuir significativamente o uso da CPU ao assistir vídeos HD online. As instruções cobrem apenas placas de vídeo Intel e Nvidia, já que não tenho uma placa de vídeo ATI/AMD para tentar isso, nem tenho experiência com essas placas de vídeo, mas pelo que li, isso deve funcionar com ATI/Gráficos AMD também.

Este é o Chromium dos repositórios do Ubuntu (18.04) sem decodificação de vídeo acelerada por GPU reproduzindo um vídeo 1080p do YouTube:

Navegador Chromium sem aceleração de hardware

O mesmo vídeo 1080p do YouTube sendo reproduzido no Chromium com o patch VA-API e decodificação de vídeo acelerada por hardware habilitada no Ubuntu 18.04:

Observe o uso da CPU nas imagens. Ambas as capturas de tela foram tiradas em meu antigo, mas ainda bastante poderoso desktop. No meu laptop, o uso da CPU Chromium sem aceleração de hardware é muito maior.

O patch para adicionar suporte VA-API ao Chromium no Linux, intitulado "Habilitar VAVDA, VAVEA e VAJDA no linux com VAAPI apenas" foi inicialmente enviado ao Chromium há mais de um ano, mas ainda a ser mesclado.

O Chrome tem a opção de substituir a lista de renderização de software (#ignore-gpu-blacklist), mas essa opção não ativa a decodificação de vídeo acelerada por hardware. Depois de habilitar esta opção, você pode encontrar o seguinte ao visitar chrome://gpu: "Video Decode: Hardware accelerated", mas isso não significa que realmente funcione. Abra um vídeo HD no YouTube e verifique o uso da CPU em uma ferramenta como htop (é o que estou usando nas capturas de tela acima para verificar o uso da CPU) - você deve ver alto uso da CPU porque a decodificação de vídeo GPU não está realmente habilitada. Há também uma seção abaixo para saber se você está realmente usando decodificação de vídeo acelerada por hardware.

Os patches usados pelas compilações do Chromium Ubuntu com VA-API habilitada usados neste artigo estão disponíveis aqui.

Como um benefício adicional, ao usar o Chromium com VA-API instalado do PPA, você consegue ter compilações nativas do Chromium (pacotes DEB reais) no Ubuntu, em vez do novo padrão de compilações do Snap Chromium, que o Ubuntu iniciou empurrando por padrão.

Instalação e uso do navegador Chromium com suporte VA-API no Ubuntu ou Linux Mint

Deve ficar claro para todos os que estão lendo isso que o Chromium Beta ou Dev Branch não é considerado estável. Então você pode encontrar bugs, pode travar, etc. Funciona bem agora, mas quem sabe o que pode acontecer após alguma atualização. Usar os PPAs abaixo substituirá sua instalação estável atual do Chromium (se já estiver instalada).

Além do mais, os repositórios Chromium Beta e Dev Branch PPA usados neste artigo requerem a execução de algumas etapas extras se você deseja habilitar o suporte a Widevine (para que você possa reproduzir vídeos Netflix e vídeos pagos do YouTube, etc.), ou se você precisar de recursos como Sync (que precisa registrar uma chave de API e configurá-la em seu sistema). As instruções para realizar esses ajustes são explicadas na descrição do Chromium Dev Branch PPA.

Para gráficos Nvidia, o driver de vídeo vdpau precisa ser atualizado para implementar vaQuerySurfaceAttributes. Portanto, um driver vdpau-va com patch é necessário para usar isso com a Nvidia. Felizmente, o Chromium-dev PPA fornece este pacote corrigido e irei vinculá-lo para que você possa baixá-lo manualmente caso queira usar o Beta PPA.

O Chromium com o patch VA-API também está disponível para algumas outras distribuições do Linux, em repositórios de terceiros, como Arch Linux (para Nvidia você precisará this patch do libva-vdpau-driver) por exemplo. Se você não usa Ubuntu ou Linux Mint, você terá que encontrar esses pacotes sozinho.

1. Adicione o Chromium com PPA de suporte VA-API.

O Chromium com suporte VA-API está disponível em dois repositórios PPA - um com Chromium Beta e outro com Chromium Dev. Escolha um dos 2 (e apenas adicione um)! O Beta PPA deve ser mais estável.

Para adicionar o Chromium PPA de ramificação beta e instalar o navegador Chromium no Ubuntu, Linux Mint e Ubuntu ou versões do Linux Mint como Xubuntu, Kubuntu, Ubuntu MATE, Lubuntu, Linux Mint MATE, et.c, use:

Comandos para usar no terminal

sudo add-apt-repository ppa:saiarcot895/chromium-beta

Você pode adicionar o Chromium Dev branch PPA e instalar a versão de desenvolvimento do navegador Chromium mais recente no Ubuntu ou Linux Mint (e outras distribuições Linux baseadas no Ubuntu, incluindo elementary, bem como Ubuntu ou Linux Mint sabores como Xubuntu, Kubuntu, Ubuntu MATE, Linux Mint MATE e assim por diante) usando:

Comandos para usar no terminal

sudo add-apt-repository ppa:saiarcot895/chromium-dev

2. Fixe o PPA com uma prioridade de 1001.

A versão do Chromium do PPA pode ser substituída por uma atualização do Ubuntu. Para evitar isso, podemos fixar os pacotes Chromium VAAPI PPA para ter uma prioridade de 1001 (com 500 sendo o padrão no Ubuntu e> 1000 significando instalar os pacotes mesmo se for um downgrade), para que os pacotes do PPA não sejam substituídos por qualquer atualização do Ubuntu, e eles podem ser instalados mesmo se a versão do sistema for mais recente. Faremos isso da seguinte maneira.

  • para o Beta PPA:

Execute isso em um terminal:

Comandos para usar no terminal

sudo nano /etc/apt/preferences.d/saiarcot895-chromium-beta-pin-1001

E cole o seguinte:

Package: *
Pin: release o=LP-PPA-saiarcot895-chromium-beta
Pin-Priority: 1001

Agora salve o arquivo e saia (no Nano, salve usando Ctrl + o e saia com Ctrl + x).

  • para o Dev PPA:

Execute em um terminal:

Comandos para usar no terminal

sudo nano /etc/apt/preferences.d/saiarcot895-chromium-dev-pin-1001

E cole o seguinte:

Package: *
Pin: release o=LP-PPA-saiarcot895-chromium-dev
Pin-Priority: 1001

Agora salve o arquivo e saia (no Nano, salve usando Ctrl + o e saia com Ctrl + x).

3. Instale o navegador Chromium a partir do Saiarcot895 (VA-API) PPA:

Comandos para usar no terminal

sudo apt update

sudo apt install chromium-browser

4. Instale o driver VA-API

Para placas de vídeo Intel, você precisará instalar o pacote i965-va-driver (pode já estar instalado):

Comandos para usar no terminal

sudo apt install i965-va-driver

Para placas de vídeo Nvidia, você precisa do patch vdpau-va-driver do Chromium Dev PPA. Se você adicionou o Chromium Dev PPA, pode instalá-lo usando este comando:

Comandos para usar no terminal

sudo apt install vdpau-va-driver

Para aqueles que usam Ubuntu 20.10 (para o qual este pacote ainda não foi carregado no PPA), você pode baixar o pacote DEB vdpau-va-driver com patch aqui e instalá-lo manualmente. Você só precisa do pacote vdpau-video (você não precisa do pacote -dbgsym) do Ubuntu 20.04 e instalá-lo. Ele funciona no Ubuntu 20.10 e 20.04.

5. Ative a opção de vídeo acelerado por hardware no Chromium.

Copie e cole o seguinte na barra de URL do Chrome: chrome://flags/#enable-accelerated-video-decode (ou pesquise a opção Hardware-accelerated video decode em chrome://flags), ative-a e reinicie o navegador Chromium.

Em uma versão padrão do Google Chrome/Chromium, esta opção aparece como indisponível, mas você poderá habilitá-la agora porque usamos a versão Chromium habilitada para VA-API.

6. Instale a extensão do Chrome h264ify.

O YouTube (e provavelmente alguns outros sites também) usa codecs de vídeo VP8 ou VP9 por padrão, e muitas GPUs não suportam decodificação de hardware para este codec. A extensão h264ify forçará o YouTube a usar H.264, que deve ser compatível com a maioria das GPUs, em vez de VP8/VP9.

Esta extensão também pode bloquear vídeos de 60fps, útil em máquinas de baixo custo.

Você pode verificar o codec usado por um vídeo do YouTube clicando com o botão direito no vídeo e selecionando Stats for nerds. Com a extensão h264ify ativada, você deve ver avc/mp4a como os codecs. Sem essa extensão, o codec deve ser algo como vp09/opus.

7. [Somente Nvidia] A partir do Chromium 76, os usuários da Nvidia devem iniciar o navegador Chromium com o sinalizador --use-gl=desktop para desativar o ANGLE. Sem isso, a decodificação de vídeo acelerada por hardware não funcionará.

Portanto, você precisará iniciar o navegador Chromium assim:

Comandos para usar no terminal

chromium-browser --use-gl=desktop

Você pode copiar o arquivo da área de trabalho do Chromium de /usr/share/applications/ para ~/.local/share/applications/ e modificar sua linha Exec para incluir este sinalizador. Dessa forma, ao iniciar o navegador Chromium, ele usará automaticamente este sinalizador (e não será substituído por atualizações):

Comandos para usar no terminal

cp /usr/share/applications/chromium-browser.desktop ~/.local/share/applications/sed -i 's/Exec=chromium-browser %U/Exec=chromium-browser --use-gl=desktop %U/' ~/.local/share/applications/chromium-browser.desktop

Como verificar se o Chromium está usando decodificação de vídeo GPU

Abra um vídeo no YouTube. Em seguida, abra uma nova guia no Chromium e digite o seguinte na barra de URL: 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. Se o valor kVideoDecoderName for MojoVideoDecoder (anteriormente era GpuVideoDecoder, mas agora as compilações do Chromium usam MojoVideoDecoder no Linux), isso significa que o vídeo que está sendo reproduzido no YouTube na outra guia está usando decodificação de vídeo acelerada por hardware.

Chromium check vaapi mojovideodecoder

Se estiver escrito FFmpegVideoDecoder ou VpxVideoDecoder, a decodificação acelerada de vídeo não está funcionando ou talvez você tenha se esquecido de instalar ou desabilitar a extensão h264ify do Chrome.

Se não estiver funcionando, você pode tentar depurá-lo executando chromium-browser na linha de comando e ver se mostra algum erro relacionado ao VA-API. Você também pode executar vainfo (instale-o no Ubuntu ou Linux Mint: sudo apt install vainfo) e vdpauinfo (para Nvidia; instale-o no Ubuntu ou Linux Mint: sudo apt install vdpauinfo) e veja se mostra um erro.

Como remover o Chromium com patches VA-API e usar as compilações estáveis oficiais do Ubuntu/Linux Mint Chromium

Se você deseja remover completamente as compilações do Chromium com VA-API do seu sistema e reverter para as compilações do navegador Chromium estáveis oficiais fornecidas pelo Ubuntu/Linux Mint, você pode limpar o PPA.

Para limpar um PPA, você precisará do utilitário de limpeza PPA, que pode ser instalado usando:

Comandos para usar no terminal

sudo apt install ppa-purge

Em seguida, limpe o Chromium PPA que você adicionou:

  • Chromium Beta PPA:

Comandos para usar no terminal

sudo ppa-purge ppa:saiarcot895/chromium-beta

  • Chromium Dev PPA:

Comandos para usar no terminal

sudo ppa-purge ppa:saiarcot895/chromium-dev

Também vamos remover o arquivo de preferências do APT que usamos para fixar este PPA, porque ele não está mais fazendo nada:

Comandos para usar no terminal

sudo rm /etc/apt/preferences.d/saiarcot895-chromium-*-pin-1001

Confira a versão original desse post em inglês
Propaganda
Blog Comments powered by Disqus.