Ist Hardware Video Decoding nur ein Hoax?

Klamann

Lieutenant
Registriert
Nov. 2006
Beiträge
967
Auf so einen Titel kann nur ein Rant folgen; ich hoffe, danach könnt ihr mir helfen 😄

Ich versuche seit einer Weile, mir einen sparsamen HTPC zusammenzustellen und habe immer das gleiche Problem: 4K content wird nicht flüssig abgespielt. Es gibt immer wieder kleine Ruckler, je nach Setup mal mehr und mal weniger. Das betrifft sämtliche Hardware, die ich bisher getestet habe, die auf Hardware-Beschleunigung angewiesen ist, weil die CPU sonst zu schwach wäre. Also z.B. ein Raspi 4, ein Intel NUC 11 mit Celeron CPU, selbst mein Hisense Smart TV packt das nicht immer. Je nach System und Video sind es mal einzelne Frames, die ausgelassen werden, bis zu mehreren Rucklern pro Sekunde. Jedenfalls ist es auffällig, und so macht 4K content keinen Spaß.

Um zu meinem provokativen Titel zurück zu kommen: Natürlich habe ich Systeme gesehen, auf denen Hardware Decoding funktioniert. Auf meinem Desktop habe ich einen alten Xeon E3-1230 v3 und eine GTX 1060. Die GPU kann VP9 10bit content nicht in hardware decodieren, aber die CPU übernimmt das einfach (40-60% load bei 80W TDP). Die GPU kann aber HEVC 10 bit decodieren, und das macht die GPU auch ohne einen einzigen Ruckler und ohne die CPU zu belasten.

Warum funktioniert der Hardware Decoder ohne Zicken zu machen auf dem Desktop-System (das mehr als genug Power hat, um Videos in Software zu rendern)? Aber auf den Systemen, die nicht genug CPU-Leistung haben, bei denen ich wirklich darauf angewiesen bin, da gibt es Probleme?
Hatte ich einfach nur Pech mit meinen 3 Systemen (Raspi 4, Intel NUC 11, Hisense TV), oder kann hier jemand berichten, dass flüssige 4K Wiedergabe ohne frame drops mit vergleichbarer Hardware möglich ist?
 
Also ein Pi4 ist definitiv zu schwach für 4K, 1080p ohne Probleme

Vermutlich hat der Celeron ebenfalls zu wenig Power

Ich hab einen Nuc8 mit i3 8.Gen, zusammen mit Kodi und Dateien auf meinen TrueNAS System absolut kein Problem, 4K mit voller Bitrate 60-100Mbit/s, dazu DTS:X oder Atmos (falls verfügbar) ohne Probleme, ach ja, HDR natürlich auch
 
Ich denke nicht das die CPU-Leistung der störende Faktor ist. Eher die Synchronisation der Bildfläche mit der Ausgabe.
DerFakeAccount schrieb:
Also ein Pi4 ist definitiv zu schwach für 4K
Nein.
DerFakeAccount schrieb:
Vermutlich hat der Celeron ebenfalls zu wenig Power
Nein.

Das sind beides Pauschalaussagen ohne fundierten Hintergrund.
 
  • Gefällt mir
Reaktionen: Project 2501, Conqi, Mr.Zweig und eine weitere Person
ruckler können auftreten wenn die die bildrate des videos nicht der des displays entspricht (bzw. kein vielfaches davon ist). dann hat man keine dropped frames, aber es ruckelt trotzdem. ausserdem können auch hardware-decoder in der maximalen bitrate limitiert sein (das sind dann auch richtige drops).
 
  • Gefällt mir
Reaktionen: inge70 und ghecko
Nur um sicher zu gehen: Wenn du vom HTPC an den TV gehst, welche Bildqiederholrate ist dann eingestellt?

Wenn du z.B. mit 60 Hz ausgibst und das Video z.B. 24 FPS hat, dann hast du zwangsläufig ruckler.

Manche TVs, können das zwar erkennen und stellen das Video dann ruckelfrei dar, andere TVs können das Ruckeln aber sogar z.B. durch eine aktivierte Zwischenbildberechnung sogar noch verstärken.

Optimal wäre also, dass die Bildwiederholrate per HDMI exakt der Videoframerate entspricht. Tools wie Kodi können die HDMI Frequenz nach bedarf umstellen und ans Video anpassen.


Das ist übrigens eines von vielen Problemen, weshalb ich persönlich nicht auf HTPCs setzen würde, sondern wann immer möglich die Smart TV Apps vorziehe oder zumindest für die Lokale Filmsamlung auf Zuspieler wie Nvidia Shield oder Apple TV setzen würde. Gerade was solche "kleinigkeiten" angeht, sind PCs oder Selbstbaulösungen extrem nervig.
 
  • Gefällt mir
Reaktionen: Naturtrüb, Conqi, GTrash81 und 2 andere
Ganz kurze Version: Hardware Decoding bedeutet ja nicht, dass noch so schwache Hardware plötzlich ein Bauteil hat, was JEDEN Inhalt mit dem entsprechenden Codec komplett ohne Leistungs- oder Qualitätsverlust en- oder dekodieren kann. Hardware De- und Encoder sind nicht alle gleich und können schnell überfordert werden, wenn Bitrate, Framerate, Auflösung, Farbtiefe und Natur des Videos (sehr aufwändig komprimierte Videos z.B.) zu viel werden.
 
  • Gefällt mir
Reaktionen: Project 2501
Selbst mit Hardware decoding hängt viel von der Software ab die das macht (Video Player, Browser?).
Auch werden gerne noch weitere Verbesserungen auf das Bild angewandt (eine davon wäre zB das konvertieren zwischen verschiedenen Framerates oder das skalieren der Auflösung). Das alles ist dann nicht mehr auf der eigentlichen Decoder Hardware, sondern allgemein auf der GPU und kann dort gut Rechenleistung verbrauchen.

Desktop Programme sind leider viel zu oft nicht auf das Sparen von Rechenleistung oder Energie optimiert und machen dann vllt Dinge die so ein Celeron dann nicht mehr hinbekommt.
 
Zuletzt bearbeitet:
Gibt so viele andere Faktoren...
4K Videomaterial von der Canon R5 kann ich nicht abspielen. Ist zwar HEVC, jedoch in so einer Farbuntertastung (4:2:2), die Nvidia (3090) nicht unterstützt. Also bleibt die CPU. Meine 7960X CPU schaffts nicht (16 Kerne), geht auf 100%.
Also hängt von dem Material ab. Dann ob Dein Netzwerk schnell genug ist usw.
Zudem trotz HW Decoding die CPU auch irgendwas machen muss, wie Daten bereitstellen, Untertitel oder sonstwas. Wenn ein Kern für eine Aufgabe verantwortlich ist, diese nicht auf mehrere Kerne verteilt werden kann und der Kern der CPU bei 100% läuft kommt es zu Aussetzer.
 
  • Gefällt mir
Reaktionen: Project 2501 und GTrash81
@Prollpower

Hast du die "Filme & TV" App von Windows 10/11 schonmal probiert? Also der Standard Videoplayer von Windows?
Die ist was Hardwaredecodingkompatibilität und Performance angeht ungeschlagen. Damit konnte ich auf meiner alten GTX980 sogar Formate ruckelfrei abspielen, die die Karte gar nicht unterstützt hat, selbst mit 100mbps lief das noch flüssig. GPU Decoding war laut Taskmanager trotzdem aktiv, die CPU hat aber stark mitgeholfen.
Was auch immer Microsoft da treibt, es ist ziemlich gut.
 
Ich würde ja auch Shield sagen, aber auch die ruckelt ab und zu mal.
 
Hardware Decoding ist, nach meinem Kenntnisstand, stark von Lizenzen abhängig.

So konnte der RPi3 ja MPEG-4 und H.264, sowie über optionale Lizenzen MPEG-2 und VC1.
Der RPi4 wurde dahingend "degradiert", weil er von oben genannten nur noch H.264 konnte, zuzüglich H.265.

Beim RPi4 muss man für das Hardware Decoding unter Umständen etwas an der config.txt ändern, damit es auch wirklich über die Hardware dekodiert.
 
DerFakeAccount schrieb:
Vermutlich hat der Celeron ebenfalls zu wenig Power
Für Software rendering definitiv. Bei Wiedergabe mit aktivem Hardware Decoding lag die CPU-Last auf dem Celeron N5105 (4C/4T) nie über 10%.
0x8100 schrieb:
ruckler können auftreten wenn die die bildrate des videos nicht der des displays entspricht (bzw. kein vielfaches davon ist). dann hat man keine dropped frames, aber es ruckelt trotzdem. ausserdem können auch hardware-decoder in der maximalen bitrate limitiert sein (das sind dann auch richtige drops).
Der Fernseher ist mit 3840x2160@60Hz angeschlossen. Die Probleme mit 24Hz Material kenne ich, aber das meine ich hier nicht. Auch wenn ich 60Hz Material abspiele, gibt es einzelne frame drops oder das Video stoppt einfach mal für 100ms und springt dann weiter. Ist auch im VLC unter Statistiken auslesbar (Video -> Verloren -> mehr als 0 Bilder)
W0dan schrieb:
Das ist übrigens eines von vielen Problemen, weshalb ich persönlich nicht auf HTPCs setzen würde, sondern wann immer möglich die Smart TV Apps vorziehe oder zumindest für die Lokale Filmsamlung auf Zuspieler wie Nvidia Shield oder Apple TV setzen würde. Gerade was solche "kleinigkeiten" angeht, sind PCs oder Selbstbaulösungen extrem nervig.
Wenn es nur die 24Hz Ruckler auf einem 60Hz Display wären, ließe sich das easy lösen. Das Problem ist leider größer als das :/
DER DOHR schrieb:
Ganz kurze Version: Hardware Decoding bedeutet ja nicht, dass noch so schwache Hardware plötzlich ein Bauteil hat, was JEDEN Inhalt mit dem entsprechenden Codec komplett ohne Leistungs- oder Qualitätsverlust en- oder dekodieren kann. Hardware De- und Encoder sind nicht alle gleich und können schnell überfordert werden, wenn Bitrate, Framerate, Auflösung, Farbtiefe und Natur des Videos (sehr aufwändig komprimierte Videos z.B.) zu viel werden.
Ich habe mir einen Testparcour mit verschiedenen Formaten, Bitraten, Bildfrequenzen etc. gebaut, und habe leider kein einziges 4K video, bei dem es absolut flüssig läuft. Auf meinem Referenzsystem schon, aber nicht auf dem Fernseher oder NUC. Bei Interesse kann ich den Testparcour sharen.
Ray519 schrieb:
Selbst mit Hardware decoding hängt viel von der Software ab die das macht (Video Player, Browser?).
Ich habe lokale Videos mit dem aktuellen VLC Player (64 bit) getestet, und Streams über YouTube mit Firefox und Chrome. Als Betriebssystem hatte ich Windows 10 und Ubuntu 22.04 im Einsatz. Die Probleme waren überall vergleichbar, außer YouTube auf Ubuntu, das war eine Katastrophe.
 
Von VLC hätte ich jetzt auch keine effiziente Verarbeitung erwartet. Beste Chancen hast du mit den Board-Tools die am ehesten auf die Treiber und das OS abgestimmt sind. Also Windows Video Player (dann natürlich nur mit Formaten die der mag) und Edge.

Gerade auf der CPU können halt gut einzelne Dinge limitieren ohne dass du gleich 100% Auslastung siehst. Wenn die CPU so langsam ist, dass sie nur Knapp die notwendigen Daten beischaffen kann (oder was auch immer), dann können schon geringe Verzögerungen dazu führen, dass ein Frame nicht mehr rechtzeitig fertig wird.

UHD bleibt halt eine Menge an Daten, besonders nach dem dekomprimieren...
 
  • Gefällt mir
Reaktionen: Project 2501
Aus den Beiträgen bisher lese ich heraus, dass der decoder sehr wohl in der Lage sein sollte, das Material abzuspielen, aber es muss an einer anderen Stelle in der Kette ein Problem geben: CPU kann nicht schnell genug Daten liefern, Verbindung zum Anzeigegerät ist nicht optimal, verwendete Software ist Mist, etc.

Ich bin noch nicht überzeugt, aber würde gerne mal mit der Theorie arbeiten und versuchen, Probleme auszuschließen
  • CPU: wenn irgendwann die Last auf 25% steigt, könnte ich bei einem 4-Kerner ein Problem haben, falls es da einen Prozess gibt, der nur auf einem Core läuft. Bisher habe ich so etwas nicht beobachtet. Gibt es andere Möglichkeiten, wie ich das testen kann?
  • Verbindung zum Fernseher: 3840x2160@60Hz über HDMI. Lasst uns erstmal auf 60Hz content konzentrieren. Gibt es irgend etwas, das ich hier anders machen sollte?
  • Software: Playback mit VLC funktioniert auf meinem Referenzsystem hervorragend, aber auch das können wir prüfen. Ich werde mal den Standard Windows Player und Edge probieren, wie von @W0dan und @Ray519 vorgeschlagen.
 
Klamann schrieb:
YouTube auf Ubuntu, das war eine Katastrophe.
unter linux musst du im firefox schauen, dass das hardware-decoding auch eingeschaltet ist. ist per default immer noch aus:

1659778577342.png


ausserdem solltest du mal schauen, ob vaapi richtig funkioniert:
Code:
$ vainfo
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.14 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.3.1 ()
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :    VAEntrypointVLD
      VAProfileMPEG2Main              :    VAEntrypointVLD
      VAProfileH264Main               :    VAEntrypointVLD
      VAProfileH264Main               :    VAEntrypointEncSliceLP
      VAProfileH264High               :    VAEntrypointVLD
      VAProfileH264High               :    VAEntrypointEncSliceLP
      VAProfileJPEGBaseline           :    VAEntrypointVLD
      VAProfileJPEGBaseline           :    VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline:    VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:    VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          :    VAEntrypointVLD
      VAProfileHEVCMain               :    VAEntrypointVLD
      VAProfileHEVCMain10             :    VAEntrypointVLD
      VAProfileVP9Profile0            :    VAEntrypointVLD
      VAProfileVP9Profile2            :    VAEntrypointVLD

damit ist ein 4k60 (vp9) video auf youtube auf meinem laptop mit einem i5-8265u ohne probleme bei sehr geringer cpu-last möglich.

ansonsten würde ich eher mpv anstatt vlc benutzen. auch hier darauf achten, dass hw-dec auch aktiv ist:

Code:
$ cat ~/.config/mpv/mpv.conf
hwdec=auto-copy
hwdec-codecs=all
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: ghecko und Alexander2
Das erste was du checken solltest ist was sollte der Decoder überhaupt decodieren können und was für Material hast du :-)
Deinen Schluss (erster Absatz in deinem #16 teile ich nciht als Fazit :-)

Edit:
Youtube alleine hat oft mehrere verschiedene Formate pro Video, es gibt Tools um sich bestimmte Versionen davon laden zu lassen insofern verfügbar.

Edit:
Sobald es um Linux geht und Hardwaredecoding musst du basteln, das ist immer wieder eine Baustelle. da auf eine CPU zu setzen, die das Video im Zweifel nicht per Software decodieren kann halte ich für eine schlechte Idee :D
 
@0x8100 danke für den Beitrag, du hast dich wohl mal durch den gleichen Dschungel gekämpft wie ich. Mit den VAAPI settings habe ich hardware decoding in Firefox tatsächlich zum laufen gebracht, die Ergebnisse waren aber ernüchternd. Hier sind meine Notizen:
local files (vlc)

  • HEVC 4K@24Hz@10bit: serious stuttering
  • HEVC 4K@60Hz@10bit: serious stuttering
  • VP9 4K@24Hz@10bit: serious stuttering
  • VP9 4K@60Hz@10bit: occasional frame drops

youtube (firefox)

  • VP9 1440p@24Hz: serious stuttering
  • VP9 1440p@60Hz: some stuttering
  • VP9 2160p@24Hz: serious stuttering
  • VP9 2160p@60Hz: some stuttering

youtube (chrome)

was unable to enable hardware accelleration, software playback can't handle the load

MPV habe ich auch probiert, da war die performance sehr ähnlich zu meinen Ergebnissen mit VLC. Ich kann es nochmal mit deiner mpv.conf probieren.
 
Ich kann nicht garantieren, dass der Celeron das grundsätzlich ruckelfrei können sollte, aber ich vermute, dass Intel einen HW-Decoder der UHD@60 annimmt nur verbaut / aktiviert lässt, wenn sie wissen, dass es auch geht.
Mit mindestens einer Encoding Config. Es gibt ja viele verschiedene Einstellungen beim Encodieren. Da gibt es durchaus Optionen die es für so einen Hardwaredecoder schwerer machen und eine Kombination aus solchen Einstellungen, die den Decoder dann in Summe vllt überlasten.

Aber Treiber oder HW könnten auch ein Problem sein. So konnte meine 3090 beispielsweise nicht Youtube's AV1 8K Material ruckelfrei abspielen (mit HW Decoding). Die Alder Lake iGPU konnt es aber...
 
Zurück
Oben