Transcodificador Intel VPL: hardware suportado

Qual hardware Intel é adequado para a transcodificação por hardware, quais codecs estão disponíveis nas diferentes gerações de gráficos e como verificar que o hardware foi reconhecido. A instalação dos pacotes do transcodificador está descrita na seção Transcodificadores; a configuração do próprio transcodificador — em Transcodificadores.

Em resumo: é necessária uma placa gráfica Intel integrada ou dedicada de nível Gen9 ou superior. O transcodificador detecta qual runtime Intel está presente na máquina e se conecta a ele; um mesmo arquivo executável tcivpl funciona tanto em hardware novo quanto em hardware antigo.

Dois runtimes Intel

Runtime

Hardware

oneVPL (VPL v2)

Gen12 e mais recentes: Tiger Lake, Rocket Lake, Alder Lake (incluindo Alder Lake-N: N100, N305), Raptor Lake, Arc

Media SDK v1 (MSDK v1)

Gen9–Gen11: Skylake, Kaby Lake, Coffee Lake, Comet Lake, Ice Lake

A escolha do runtime é automática e não exige configuração à parte: o dispatcher VPL lista as implementações encontradas para o dispositivo /dev/dri/renderD<N> selecionado, e o transcodificador utiliza a primeira que seja adequada à operação por hardware. Não há no transcodificador uma regra própria de «preferir o VPL v2» — para Gen9–Gen11 o novo runtime simplesmente não existe, portanto ali sempre se encontra o Media SDK v1, ao passo que em Gen12 e mais recentes normalmente está instalado apenas o oneVPL.

Leve isso em conta ao escolher o hardware: os procedimentos de instalação do transcodificador (Transcodificadores) instalam apenas o runtime VPL v2, ou seja, são destinados a Gen12 e mais recentes. Para Gen9–Gen11 o runtime Media SDK v1 é instalado separadamente e pode não estar presente nas distribuições recentes (veja abaixo).

Codecs

Runtime

Decodificação

Codificação

VPL v2 (Gen12+)

H.264, HEVC, MPEG-2

H.264, HEVC, MPEG-2

MSDK v1 (Gen9–Gen11)

H.264, MPEG-2

H.264, MPEG-2

O que não está disponível:

  • HEVC não é suportado no MSDK v1 — nem a decodificação, nem a codificação: no Media SDK v1 o HEVC é disponibilizado por meio de uma interface de plugin que o dispatcher oneVPL não oferece. Para HEVC é necessária uma máquina Gen12 ou mais recente. Ao tentar, o transcodificador registra um erro explícito — HEVC decode is not supported on the Intel Media SDK v1 runtime ou HEVC encode is not supported on the Intel Media SDK v1 runtime.

  • AV1, VP9 e VC-1 não são suportados por nenhum dos runtimes — na radiodifusão eles não são necessários.

Os três codecs listados são o máximo com que o transcodificador consegue trabalhar. No VPL v2 ele não impõe restrições próprias, portanto o conjunto real de codecs de um adaptador específico é determinado pelo runtime; o que está disponível na máquina é mostrado por tcivpl --hw-list (veja abaixo). A matriz geral de codecs do transcodificador, independente do backend, é apresentada em Backends e codecs.

Hardware Atom reduzido: não suportado

As plataformas baseadas em núcleos Atom anteriores ao Gen12 — Apollo Lake, Gemini Lake, Elkhart Lake, Jasper Lake (Celeron e Pentium das séries J e N: J4125, J6412, N5105 e semelhantes) — não são adequadas para transcodificação.

O motor de mídia delas é reduzido: não há codificação por hardware completa e a codificação MPEG-2 não existe de forma alguma. A decodificação nesses chips pode funcionar, mas não há com o que transcodificar — utilize o transcodificador por software (o pacote pstreamer-tcsw) ou outro hardware. O transcodificador não descarta esse hardware antecipadamente: ele é iniciado e termina com erro na inicialização do codificador.

Uma exceção importante: Alder Lake-N (N100, N305 e semelhantes) também são núcleos Atom, mas seus gráficos são um Gen12 completo e eles são suportados.

À parte disso: os processadores Atom antigos não possuem AVX, enquanto parte dos pacotes prontos da Intel é compilada com AVX. Nesse caso o processo do transcodificador falha com Illegal instruction — as instruções são executadas pela biblioteca do driver ou do runtime Intel carregada no processo, e não pelo código do próprio transcodificador.

O que deve estar instalado

Componente

RHEL / AlmaLinux / Rocky

Debian / Ubuntu

Driver VA-API iHD (obrigatório)

intel-media-driver

intel-media-va-driver-non-free

Runtime VPL v2 (Gen12+)

intel-vpl-gpu-rt

libmfxgen1

Runtime MSDK v1 (Gen9–Gen11)

intel-mediasdk

libmfx1

VA-API, DRM

libva, libdrm

libva2, libva-drm2, libdrm2

É necessário exatamente um runtime — aquele que corresponde ao hardware. O driver iHD é obrigatório em qualquer caso: no antigo i965 a inicialização do VA-API é concluída, mas o decodificador não sobe, e não há nenhuma mensagem específica sobre isso — o driver fica visível apenas no registro na partida do fluxo. No Debian e no Ubuntu escolha justamente a variante intel-media-va-driver-non-free: em intel-media-va-driver parte dos codecs foi removida.

Os nomes dos pacotes dependem de onde eles são instalados. Os nomes Debian indicados são os do repositório Intel Graphics, que é adicionado conforme o procedimento de instalação (Ubuntu 22/24); no repositório próprio do Ubuntu o mesmo runtime VPL v2 se chama libmfx-gen1.2 e as versões ali são bem mais antigas.

O dispatcher do Intel VPL (nas distribuições — libvpl2) é fornecido como parte do pacote do transcodificador: ele é instalado em /opt/pss/lib/libvpl.so.2 e o caminho é registrado no diretório /etc/ld.so.conf.d/. Mas o dispatcher apenas seleciona o runtime — se não houver na máquina um runtime adequado, não há com o que transcodificar.

O runtime MSDK v1 foi retirado das distribuições recentes: intel-mediasdk está presente no EPEL 9, mas não no EPEL 10; libmfx1 está presente no Debian 12 e no Ubuntu 24.04, mas já não está nas versões seguintes. Nesses sistemas, para o hardware Gen9–Gen11, o runtime terá de ser instalado separadamente.

O pacote do transcodificador não traz consigo nem o driver nem o runtime, portanto uma instalação bem-sucedida por si só não significa que a transcodificação por hardware vá funcionar — isso é verificado separadamente. Considere também que o usuário do serviço deve ter acesso aos dispositivos /dev/dri (Ubuntu 22/24).

Como verificar

/usr/local/bin/tcivpl --hw-list

O comando imprime um XML com a lista das implementações encontradas pelo dispatcher VPL — em uma única linha, sem quebras. Para cada uma são indicados o nome do runtime (device-name), a versão da API, as listas de codecs do decodificador e do codificador, o adaptador e o indicador de aptidão para a operação por hardware. Exemplo de saída em Gen9–Gen11 (mostrado com quebras de linha para facilitar a leitura):

<vpl mfx-version="2.15">
  <device id="0" device-name="mfxhw64" api-version="1.35" legacy="1"
          dec-codecs="h264,mpeg2" enc-codecs="h264,mpeg2"
          vendor-id="8086" device-id="4555" drm-render="128"
          supported="1"/>
</vpl>

Como ler a saída:

  • legacy="1" — a implementação informa uma versão da API inferior a 2.0, ou seja, trata-se do antigo runtime Media SDK v1; sem esse indicador — oneVPL 2.x. É nesse indicador e em api-version que se deve basear em primeiro lugar: o valor de device-name vem do dispatcher tal como está (na prática — mfxhw64 para o Media SDK v1 e mfx-gen para o oneVPL).

  • supported="1" — a implementação é adequada à operação por hardware. Uma entrada sem esse indicador equivale à sua ausência.

  • Para o Media SDK v1 a lista de codecs é sempre h264,mpeg2 — este é o conjunto suportado pelo transcodificador nesse runtime, e não o resultado de uma consulta ao hardware. Para o oneVPL as listas são obtidas a partir do que o runtime informa.

  • mfx-version — a versão da API dos cabeçalhos com os quais o transcodificador foi compilado, e não a versão do runtime instalado.

Uma lista vazia (o elemento <vpl> sem nenhum <device>) significa que não haverá transcodificação por hardware nesta máquina: o runtime ou o driver não está instalado, a GPU não é Intel ou não há acesso a /dev/dri. A mensagem No vpl libraries found é um caso à parte: não foi encontrada a própria biblioteca do dispatcher.

O comando apenas lista as implementações e não seleciona nada. Qual delas será utilizada é determinado na inicialização do fluxo — pelo dispositivo definido nas configurações do transcodificador. Na partida do fluxo o transcodificador escreve duas linhas no registro: o runtime selecionado com a versão da API e a versão do VA-API junto com o nome do driver. Pela segunda linha vê-se que está funcionando justamente o driver iHD, e não o i965.

Os backends de transcodificação detectados, suas versões e os dispositivos encontrados também são mostrados na tela «Sobre» (Sobre o sistema), e a carga da GPU — na tela «Monitor do Sistema» (Monitor do Sistema).