Bei der Wiedergabe von HD-Videos am PC spielt die Leistungsfähigkeit der CPU eine erhebliche Rolle. Der Rechner wird beim Dekodieren von 1080p-Videos in schnellen Action-Szenen, allgemein bei hohem Anteil von Bewegtbild, extrem gefordert. Ohne Ruckler gelingt dies meist erst jenseits der 2,6GHz-Marke bei aktuellen DualCore-CPUs von Intel (Core2 Duo) oder AMD (Athlon64 X2).
Wie kann man hier Tuning betreiben?
1. Übertakten der CPU – mit allen Vor- und Nachteilen…
2. Optimierung des DirectShow Filters für H.264-Inhalte
In diesem Beitrag geht es um letztgenannte Variante. In der Regel verwenden Codec-Packs den freien DirectShow Filter ffdshow. Dieser benötigt zum Dekodieren von H.264-Inhalten zur Zeit noch enorm viel Rechenleistung und nutzt keine Multicore-CPUs. Zukünftige Updates sollen hier Optimierung bringen.
Wer heute mit weniger CPU-Leistung auskommen muss kann alternative DirectShow Filter für H.264 benutzen. Zu erwähnen sind hier
1. CoreAVC 1.9
2. DivX 7
Gegen CoreAVC spricht der Kostenfaktor, allerdings bietet das Produkt die bestmögliche Leistung.
DivX ist kostenlos erhältlich und leistet (ohne Einbeziehung der Grafikkarte) ähnliche Werte wie CoreAVC. Leider musste ich feststellen, dass DivX nicht im Zusammenspiel mit PMS funktioniert. Deshalb ist hier das kostenpflichtige CoreAVC (ab 8$) die bessere Wahl.
Umstellung ffdshow
Zunächst einmal muss man im ffdshow das Dekodieren von H.264 deaktivieren:
Bei der Nutzung des K-Lite Codec-Packs wählt man im Startmenü “K-Lite Codec Pack > Configuration > ffdshow video decoder”. Danach im linken Menü “Codecs” auswählen und rechts für das Format H.264/AVC von “libavcodec” auf “deaktiviert” umstellen und o.k. drücken.
Einrichtung DivX
Es folgt die Installation von DivX 7, wobei nur eine Installationsoption benötigt wird:
Das nervende Logo beim Abspielen kann man auch Ausschalten. Dazu im Startmenü “DivX > DivX Plus directshow filters > H264 decoder config” wählen und den Haken bei “disable logo” setzen.
Hier nun der Vergleich von ffdshow zu DivX beim Abspielen der ersten Minute des Big Buck Bunny Videos in 1080p/H.264-Quicktime:
Einrichtung CoreAVC
Alternativ zu DivX folgt also die Installation von CoreAVC.
Tip: Man kann sich zunächst einmal eine 14 Tage gültige Testversion herunterladen und das Ergebnis bewerten.
Es wird damit geworben, dass über die CUDA-Schnittstelle NVidia-Grafikkarten zum Decoding herangezogen werden können. Das müsste eigentlich die CPU entlasten…
Der Haali Media Splitter ist i.d.R. beim Code-Pack schon mit installiert und wird deshalb nicht nochmals benötigt.
Hier nun zum Vergleich die CPU-Auslastung bei der Wiedergabe des selben Videos mit CoreAVC:
Nun schalte ich CUDA in den CoreAVC-Optionen ein. Dazu im Startmenü “CoreCodec > CoreAVC > Configure CoreAVC” wählen. Dann den Haken bei “Prefer CUDA Acceleration” setzen und mit o.k. bestätigen.
Achtung: CUDA funktioniert nur mit bestimmten NVidia-Grafikkarten und dann auch nur mit aktuellem Treiber (Version mindestens 181.64)!
Jetzt zum Vergleich die CPU-Auslastung bei der Wiedergabe des selben Videos mit CoreAVC bei aktivierter CUDA-Unterstützung:
Das ist doch wirklich erstaunlich… Bei Mitbenutzung der Grafikkarte ist die CPU kaum ausgelastet! Unschön ist allerdings, dass die Grafikkartenunterstützung erst bei CoreAVC Professional für 15$ inbegriffen ist. Für Besitzer älterer Rechner ist das u.U. aber trotzdem eine gute Alternative zum Aufrüsten (der CPU und ggf. abhängigen Komponenten wie Mainboard und RAM).
Wer PMS zum Streamen an die PS3 nutzt kann die weniger gewordene CPU-Auslastung dank CUDA gut für das Encoding nach MPG2 benötigen. Allerdings ist der Bedarf für das Transcoding i.A. dank neuer Features in PMS drastisch gesunken. Alle PS3-kompatiblen Dateiformate, auch H.264 (bis AVC level 4.1), werden nur noch gemuxt statt transkodiert.
Testumgebung
Die Tests wurden auf einem Rechner mit (nicht übertaktetem) AMD Athlon64 X2 5050e (2 Cores, 2,6 GHz), 4GB RAM und NVidia Geforce 9400GT auf Windows XP SP3 durchgeführt. Zum Test wurde das kostenlose Big Buck Bunny Video in der 1080p-H.264-Version im Windows Media Player 11 abgespielt.
Beim Abspielen auf der Playstation 3 habe ich im PMS die Transcoding Engine Avisynth/Mencoder gewählt. Mit CoreAVC habe ich bei aktiviertem CUDA keinerlei Performanceengpässe beobachten können. D.h. in dieser Konstellation dürfte das auch noch bei schwächerer CPU-Leistung ruckelfrei laufen…










Hallo,
sehr schöner Beitrag! Wie alle Posts zum Thema PS3 Media Server. Ich bin gerade dabei meinen HP MediaSmart Server EX470 mit der PS3 optimal zu vernetzen. Aber gerade beim Transcodieren von High Definition Content ist der Server leider viel zu schwach, weshalb ich um jede Optimierung dankbar bin. Streaming von zuvor erstellten mpeg-files (mkv2vob) funktioniert hingegen einwandfrei. Gut, hier wird auch keine grössere Rechenpower benötigt.
Wie wäre es mit dieser Idee oder Überlegung:
.
Ist es eventuell (technisch) möglich den Support eines Hardware-Beschleuniger wie den “ADS Instant Video To Go H.264 Hardware Encoder” für den Transcodierungsprozess beim PS3 Media Server einzubinden? Aber Vielleicht sollte ich diese Frage eher an den Entwickler stellen
Viele Grüsse und weiter so
!
Servus ReSub,
Das Thema mkv2vob kann man sich meiner Meinung bei der Nutzung einer aktuellen Version des Java PS3 Media Servers (>= 1.09.1) nach sparen. Der zerlegt mkv-Container mit PS3-kompatiblen H.264-Inhalten und erstellt einen m2t-Container. Bei Bedarf wird ggf. nur der Audio-Anteil encoded. Damit kann dann die PS3 direkt umgehen – wie mit vob-Containern… Nur, dass das im Hintergrund ohne Zutun des Anwenders passiert.
danke für die Blumen
In der Regel haben PCs zu wenig Rechenpower beim Abspielen/Decoding von H.264-Inhalten. Mit o.g. CoreAVC prof. und Nutzung von NVidia CUDA kann man das Problem gut umgehen. Vor allem kann man für wenig Geld zur Not eine unterstützte NVidia-Karte nachrüsten (Einsteiger-Karte der 9er-Serie liegt bei etwa 50€).
Beim Streaming mit PMS wird heute aus bereits genannten Gründen Decoding oft gar nicht mehr benötigt. Wenn allerdings ein zur PS3 inkompatibles HD-Format gestreamt werden muss wird nach dem Decoding das Video nach MPG2 und Audio falls nötig nach AC3 encoded. Die für das MPG2-Encoding notwendige Leistung am PC ist i.d.R. kein Problem (zumindest wenn das Decoding mit CoreAVC entlastet wird). Nachteil des Encoding nach MPG2 ist allerdings die verhältnismässig hohe Netzwerkbandbreite, die dazu benötigt wird. 100MBit/s verkabeltes LAN ist kein Problem, bei WLAN sieht es da düster aus, weil die PS3 nur max. 54MBit/s-WLAN kann.
Nur für letztes Thema würde das (Hardware-) Video-Encoding mit H.264 Vorteile bringen. Ich glaube allerdings nicht, dass du die Entwickler dafür begeistern kannst.
Hey,
erstmal danke für deine ausführlichen (Hintergrund)-infos zum PS3 MediaServer. Wäre schön, wenn du in einem folgenden “HowTo” auch mal Hinweise zur optimalen Wiedergabe von SD-Videos (MPEG2, d.h. DVD-Inhalte, AVI/DIVX, etc.) machen könntest. Insbesondere wie SD-Videos “untouched” zur Playstation gelangen…
Btw, vielleicht kennst du die Lösung, aber ich konnte trotz Suche nichts finden: Weshalb erscheinen hinter den Dateinamen immer “*” (im XMB-Menü, aber auch bei der Wiedergabe von bspw. mp3-Dateien; Vgl. auch deine Screenshoots bei deinem ersten Eintrag zum PS3 MediaServer)?. Läßt sich das irgendwie abstellen?
Besten Dank, “Weiter so” und Beste Grüße
@Parker_Paradise:
Da SD-Videos normalerweise recht wenig Probleme verursachen wird auch wenig dazu geschrieben
Seit PMS-Version 1.10.1 ist die Video-Engine Mencoder und tsmuxer zusammen gefasst. Ist also MEncoder als Standardengine eingestellt (Voreinstellung) wird zunächst das SD/HD-Video analysiert.
Handelt es sich um ein PS3-kompatibles Containerformat (z.B. VOB, AVI, M2TS, …) wird der Inhalt (Audio- und Videospur) auf Kompatibilität geprüft. Falls die volle PS3-Kompatibilität vorhanden ist wird die Datei direkt ohne Änderung, also “untouched”, gestreamt. Kennt die PS3 das Containerformat nicht (z.B. MKV) , aber das Format der enthaltenen Audio- und Videospur, dann wird “remuxed”, d.h. die Spuren aus dem inkompatiblen Container entpackt und in einen kompatiblen M2TS gesteckt. Sind die Spuren inkompatibel wird mit MEncoder transkodiert.
Die Qualitätseinstellungen beim Transcoding gelten sowohl für SD- als auch HD-Videos. HD-Videos sind anspruchsvoller bzgl. Netzwerkbandbreite. Man nimmt sich also das Video mit höchster Auflösung, schnellsten Szenenwechseln und bester Qualität und trimmt die Qualitätseinstellungen für das Transcoding nach MPG2 so, dass man max. Qualität auf der Glotze ohne Ruckler bekommt. Abhängig sind die Werte von der CPU-Leistung und Netzwerkbandbreite (LAN, WLAN). Mit CoreAVC (und evtl. CUDA) kann man ggf. bei CPU-Engpässen entgegenwirken (siehe obiger Artikel).
Was der der Stern hinter dem Dateinamen soll? Gute Frage…
Hi.
Während bei HD-Videos relativ klar ist, was PMS macht und was bei der PS3 ankommt (Wenn AVC als Dateiinfo bei der PS3 angezeigt wird, weiß ich, dass ich unbearbeitetes H.264 sehe) sieht das bei SD IMO anders aus. Du beschreibst die einzelne Schritte nachvollziehbar; aber woher weiß ich, in welchem Ast ich mich gerade befinde, und was die besten Einstellungen sind?
Danke für die Antwort.
Aber in deinen Ausführungen liegt ja genau der Punkt meiner Unverständnis
Zum Thema Einstellungen, vielleicht nochmal ein paar Punkte konkretisiert:
1. Ist die in dem PS3 Media Forum postulierte Einstellung “vcodec == mpeg2 && srtfile == null :: -ovc copy -nosync” noch aktuell bzw. notwendig, um DVD “verlustfrei” zu streamen?
2. Das Thema “Skalierung” wurde bis dato IMO wenig beleuchtet. Welches Gerät in der Kette (PC, PS3, TV) sollte die Skalierung (bspw. auf die native TV-Auflösung) unter Qualitätsgesichtspunkten vornehmen?
Bis dahin.. Beste Grüße
@Parker_Paradise:
Du schreibst: “…Wenn AVC als Dateiinfo bei der PS3 angezeigt wird, weiß ich, dass ich unbearbeitetes H.264 sehe) sieht das bei SD IMO anders aus…”
Das stimmt nicht. Wenn du nicht gerade eine Steinzeit-Version von PMS benutzt oder PMS verkonfiguriert hast, dann wird Transcoding nur bei Bedarf durchgeführt. Ich habe eben mal ein paar SD-Videos bei mir getestet (AVI, MPG und VOB) und die PS3 meldet auch brav MPG4, DIVX und MPG1 als Videocodecs zurück. Das kann man Nachsehen durch “Drücken auf das grüne Dreieck und Auswählen von Informationen” in der Verzeichnisstruktur. Ebenso kann man beim Abspielen auf Select drücken und bekommt auch noch zusätzlich den Audiocodec angezeigt.
Zu den anderen Punkten: Die Einstellung der Untertitel und und das A/V-Sync-Verhalten kann man bequem über die Oberfläche einstellen und ist meines Erachtens nur beim Transcoding relevant. Genau das sollte aber in der Masse der Fälle nicht nötig sein. Falls die Einstellungen für Untertitel die Anzeige derselben erzwingen kommt allerdings zwangsläufig Transcoding, da die Untertitel in den Bilddatenstrom eingemischt werden müssen. Zum Thema Skalierung habe ich mich noch nicht großartig befasst. Ich bin mit den Ergebnissen der PS3 recht zufrieden. (Hoch-) Skalierung am PC bedeutet mehr notwendige Rechenleistung und größere Bandbreiten. Ohne Transcoding geht das meiner Meinung nach sowieso nicht. Also besser das Thema der PS3 oder der Glotze überlassen…
Ja, ich habe mich auch gestern nochmal mit dem Thema beschäftigt. Zunächst mal, nein, keine Steinzeit, sondern bei mir läuft die PMS 1.10.5
Zum Thema SD ist herrscht bei mir soweit noch Unsicherheit, welche Einstellung der Parameter -falls Transcoding unumgänglich ist- vorzunehmen ist. Im PMS-Forum herrscht zu Zeit auch keine klare Meinung, welche Einstellung nun die “Beste” ist (keyint=25:vqscale=1:vqmin=2; siehe http://ps3mediaserver.org/forum/viewtopic.php?f=6&t=1230)..
Zur Zeit experimientiere ich mit dem Streaming von MKV bzw. H264 HD Videos; insbesondere mit dem von dir vorschlagenen “Big Bunny”-Video. 720p läuft problemlos, während 1080p ruckelt. Rechnerleistung reicht aus (File wird am PC mit 55% CPU-Belastung abgespielt), ich vermute Netzwerkbandbreiten-Probleme, da ich übers Stromnetz streame (85 MBit-Devolo HomePlug-Adapter).
@Parker_Paradise:
“Die Beste Einstellung” gibt es nicht. Die ideale Einstellung ist immer auf die Gegebenheit vor Ort anzupassen.
Optimal ist es gar kein Transcoding zu nutzen, denn HD-Videos werden somit im originalen stark komprimierten Format übertragen, weniger stark komprimierte SD-Videos erzeugen durch die dafür niedrigere Auflösung auch nicht extreme Datenmengen. Hat man nun HD-Videos, die nur mit Transcoding angezeigt werden können, z.B. weil ein High Profile 5.1 vorliegt, dann wird zwangsläufig am PC dekodiert nach MPG2 kodiert. Beides ist sehr CPU-intensiv. Die benötigte Leistung für das Decoding kann mit dem kostenpflichtigen CoreAVC reduziert werden. Wenn die Leistung des PCs für Decoding/Coding ausreicht muß trotzdem noch der MPG2-Datenstrom über das Netz. Für das Streamen des bereits genannten Big Buck Bunny Videos (Quicktime 1080p) in bester Qualität reichen 100MBit/s LAN gerade noch aus. Verfügt man nur über ein langsameres Medium (WLAN, DLAN) muß man Abstriche bei der Qualität machen um die zu streamende Datenmenge zu reduzieren. Dummerweise kostet das auch noch zusätzliche CPU-Leistung dank zus. Berechnungen. Gesteuert wird das über die Parameter (v)qscale, (V)qmin und keyint. Mit Vergrößerung des keyint-Werts werden seltener Keyframes, also Vollbilder, über das Netz geschickt. Zwischen den Keyframes werden nämlich nur die geänderten Bildinhalte übertragen. Die beiden Werte für den Quantizer senken auch mit höherer Zahl die benötigte Bandbreite, die Qualität sinkt natürlich auch.
Dir bleibt nichts anderes übrig als mit den Werten zu experimentieren. Optimal eingestellt ist es wenn bei maximal möglicher Qualität in Szenen mit hoher Bitrate nichts mehr ruckelt (im BBB-Video kurz vor Erscheinen des Filmtitels). Am Besten startet man mit konservativen Werten und arbeitet sich langsam durch Tests hoch. Dabei ist die zus. CPU-Belastung durch Änderung der 3 Parameter immer im Blick zu behalten.
P.S.
Relevant ist übrigens die CPU-Last pro Core. 55% CPU-Last können bei einer Dualcore-CPU 100% Last für einen Kern bedeuten…
Pingback: Java PS3 Media Server für dummies – Zusammenfassung | Otmanix’ Blog
Hallo,
Habe Probleme mit einigen MKV wo der Media Server keinen Ton schickt? Man hat zwar die gewöhnliche Auswahl (AC3 und DTS aber letzendlich meldet die PS3 kein Audio vorhanden.
Irgendeine Idee???
Hallo,
wie immer zunächst ins debug.log sehen und nach Felern suchen. Dann mit mediainfo den Container und Audio/Video-Codec prüfen. Man kann auch mal testen, ob das Abspielen (ohne Streaming/Transcoding) klappt. Dazu die Videodatei per drag’n'drop auf C:\Program Files (x86)\PS3 Media Server\win32\mplayer.exe ziehen (Pfad OS-abhängig)…