Codec Probleme

Manchmal kommt es zu hartnäckigen Codec Problemen im Zusammenspiel mit ErgoPlanet. Diese sehr technischen Ausführungen sollen zeigen wie man diese Probleme aufspüren und lösen kann. Danke an Erich L. für den Input!

Um die Problematik besser verstehen zu können wurden in folgender Grafik die relevanten Informationen zusammengestellt. Es ist eine Übersicht mit den DirectShow-Filtern, die in den verschiedenen Windows-Versionen standardmäßig verwendet werden.

Um ein Video mit DirectShow wiederzugeben, werden normalerweise mindestens vier verschiedene Filter in einem Graph verknüpft:

    • File Source Filter (rot) – verantwortlich für das Lesen des AV-Files (z.B. AVI-Container-File).
    • Splitter (gelb) – verantwortlich für das Entpacken der verschiedenen Multimedia-Dateien im AV-Container-File. Der Splitter ist gleichzeitig das Interface für den folgenden Decoder und damit auch verantwortlich für die Synchronisation der Wiedergabe. Hier gibt es auf manchen Rechnern Probleme :-( .
    • Decoder (blau) – verantwortlich für die Decodierung des jeweiligen Multimediaformats. Dieser Filter muss die Sprache des Codecs verstehen, mit dem der Multimediainhalt encodiert wurde. Neben dem von Windows standardmäßig eingesetzten Decoder können hier noch alternative Decoder für MPEG-4 eingesetzt werden, wie z.B. DivX, XviD, ffdshow, 3ivx u.a.
    • Renderer (grün) – verantwortlich für die Wiedergabe auf dem Ausgabegerät. Jede Windows-Version bzw. DirectX-Version verwendet einen anderen Renderer mit unterschiedlichen Eigenschaften.
    • Zusätzlich können noch div. Effektfilter eingesetzt werden.

Wie man hier sehen kann, sind die meisten Windows-DirectShow-Filter in einer zentralen DLL „quartz.dll“ gespeichert. Da es von jedem Filtertyp verschiedene Implementationen auf einem Rechner geben kann, muss es einen Auswahl-Mechanismus geben, für welchen Media-Dateityp welcher Filter eingesetzt werden soll. Dazu gibt es in jedem Filter die Attribute „Media Types – Major bzw. Subtype“. Das reicht aber nicht, da es auch für jeden Media-Untertyp mehrere alternative Filter geben kann. Deshalb gibt es noch eine Prioritätsziffer „Merit Value“, die in jedem Filter konfigurierbar ist. Die häufig verwendeten Merit Values findest man in folgender Grafik. Ausgewählt wird bei konkurrierenden Filtern immer der mit dem größten Merit Value.

Wenn man nun per selbst geschriebener Software eine Videodatei wiedergeben will und sich bei der Konstruktion des DirectShow-Graphen auf Windows abstützt, hängt das Ergebnis somit von folgenden Faktoren ab:

    • Welche Filter sind auf dem Rechner installiert und in der Registry angemeldet? (Nur in der Registry angemeldete Filter werden von Windows ausgewählt!)
    • Welchen Merit Value haben die Filter einer Filterkategorie, die für die RLV-Videodatei passen?

Schwierig wird es, wenn durch die Installation von Video-Playern oder Codecs die für Windows zentrale DLL „quartz.dll“ in der Registry abgemeldet wurde. Dann wird Windows gezwungen, nur Filter von anderen Herstellern einzusetzen. Die Lösung ist hier, quartz.dll mit Hilfe von regsrv32.exe wieder zu registrieren. Aber selbst dies reicht möglicherweise immer noch nicht. Man muss auch noch durch einen passenden Merit Value sicherstellen, dass der Splitter-Filter eingesetzt wird, mit dem die ErgoPlanet-Synchronisation funktioniert. Tests haben ergeben, dass dies nur mit dem „Avi Splitter Filter“ in der quartz.dll funktioniert. Bei allen anderen AVI-Splittern wie z.B. dem „MPC – Avi Splitter“ läuft das Video viel zu schnell und kann nicht gesteuert werden.

Der "MPC – Avi Splitter", der nicht mit ErgoPlanet funktioniert, stammt z.B. von "Media Player Classic" . Es würde evtl. reichen dieses Tool zu aktualisieren oder zu deinstallieren.

Zum Testen und Debuggen von DirectShow-Graphen gibt es folgende Tools:

Wenn man mit einem der Graph-Editoren unter File „Render Media File“ ein RLV-File aufruft, dann sieht man, mit welchen Filtern Windows das Video wiedergeben wird.