Intel-VPL-Transcoder: unterstützte Hardware¶
Welche Intel-Hardware für die Hardware-Transcodierung geeignet ist, welche Codecs auf den verschiedenen Grafikgenerationen verfügbar sind und wie sich prüfen lässt, dass die Hardware erkannt wurde. Die Installation der Transcoder-Pakete ist im Abschnitt Transcoder beschrieben, die Konfiguration des Transcoders selbst — in Transcoder.
Kurz gefasst: erforderlich ist eine integrierte oder dedizierte Intel-Grafik ab Gen9. Der Transcoder ermittelt, welche Intel-Laufzeitumgebung auf dem Rechner vorhanden ist, und bindet sich an sie an; ein und dieselbe ausführbare Datei tcivpl arbeitet sowohl auf neuer als auch auf alter Hardware.
Zwei Intel-Laufzeitumgebungen¶
Laufzeitumgebung |
Hardware |
|---|---|
oneVPL (VPL v2) |
Gen12 und neuer: Tiger Lake, Rocket Lake, Alder Lake (einschließlich Alder Lake-N: N100, N305), Raptor Lake, Arc |
Media SDK v1 (MSDK v1) |
Gen9–Gen11: Skylake, Kaby Lake, Coffee Lake, Comet Lake, Ice Lake |
Die Auswahl der Laufzeitumgebung erfolgt automatisch und erfordert keine separate Konfiguration: der VPL-Dispatcher listet die Implementierungen auf, die für das ausgewählte Gerät /dev/dri/renderD<N> gefunden wurden, und der Transcoder nimmt die erste für den Hardwarebetrieb geeignete. Eine eigene Regel „VPL v2 bevorzugen“ gibt es im Transcoder nicht — für Gen9–Gen11 existiert die neue Laufzeitumgebung schlicht nicht, dort findet sich daher immer Media SDK v1, während auf Gen12 und neuer üblicherweise nur oneVPL installiert ist.
Beachten Sie dies bei der Auswahl der Hardware: die Installationsverfahren des Transcoders (Transcoder) installieren ausschließlich die Laufzeitumgebung VPL v2, sind also auf Gen12 und neuer ausgelegt. Für Gen9–Gen11 wird die Laufzeitumgebung Media SDK v1 separat installiert, und in neuen Distributionen kann sie fehlen (siehe unten).
Codecs¶
Laufzeitumgebung |
Dekodierung |
Codierung |
|---|---|---|
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 |
Was fehlt:
HEVC wird auf MSDK v1 nicht unterstützt — weder Dekodierung noch Codierung: in Media SDK v1 wird HEVC über eine Plugin-Schnittstelle eingebunden, die der oneVPL-Dispatcher nicht bereitstellt. Für HEVC ist ein Rechner mit Gen12 oder neuer erforderlich. Bei einem Versuch schreibt der Transcoder eine eindeutige Fehlermeldung —
HEVC decode is not supported on the Intel Media SDK v1 runtimeoderHEVC encode is not supported on the Intel Media SDK v1 runtime.AV1, VP9 und VC-1 werden von keiner der beiden Laufzeitumgebungen unterstützt — im Rundfunk werden sie nicht benötigt.
Die drei aufgeführten Codecs sind das Maximum, mit dem der Transcoder arbeiten kann. Auf VPL v2 legt er keine eigenen Beschränkungen auf, daher bestimmt die Laufzeitumgebung den tatsächlichen Codec-Satz eines konkreten Adapters; was auf dem Rechner verfügbar ist, zeigt tcivpl --hw-list (siehe unten). Die allgemeine, backend-unabhängige Codec-Matrix des Transcoders ist in Backends und Codecs aufgeführt.
Eingeschränkte Atom-Hardware: nicht unterstützt¶
Plattformen mit Atom-Kernen vor Gen12 — Apollo Lake, Gemini Lake, Elkhart Lake, Jasper Lake (Celeron und Pentium der Serien J und N: J4125, J6412, N5105 und ähnliche) — sind für die Transcodierung nicht geeignet.
Ihre Media-Engine ist eingeschränkt: eine vollwertige Hardware-Codierung fehlt, und eine MPEG-2-Codierung gibt es überhaupt nicht. Die Dekodierung kann auf solchen Chips funktionieren, doch es fehlt die Möglichkeit zu transcodieren — verwenden Sie den Software-Transcoder (Paket pstreamer-tcsw) oder andere Hardware. Der Transcoder sortiert solche Hardware nicht im Voraus aus: er startet und bricht bei der Initialisierung des Encoders mit einem Fehler ab.
Eine wichtige Ausnahme: Alder Lake-N (N100, N305 und ähnliche) sind ebenfalls Atom-Kerne, ihre Grafik ist jedoch eine vollwertige Gen12, und sie werden unterstützt.
Gesondert zu beachten: alte Atom-Prozessoren besitzen kein AVX, während ein Teil der fertigen Intel-Pakete mit AVX gebaut ist. In diesem Fall stürzt der Transcoder-Prozess mit Illegal instruction ab — die Instruktionen führt die in den Prozess geladene Bibliothek des Intel-Treibers oder der Intel-Laufzeitumgebung aus, nicht der Code des Transcoders selbst.
Was installiert sein muss¶
Komponente |
RHEL / AlmaLinux / Rocky |
Debian / Ubuntu |
|---|---|---|
VA-API-Treiber iHD (erforderlich) |
|
|
Laufzeitumgebung VPL v2 (Gen12+) |
|
|
Laufzeitumgebung MSDK v1 (Gen9–Gen11) |
|
|
VA-API, DRM |
|
|
Es wird genau eine Laufzeitumgebung benötigt — diejenige, die zur Hardware passt. Der iHD-Treiber ist in jedem Fall erforderlich: auf dem alten i965 gelingt die VA-API-Initialisierung zwar, der Decoder kommt jedoch nicht hoch, und eine gesonderte Meldung darüber gibt es nicht — der Treiber ist nur im Protokoll beim Start des Streams sichtbar. Unter Debian und Ubuntu wählen Sie genau die Variante intel-media-va-driver-non-free: in intel-media-va-driver ist ein Teil der Codecs entfernt.
Die Paketnamen hängen davon ab, woher sie installiert werden. Die angegebenen Debian-Namen stammen aus dem Intel-Graphics-Repository, das gemäß dem Installationsverfahren hinzugefügt wird (Ubuntu 22/24); im eigenen Repository von Ubuntu heißt dieselbe Laufzeitumgebung VPL v2 libmfx-gen1.2, und die Versionen sind dort deutlich älter.
Der Intel-VPL-Dispatcher (in den Distributionen — libvpl2) wird als Bestandteil des Transcoder-Pakets ausgeliefert: er wird nach /opt/pss/lib/libvpl.so.2 installiert, der Pfad wird im Verzeichnis /etc/ld.so.conf.d/ eingetragen. Der Dispatcher wählt jedoch nur die Laufzeitumgebung aus — ist auf dem Rechner keine passende Laufzeitumgebung vorhanden, fehlt die Möglichkeit zu transcodieren.
Die Laufzeitumgebung MSDK v1 wurde aus den neuen Distributionen entfernt: intel-mediasdk ist in EPEL 9 vorhanden, in EPEL 10 jedoch nicht; libmfx1 ist in Debian 12 und Ubuntu 24.04 vorhanden, in den folgenden Ausgaben aber nicht mehr. Auf solchen Systemen muss die Laufzeitumgebung für Hardware der Generationen Gen9–Gen11 separat installiert werden.
Das Transcoder-Paket zieht weder den Treiber noch die Laufzeitumgebung nach sich, daher bedeutet eine erfolgreiche Installation für sich genommen noch nicht, dass die Hardware-Transcodierung funktioniert — das wird separat geprüft. Beachten Sie außerdem, dass der Dienstbenutzer Zugriff auf die Geräte /dev/dri haben muss (Ubuntu 22/24).
Wie geprüft wird¶
/usr/local/bin/tcivpl --hw-list
Der Befehl gibt XML mit der Liste der Implementierungen aus, die der VPL-Dispatcher gefunden hat — in einer Zeile, ohne Umbrüche. Für jede sind der Name der Laufzeitumgebung (device-name), die API-Version, die Codec-Listen von Decoder und Encoder, der Adapter und das Merkmal der Eignung für den Hardwarebetrieb angegeben. Beispiel einer Ausgabe auf Gen9–Gen11 (zur besseren Lesbarkeit mit Umbrüchen dargestellt):
<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>
Wie die Ausgabe zu lesen ist:
legacy="1"— die Implementierung meldet eine API-Version unter 2.0, es handelt sich also um die alte Laufzeitumgebung Media SDK v1; ohne dieses Merkmal ist es oneVPL 2.x. Darauf und aufapi-versionist in erster Linie abzustellen: der Wert vondevice-namekommt unverändert vom Dispatcher (in der Praxis —mfxhw64für Media SDK v1 undmfx-genfür oneVPL).supported="1"— die Implementierung ist für den Hardwarebetrieb geeignet. Ein Eintrag ohne dieses Merkmal ist gleichbedeutend mit seinem Fehlen.Für Media SDK v1 lautet die Codec-Liste stets
h264,mpeg2— das ist der Satz, den der Transcoder auf dieser Laufzeitumgebung unterstützt, und nicht das Ergebnis einer Abfrage der Hardware. Für oneVPL werden die Listen aus dem übernommen, was die Laufzeitumgebung meldet.mfx-version— die API-Version der Header, mit denen der Transcoder gebaut wurde, und nicht die Version der installierten Laufzeitumgebung.
Eine leere Liste (ein Element <vpl> ohne ein einziges <device>) bedeutet, dass es auf diesem Rechner keine Hardware-Transcodierung geben wird: die Laufzeitumgebung oder der Treiber ist nicht installiert, die GPU stammt nicht von Intel, oder es besteht kein Zugriff auf /dev/dri. Die Meldung No vpl libraries found ist ein gesonderter Fall: die Dispatcher-Bibliothek selbst wurde nicht gefunden.
Der Befehl listet die Implementierungen nur auf und wählt nichts aus. Welche von ihnen verwendet wird, entscheidet sich beim Start des Streams — anhand des in den Einstellungen des Transcoders angegebenen Geräts. Beim Start des Streams schreibt der Transcoder zwei Zeilen in das Protokoll: die ausgewählte Laufzeitumgebung mit der API-Version sowie die VA-API-Version zusammen mit dem Namen des Treibers. An der zweiten Zeile ist zu erkennen, dass tatsächlich der Treiber iHD arbeitet und nicht i965.
Die erkannten Transcodierungs-Backends, deren Versionen und die gefundenen Geräte werden ebenfalls auf dem Bildschirm „Über“ (Über das System) angezeigt, die GPU-Auslastung — auf dem Bildschirm „System-Monitor“ (System-Monitor).