Transcodificador Intel VPL: hardware compatible

Qué hardware Intel es adecuado para la transcodificación por hardware, qué códecs están disponibles en las distintas generaciones de gráficos y cómo asegurarse de que el hardware ha sido reconocido. La instalación de los paquetes del transcodificador se describe en la sección Transcodificadores, y la configuración del propio transcodificador, en Transcodificadores.

En resumen: se requieren gráficos Intel integrados o discretos de nivel Gen9 o superior. El transcodificador determina qué entorno de ejecución de Intel hay en la máquina y se conecta a él; un mismo ejecutable tcivpl funciona tanto en hardware nuevo como en hardware antiguo.

Los dos entornos de ejecución de Intel

Entorno de ejecución

Equipamiento

oneVPL (VPL v2)

Gen12 y posteriores: Tiger Lake, Rocket Lake, Alder Lake (incluido Alder Lake-N: N100, N305), Raptor Lake, Arc

Media SDK v1 (MSDK v1)

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

La selección del entorno de ejecución es automática y no requiere una configuración aparte: el despachador VPL enumera las implementaciones encontradas para el dispositivo /dev/dri/renderD<N> seleccionado, y el transcodificador toma la primera que sea apta para el funcionamiento por hardware. El transcodificador no tiene una regla propia de «preferir VPL v2»: para Gen9–Gen11 el nuevo entorno de ejecución sencillamente no existe, por lo que allí siempre resulta ser Media SDK v1, mientras que en Gen12 y posteriores normalmente solo está instalado oneVPL.

Téngalo en cuenta al seleccionar el hardware: los procedimientos de instalación del transcodificador (Transcodificadores) instalan únicamente el entorno de ejecución VPL v2, es decir, están pensados para Gen12 y posteriores. Para Gen9–Gen11 el entorno de ejecución Media SDK v1 se instala por separado y en las distribuciones recientes puede no estar presente (véase más abajo).

Códecs

Entorno de ejecución

Decodificación

Codificación

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

Lo que no está disponible:

  • HEVC no se admite en MSDK v1: ni la decodificación ni la codificación. En Media SDK v1 el HEVC se conecta a través de una interfaz de plugins que el despachador oneVPL no ofrece. Para HEVC se necesita una máquina Gen12 o posterior. Al intentarlo, el transcodificador escribe un error explícito: HEVC decode is not supported on the Intel Media SDK v1 runtime o HEVC encode is not supported on the Intel Media SDK v1 runtime.

  • AV1, VP9 y VC-1 no se admiten en ninguno de los dos entornos de ejecución: en radiodifusión no son necesarios.

Los tres códecs enumerados son el máximo con el que el transcodificador es capaz de trabajar. En VPL v2 no impone limitaciones propias, por lo que el conjunto real de códecs de un adaptador concreto lo determina el entorno de ejecución; lo que está disponible en la máquina lo muestra tcivpl --hw-list (véase más abajo). La matriz general de códecs del transcodificador, independiente del backend, se recoge en Backends y códecs.

Hardware Atom recortado: no compatible

Las plataformas basadas en núcleos Atom anteriores a Gen12 — Apollo Lake, Gemini Lake, Elkhart Lake, Jasper Lake (Celeron y Pentium de las series J y N: J4125, J6412, N5105 y similares) — no son adecuadas para la transcodificación.

Su motor multimedia está recortado: no hay codificación por hardware completa y la codificación MPEG-2 falta por completo. La decodificación en tales chips puede funcionar, pero no hay con qué transcodificar: utilice el transcodificador por software (paquete pstreamer-tcsw) u otro hardware. El transcodificador no descarta de antemano ese hardware: se inicia y termina con un error al inicializar el codificador.

Excepción importante: Alder Lake-N (N100, N305 y similares) también son núcleos Atom, pero sus gráficos son Gen12 completos y sí son compatibles.

Aparte: los procesadores Atom antiguos carecen de AVX, mientras que una parte de los paquetes precompilados de Intel está compilada con AVX. En ese caso el proceso del transcodificador termina abruptamente con Illegal instruction: las instrucciones las ejecuta la biblioteca del controlador o del entorno de ejecución de Intel cargada en el proceso, no el código del propio transcodificador.

Qué debe estar instalado

Componente

RHEL / AlmaLinux / Rocky

Debian / Ubuntu

Controlador VA-API iHD (obligatorio)

intel-media-driver

intel-media-va-driver-non-free

Entorno de ejecución VPL v2 (Gen12+)

intel-vpl-gpu-rt

libmfxgen1

Entorno de ejecución MSDK v1 (Gen9–Gen11)

intel-mediasdk

libmfx1

VA-API, DRM

libva, libdrm

libva2, libva-drm2, libdrm2

Se necesita exactamente un entorno de ejecución: el que corresponda al hardware. El controlador iHD es obligatorio en cualquier caso: con el antiguo i965 la inicialización de VA-API se completa, pero el decodificador no arranca, y además no hay ningún mensaje específico al respecto: el controlador solo se ve en el registro al arrancar el flujo. En Debian y Ubuntu utilice precisamente la variante intel-media-va-driver-non-free: en intel-media-va-driver una parte de los códecs está recortada.

Los nombres de los paquetes dependen de dónde se instalen. Los nombres de Debian indicados proceden del repositorio Intel Graphics, que se añade según el procedimiento de instalación (Ubuntu 22/24); en el repositorio propio de Ubuntu ese mismo entorno de ejecución VPL v2 se llama libmfx-gen1.2 y las versiones allí son notablemente más antiguas.

El despachador de Intel VPL (en las distribuciones, libvpl2) se suministra como parte del paquete del transcodificador: se instala en /opt/pss/lib/libvpl.so.2 y la ruta se registra en el directorio /etc/ld.so.conf.d/. Pero el despachador solo selecciona el entorno de ejecución: si en la máquina no hay un entorno de ejecución adecuado, no hay con qué transcodificar.

El entorno de ejecución MSDK v1 se ha retirado de las distribuciones recientes: intel-mediasdk está en EPEL 9, pero no en EPEL 10; libmfx1 está en Debian 12 y Ubuntu 24.04, pero ya no está en las versiones siguientes. En tales sistemas, para el hardware Gen9–Gen11 el entorno de ejecución habrá que instalarlo por separado.

El paquete del transcodificador no arrastra consigo ni el controlador ni el entorno de ejecución, por lo que una instalación correcta no significa por sí misma que la transcodificación por hardware vaya a funcionar: eso se comprueba por separado. Tenga en cuenta además que el usuario del servicio debe tener acceso a los dispositivos /dev/dri (Ubuntu 22/24).

Cómo comprobarlo

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

El comando imprime un XML con la lista de implementaciones que ha encontrado el despachador VPL, en una sola línea, sin saltos. Para cada una se indican el nombre del entorno de ejecución (device-name), la versión de la API, las listas de códecs del decodificador y del codificador, el adaptador y el indicador de aptitud para el funcionamiento por hardware. Ejemplo de salida en Gen9–Gen11 (se muestra con saltos de línea para facilitar la lectura):

<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>

Cómo leer la salida:

  • legacy="1": la implementación informa de una versión de la API inferior a 2.0, es decir, se trata del antiguo entorno de ejecución Media SDK v1; sin este indicador es oneVPL 2.x. Hay que basarse en primer lugar en él y en api-version: el valor de device-name llega del despachador tal cual (en la práctica, mfxhw64 para Media SDK v1 y mfx-gen para oneVPL).

  • supported="1": la implementación es apta para el funcionamiento por hardware. Una entrada sin este indicador equivale a su ausencia.

  • Para Media SDK v1 la lista de códecs es siempre h264,mpeg2: es el conjunto admitido por el transcodificador en ese entorno de ejecución, no el resultado de una consulta al hardware. Para oneVPL las listas se toman de lo que informa el entorno de ejecución.

  • mfx-version: la versión de la API de las cabeceras con las que se ha compilado el transcodificador, no la versión del entorno de ejecución instalado.

Una lista vacía (un elemento <vpl> sin un solo <device>) significa que en esta máquina no habrá transcodificación por hardware: no está instalado el entorno de ejecución o el controlador, la GPU no es de Intel o no hay acceso a /dev/dri. El mensaje No vpl libraries found es un caso aparte: no se ha encontrado la propia biblioteca despachadora.

El comando solo enumera las implementaciones y no selecciona ninguna. Cuál de ellas se utilizará se determina al arrancar el flujo, según el dispositivo indicado en los ajustes del transcodificador. Al arrancar el flujo, el transcodificador escribe dos líneas en el registro: el entorno de ejecución seleccionado con su versión de la API, y la versión de VA-API junto con el nombre del controlador. Por la segunda línea se ve que quien funciona es precisamente el controlador iHD y no i965.

Los backends de transcodificación detectados, sus versiones y los dispositivos encontrados se muestran también en la pantalla «Acerca de» (Acerca del sistema), y la carga de la GPU, en la pantalla «Monitor del sistema» (Monitor del sistema).