www.radonmaster.de/robernd/    Stand: 31. Okt. 2003

StartHDTV

Über MPEG/DVD-Player, Graphen, Filter und Meriten

Mit meinen ersten Testaufzeichnungen von HDTV stand ich ziemlich unvorbereitet vor dem Problem, TV mit dem PC wieder zu geben. In verschiedenen Diskussionsforum werden viele Rezepte und noch viel mehr Details beschrieben, um Fernsehen mit dem PC vorzuführen. Ich hatte beim Einstieg in das Thema jedoch größte Probleme mit dem logischen Zusammenhang zwischen den wirklich häufig beschriebenen Verfahren und ihren zugehörigen Begriffen. Diese kurze Zusammenfassung der wichtigsten Fakten und Eigenarten soll Anfängern auf diesem Gebiet das Leben etwas erleichtern.
Trotz intensiver (aber leider nur recht kurzer) Beschäftigung mit diesem Thema habe ich noch immer nicht den richtig klaren Durchblick. Deshalb freue ich über jeden Korrektur- oder Ergänzungsvorschlag.

Praktisch alle Wiedergabemöglichkeiten von Videos in Windows-PCs verwenden DirectShow von Microsoft. Das ist ein Teil des Systems DirectX, das vorzugsweise für Spielprogramme erfunden wurde. Bei Know-How auf diesem Gebiet handelt es sich nicht um allgemeine Grundlagen der Informationstechnik, Datenverarbeitung oder Fernsehtechnik sondern um ein ganz spezielles Microsoft-Wissen. Wie so häufig, gibt es auch eigene Fachbegriffe, unter denen sich nicht eingeweihte Leser zunächst einmal etwas völlig anderes vorstellen.

1. Einführung
Die aktuellen DVD- oder MPEG-Player machen gar nicht so viel selbst, wie man (zumindest ich) erwarten könnte. Sie steuern praktisch ausnahmslos DirectShow. Zum Abspielen eines Videos benötigt man gar keinen MPEG-Player, DirectShow kann dies völlig selbständig. Es braucht dafür lediglich bestimmte Filter, die allerdings zum entscheidenden Teil aus den Player-Schmieden stammen. Zusätzlich bringen Player-Programme ihre eigenen grafischen Benutzeroberflächen mit.

2. Der Filter Graph

2.1 Die Videowiedergabe
Microsoft bezeichnet das komplette Abspielsystem für Videos als Graph. Der Graph hat kaum etwas mit Grafik zu tun. Es ist eine individuell konfigurierte Ablaufsteuerung zur Videowiedergabe. Der Filtergraph wird vor dem Beginn jeder Wiedergabe ganz individuell unter Berücksichtigung der Art des Videomaterials (DVD, MPEG, MJPEG, DV oder reines Audio) aufgebaut. Danach gibt das Playerprogramm nur noch das Start Kommando. Während der Wiedergabe sind innerhalb des Graphen verschiedene Filter und der Graph Manager aktiv.

2.2 DirectShow Filter

2.2.1 Die Aufgabe eines Filters
Die gesamte Verarbeitung der Nutzdaten (Video, Audio) während des Abspielvorganges erfolgt durch sogenannte Filter. Ein Filter ist ein System mehrerer Softwaremodule (Objekte) das Daten aus einer Quelle übernimmt, bearbeitet und and einen Empfänger weiter gibt. Dabei erfolgt in der Regel keine Informationsauswahl oder -einschränkung (das stelle ich mir als typische Aufgabe eines Filters vor).

2.2.2 Der Aufbau eines Filters
Ein Filter besteht aus mehreren COM-Objekten. Einem Objekt zur Bearbeitung der Nutzdaten und mehreren sogenannten Input- oder Output-Pins. (COM = Component Object Model, das ist eine MS Softwarearchitektur, die den Aufbau von Anwendungen aus binären (kompilierten, im PC ablauffähigen) Komponenten erlaubt.) Die Objekte Input-Pin übernehmen Daten von außerhalb und versorgen damit das Bearbeitungsobjekt. Output-Pins liefern das Bearbeitungsergebnis in der Regel bei einem nachfolgenden Filter ab. Für jeden Pin ist ein Media-Typ festgelegt. Es lassen sich nur Pins miteinander verbinden, die den gleichen Mediatyp unterstützen.

2.2.3 Die Funktionen verschiedener Filter
Die in einem Filtergraphen verwendeten Filter lassen sich entsprechend ihrer Funktion grob in verschiedene Kategorien eingruppieren:
Quellenfilter (Source Filter) Ein Source Filter speist Daten in einen Graphen ein. Die Daten können z.B. aus einer Datei oder oder TV-Empfangskarte stammen. Sie haben mindestens einen Output-Pin. Bei Source Filtern handelt es sich vielfach um Wrapper Filter. Diese übersetzten Filter Aufrufe entsprechend der bei DirectShow üblichen COM Methoden in Device Treiber Aufrufe.
Transformationsfilter (Transform Filter) Transform Filter nehmen einen Input Datenstrom entgegen, bearbeiten die Daten und erzeugen einen Output Datenstrom. Dazu gehören z.B. Encoder und Decoder. Sie haben midestens einen Input- und einen Output-Pin.
Splitter/Demultiplexer Filter Splitter teilen einen Input Datenstrom auf mehrere Output Datenströme auf. So werden aus einem gemischten Video/Audio Strom separate Video- und Audioströme. Sie haben mindestens einen Input-Pin und zwei Output-Pins.
Multiplexer Filter Mux Filter vereinen mehrere Input Datenströme in einen gemeinsamen Output Strom. Sie haben mindestens zwei Input-Pins und einen Output-Pin.
Renderer Filter Renderer Filter sitzen am Ende einer Filterkette. Sie nehmen Daten entgegen und stellen sie für den Anwender dar. Sie schreiben z.B. Daten in eine Datei, zeichnen sie auf einen Bildschirm oder liefern sie bei einer Soundkarte ab. Video und Audio Ströme werden meistens von unterschiedlichen Filtern gerendert (angezeigt bzw. hörbar genacht). Renderer Filter haben mindestens einen Input-Pin. Bei Renderer Filtern handelt es sich ebenfalls oft um Wrapper Filter. Diese übersetzten Filter Aufrufe entsprechend der bei DirectShow üblichen COM Methoden in Device Treiber Aufrufe.

2.3 Erzeugung eines Filter Graphen

2.3.1 Prinzipieller Vorgang
Voraussetzung für das Abspielen eines Videos ist ein vollständiger Graph. Der wird vor Beginn der Wiedergabe individuell konfiguriert. Das bedeutet, es werden Filter von der Quelle (File, DVD, Kamera) bis zu den Renderern für Video und Audio kombiniert. Es müssen zunächst aus allen in Windows registrierten DirectX-Filtern passende gesucht werden. Aus diesen werden die günstigsten (siehe unten) ausgewählt und miteinander verknüpft. Ein Output-Pin des Source-Filters wird mit dem Input-Pin eines Transformationsfilters verbunden. Dessen Output wiederum mit dem Input eines weiteren Transformationsfilters usw. Solange bis der Anschluss eines Renderer Filters möglich ist. Output- und Input-Pin müssen dabei natürlich jeweils den gleichen Mediatyp unterstützen.

2.3.2. Ausführung der Graphen Erzeugung
Die Erzeugung eines funktionierenden Graphen ist sehr komplex. Deshalb unterstützt DirectShow den Programmierer einer Player-Anwendung mehr oder weniger vollständig dabei. Dafür gibt es drei Stufen:
(A) Der Graph Manager (der auch das Abspielen organisiert) baut den gesamten Graphen zusammen. Die Anwendung (z.B. DVD-Player) gibt zwar den entsprechenden Auftrag, hat aber selbst kaum Einfluss auf dessen Ausführung.
(B) Die Anwendung legt bestimmte Filter fest und gibt dann den Auftrag zur Fertigstellung des Filtergraphen an den Graph Manager.
(C) Die Anwendung baut den Graphen komplett in eigener Regie zusammen.

2.3.3 Graph Editor (GraphEdit)
Es gibt das Hilfsprogramm GraphEdit. Mit dem soll ursprünglich ein Anwendungsprogrammierer einen Filtergraphen nach eigenen Vorstellungen herstellen (lassen) und testen. Eine grafische Darstellung zeigt die Verknüpfungen zwischen den verschiedenen Filtern an. Das Programm ist auch bei HomeTheatrePC-Fans sehr beliebt. Es baut einen Graphen automatisch nach Verfahren (A) zusammen. Außerdem hat der Anwender die Möglichkeit, bestimmte Filter manuell einzusetzen. Der fertige Graph lässt sich mit den Kommandos Start - Stop - Pause aktivieren, d.h. es gibt eine Wiedergabemöglichkeit. Wenn ein Anwendungsprogrammierer eine Debug-Möglichkeit in seinen Player einbaut, lässt sich mit GraphEdit auch anzeigen, welchen Graphen der Player verwendet. Es gibt einige Player, die diese Möglichkeit unterstützen (z.B. Elecard's MPEG-Player). Die meisten unterstützen sie leider nicht.

2.3.4 Beeinflussungsmöglichkeiten der Graphen Erzeugung
An dieser Stelle setzen die meisten Tipps und Rezepte in den Diskussionsforen an. Die meisten Benutzer eines DVD/MPEG-Players haben mehrere davon in ihrem PC installiert. Jede Softwareschmiede liefert für ihre Player eine Reihe von Filtern mit, die den DirectShow Standards entsprechen. Damit sind sie weitgehend in ihren Funktionen kompatibel und untereinander austauschbar (dafür reichen meistens auch Demo-Versionen der Player). Je nach dem von einem Player verwendeten Konfigurationsverfahren (A, B, C in 2.3.2) kann der Benutzer beeinflussen, welche Filter sein auserwählter Player tatsächlich verwendet. Weil vorher nicht bekannt ist, welches Verfahren verwendet wird, sind dafür eigene Experimente nötig. Verfahren A lässt alle Möglichkeiten offen, dagegen verhindert Verfahren C in der Regel alle Einflussnahmen. In den meisten Fällen lässt sich ein bestimmter Player dazu animieren, auch ein Filter der Konkurrenz zu nutzen, wenn man das mit ihm ausgelieferte aus der Windows Registry löscht. Diese Möglichkeit ist etwas brutal und kaum zu empfehlen. Manchmal ist es aber der einzige Weg zum Erfolg. Die Optionen des ZoomPlayers bieten z.B. diese Löschfunktion.

2.3.5. Merit Werte zur Steuerung des Graphenaufbaus
Eine wesentlich elegantere Beeinflussung des Aufbaus eines Graphen sind sogenannte Merit Werte. Das ist eine Art Empfehlungs-Zahl für den Graph Manager. Bei austauschbaren Filtern verwendet der Manager das mit dem größten Merit. Jedem Filter ist eine Merit-Zahl zugeordnet, die zunächst der Programmierer eines Filters festlegt. Bei dessen Installation wird sie in die Windows Registry übernommen. Dort lässt sie sich später vom Benutzer verändern. Zum Verändern sind die Optionen des ZoomPlayers geeignet. Die Bedeutung der Merit-Werte ist dort ebenfalls angegeben. Bei einem Merit ab 0x200000 und unterhalb wird ein Filter in der Regel nicht verwendet. Ab 0x800000 und oberhalb wird es bevorzugt verwendet. Haben zwei Filter die gleichen Merits, sollte man ausprobieren, was passiert. Ob die Veränderung des Merits den nötigen Erfolg hat, muss man im Einzelfall ausprobieren. Auf diesem Wege lassen sich häufig auch Filter einbauen, die interaktiv vom Graph Manager abgelehnt werden. Wenn wir einen Merit verändert haben, ist meistens ein Neustart von Windows nötig, damit die Veränderung wirksam ist.

3. Konkrete Austauschmöglichkeiten der Filter eines Graphen

3.1. Moonlight/Elecard's MPEG2Player (V2.1)
Dieser Player ist mein besonderer Liebling, weil er speziell für die Wiedergabe von MPEG-Files sehr einfach zu handhaben ist und fast alles abspielt. Er benötigt aber mehr Rechenleistung als andere Player, weil sein MPEG-Decoder nicht die Hardware von Grafikkarten unterstützt. So spielt er in der Standard Konfiguration HDTV nicht ruckelfrei ab. Absenken des Merit Wertes des Elecard Decoders bringt noch nicht den erhofften Erfolg. Es gibt aber eine spezielle Elecard Konfigurationsroutine, mit der sich der Decoder aus der Registry entfernen lässt. Und siehe - Jetzt lassen sich wahlweise (je nach Merit) die Decoder von Cyberlink (PowerDVD) oder Interlink (WinDVD) verwenden. Die Hardwareunterstützung meiner Radeon-Grafikkarte wird benutzt und die HDTV Wiedergabe ist einwandfrei.
Schöner Nebeneffekt: Die Elecard-Trial weist sehr agressiv darauf hin, dass sie nur eine Trial ist. Gemeinsam mit dem originalen Decoder verschwindet auch dieser Hinweis.

-----------------------------------------------------------

Die meisten Informationen finden sich in Microsoft's Internet Seiten über das DirectX Software Development Kit (SDK). Allerdings sind sie für C++ Anwendungsprogrammierer (ich gehöre nicht dazu) geschrieben und nicht ganz leicht zu verstehen. Ich habe versucht, sie für den Benutzer eines MPEG-Players zu vereinfachen.

Die neueste Version des GraphEdit habe ich nur im frei herunter ladbaren DirectX SDK (200 MByte) gefunden. Nachdem das SDK vorhanden ist, braucht man es nicht zu installieren, um GraphEdit zu starten. Es reicht der Doppelklick auf GraphEdt.exe. Um die Filtereigenschaften anzuzeigen muss außerdem die Datei propage.dll vorhanden sein.

Viel Erfolg und etwas Spaß bei eigenen Experimenten wünscht euch

RoBernd
robernd@radonmaster.de

Start-HDTV