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 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.
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) |
|
|
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: 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 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á 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).