Transcodificador Intel VPL: hardware suportado¶
Que 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 se o hardware foi reconhecido. A instalação dos pacotes do transcodificador está descrita na seção Transcodificadores, e 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 usa a primeira que seja adequada à operação por hardware. O transcodificador não tem uma regra própria de «preferir o VPL v2» — para Gen9–Gen11 o novo runtime não existe, por isso ali sempre se encontra o Media SDK v1, enquanto em Gen12 e mais recentes normalmente só o oneVPL está instalado.
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 é conectado por meio de uma interface de plugins 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 runtimeouHEVC 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.
Elas têm um motor de mídia reduzido: não há codificação por hardware completa, e codificação MPEG-2 não há nenhuma. A decodificação nesses chips pode funcionar, mas não há com o que transcodificar: use 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.
Além 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) |
|
|
Runtime VPL v2 (Gen12+) |
|
|
Runtime MSDK v1 (Gen9–Gen11) |
|
|
VA-API, DRM |
|
|
É necessário exatamente um runtime: aquele que corresponde ao hardware. O driver iHD é obrigatório em qualquer caso: com o antigo i965 a inicialização do VA-API é concluída, mas o decodificador não sobe. Não há nenhuma mensagem específica sobre isso: o driver só aparece no registro na partida do fluxo. No Debian e no Ubuntu, use 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. Lembre-se também de 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 emapi-versionque se deve basear em primeiro lugar: o valor dedevice-namevem do dispatcher tal como está (na prática —mfxhw64para o Media SDK v1 emfx-genpara 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á usada é 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. A segunda linha mostra 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 o sistema» (Sobre o sistema), e a carga da GPU — na tela «Monitor do Sistema» (Monitor do Sistema).