Warum spielt VLC Videos ab und der WMP 12 nicht?

In Microsofts Windows 7-Foren tauchen immer wieder Anwender auf, bei denen unter Windows 7 keine Videos im Windows Media Player 12 abgespielt werden können – obwohl die betreffenden Codecs (für MPEG 2 etc.) bereits vorhanden sind. Im VideoLan Player (VLC) kann das Video wiedergegeben werden. Der Beitrag skizziert, warum das so sein kann und welche technischen Hintergründe dafür verantwortlich sind.


Anzeige

Videowiedergabe, was geht hinter den Kulissen ab?

Bei der Wiedergabe eines Videos sind in der Regel mehrere Komponenten (oft als Filter bezeichnet) beteiligt. Ein Filter liest die Daten aus der Videodatei. Dann werden die Daten in einen Audio- und Videodatenstrom aufgeteilt (gesplittet).

Die Audio- und Videodatenströme müssen anschließend durch einen Decoder aus der “komprimierten” Form des betreffenden Formats in einen unkomprimierten Datenstrom überführt werden. Für diesen Schritt kommen Audio- und Videodecoder zum Einsatz. Welche Decoder dabei verwendet werden, hängt vom Videoformat (z. B. WMV, ASF, MPEG-1, MPEG-2, DivX, Mov, AVI etc.) ab. Dabei lassen manche Videoformate sogar unterschiedliche Encodierungen von Audio- und Videodaten zu. Beispielsweise ist AVI lediglich ein Containerformat, welches die Audio- und Videodaten enthält. Diese können durch diverse Encoder verschlüsselt werden.

Die so entschlüsselten (decodierten) Datenströme werden dann über weitere Filter an die Audio- und Videoausgabe des Betriebssystem weitergereicht.

Von DirectShow-Filter zu Windows Media Foundation

Unter Windows gibt es historisch gewachsen zwei Ansätze, um die Wiedergabe von Audio-/Videomaterial über Filterketten abzuwickeln.

  •  DirectShow-Filter: Dieser Mechanismus wurde bis Windows XP bevorzugt zur Ausgabe der Audio-/Videodaten über Filterketten (Splitter, Decoder etc.) verwendet.
  • Media Foundation: Ab Windows Vista und damit auch in Windows 7 empfiehlt Microsoft die Verwendung der Media Foundation-API-Funktionen. Entwickler sollen Media Foundation Transform (Module) anstelle von DirectShow-Filtern schreiben.

Der Media Foundation-Ansatz bietet einige Vorteile, erlaubt aber auch eine verbesserte DRM-Unterstützung samt des Protected Media Path zur Wiedergabe hochauflösenden Videomaterials.


Werbung

Aus Anwendersicht muss das alles aber nicht so genau differenziert werden, unterstützen Windows Vista und Windows 7 doch auch weiterhin DirectShow über DirectX 10/11. Wichtig ist lediglich das Verständnis, das DirectShow und/oder Media Foundation bei der Wiedergabe von Audio- und Videomaterial beteiligt sind. Und nur wenn entsprechende Filter (Decoder, Splitter etc.) unter Windows vorhanden sind, kann eine Audio- oder Videodatei wiedergegeben werden. Details finden sich in den verlinkten Beiträgen [1, 2, 3, 4, 5].

Hinweis: Der Effeke, dass ein Video ohne Ton oder ohne Bild wiedergegeben wird oder dass das Bild auf dem Kopf steht, grüne Streifen aufweist etc. ist der Tatsache geschuldet, dass keine passenden DirectShow-Filter bzw. Media Foundation Transform-Module vorhanden sind.

Na und, hau ich ein Codec-Pack auf den Rechner drauf …

Die obige Erläuterung zeigt, dass zur Wiedergabe von Audio- und Videomaterial entsprechende Module benötigt werden. Gerade unter Windows XP war es nun so, dass die von Hause aus unterstützten Videoformate beschränkt waren. Microsoft lieferte nur die Filter für die hauseigenen Formate (WMV, WMA, ASF etc.) mit. Unter Windows Vista kam bei einigen Varianten noch ein Microsoft MPEG-2-Decoder zur Wiedergabe von DVD-Video hinzu.

In dieser Folge hat sich eine rege Szene entwickelt, die fehlende Filter für Audio- und Videowiedergabe in sogenannten Codec-Packs für Windows zusammenstellen und kostenlos anbieten. In den Ursprüngen waren die Pakete oft nicht mehr als gehackte Decoderpakete diverser Hersteller, die entspechend zusammengestoppelt waren. Die Qualität hat sich zwar durchwegs gebessert und mit FFDShow ist sogar eine ganz brauchbare  Lösung für den “wissenden Anwender” verfügbar.

Aber leider ist der ganze Ansatz auch “Kern des Problems”. Schlägt ein Anwender in Foren mit dem Problem auf, dass er eine Audio- oder Videodatei nicht wiedergeben kann, kommt garantiert der wohlmeinende Rat “installiere dir Codec-Pack xyz und es funzt”. Dass der Anwender dabei vom Regen in die Traufe kommt, habe ich bereits vor Jahren in meinem Vista-Blog in diesen [6, 7, 8] Artikeln beschrieben. Speziell der Abschnitt “Willkommen in der Codec-Hölle” in diesem Artikel gibt einen Vorgeschmack auf die möglichen Probleme.

Hinweis: In Windows 7 hat sich die “Welt” nochmals gewandelt. Dieses Betriebssystem bringt eine ganze Sammlung an Decodern mit, um die wichtigsten Videoformate wie WMV, AVI, MPEG-1, MPEG-2, DivX, Mov etc. zu unterstützen. Die Installation eines Codec-Packs ist also in den meisten Fällen unnötig bis kontraproduktiv.

Zwei Ansätze zum Decodieren der Audio-/Videodatenströme

Wenn man nun unter Windows in Probleme bei der Wiedergabe von Videos läuft, gibt es zwei Lösungsansätze.

  • Man versucht sein Glück, indem man entsprechende Decoder installiert und hofft, dass es mit der Videowiedergabe klappt. Die Erfolgsaussichten sind aber gering, wenn das Ganze auf “click-n-run” beschränkt wird – also mal schnell was installieren und hoffen, dass es klappt. Mit der Installation eines Codec-Packs wird das System meist hoffnungslos ruiniert. Experten können natürlich die DirectShow-Filterketten mit Werkzeugen wie dem DirectShow Filter Manager analysieren und ggf. die Merrits der beteiligten Decoder anpassen. Weiterführende Hinweise finden sich in den Verlinkungen dieses Artikels.
  • Die Alternative besteht darin, auf einen Media Player zu setzen, der keinen Gebrauch von der DirectShow-Filterkette und der Media Foundation macht.  Solange kein Protected Media Path zur Wiedergabe hochauflösenden und kopiergeschützten Videomaterials erforderlich ist, ist das die cleverere Variante. Der VLC-Player nutzt genau diesen Ansatz.

Falls ein Anwender also Probleme mit der Videowiedergabe unter Windows Vista / Windows 7 hat, sollte als erstes der VLC-Player (ggf. in der portablen Version) heruntergeladen und zum Testen verwendet werden. Oft wird es dann so sein, dass das Video problemlos im VLC abgespielt werden kann.

Warum tut es der VLC-Player?

An dieser Stelle möchte ich noch auf einen Spezialfall eingehen, der manche Anwender unter Windows 7 trifft. Laut meinen obigen Ausführungen wird Windows 7 ja bereits mit einem MPEG-2-Decoder von Microsoft ausgeliefert. Trotzdem tauchen in Microsofts Windows 7-Foren [9,10] immer wieder Anwender auf, die grundsätzlich keine Videos im Windows Media Player 12 abspielen können. Es lässt sich noch nicht mal ein WMV- oder MPEG-1-Video wiedergeben. Oder die Wiedergabe klappt nur bei Videos, die mit wenigen Frames pro Sekunde daherkommen. Setzen diese Anwender dagegen den (oft als “Konkurrenzprodukt” bezeichneten) VLC-Player ein, klappt die Videowiedergabe wie am Schnürchen.

Das ist dann wieder der berühmte Punkt, wo “auf den Schrott von Microsoft” geflucht wird. Dabei kann Microsoft an dieser Stelle in der Regel nichts zum Wiedergabeproblem. Die Ursache ist in diesem Fällen üblicherweise der Grafikkartentreiber. Selbst, wenn dieser WDDM-fähig ist, und Aero unterstützt, scheinen den Entwicklern grobe Schnitzer zu unterlaufen.

Wie kann das sein, da der VLC-Player doch auch die Grafikkarte benutzt? Der Grund liegt etwas tiefer begraben. Der Windows Media Player 12 setzt auf die Decoder der DirectShow-Filterkette bzw. die Module der Media Foundation. Und die Decoder machen von den DirectX-Funktionen regen Gebrauch. Dabei kann zum Rendern der Einzelbilder auch auf die Pixel- und Vertexshader der Grafikkarte zurückgegriffen werden. Shader sind Programme, die vom Grafikprozessor einer 3D-Grafikkarte ausgeführt werden und Berechnungen von Grafikausgaben selbsttätig vornehmen. Bereits bei Windows Vista wurde im Windows Movie Maker 6.0 auf die Shaderunterstützung zurückgegriffen (was der Grund für Probleme beim Einsatz dieses Programms war). Einige Hinweise habe ich in diesem Vista-Titel gegeben. Sobald der Grafikkartentreiber aber bestimmte DirectX-API-Funktionen nicht sauber an die Grafikkarte weiterreicht, werden die Shader nicht angesprochen. Auch das verzögerte Weiterreichen von Befehlen an die Shader kann Probleme bereiten. Ergo wird auch die Wiedergabe des Videostreams nicht oder nicht fehlerfrei erfolgen.

Beim VLC sieht die Welt dagegen anders aus, da dieser einen gänzlich anderen Ansatz zum Rendern eines Videos verfolgt. Der VLC bringt seine eigenen Decoder mit und benutzt weder das DirectShow-Filtersystem noch (zumindest nach meinem Wissen) diverse Shaderfunktionen der Grafikkarte. Der Grund ist recht einfach: der VLC-Player soll möglichst hardware- und plattformabhängig sein. Unter Mac OS X und Linux steht kein DirectX zur Verfügung (Windows Vista und Windows 7 setzen dagegen eine Shaderunterstützung des Shadermodells 3.0 voraus, damit Aero genutzt werden kann). Das hat zwar den Nachteil, dass unter Windows nicht alle Vorteile des DirectX-Systems samt Hardwareunterstützung genutzt werden können. Aber im konkreten Fall erweist sich das Ganze als Glücksfall, da die komplette DirectShow-Funktionalität als Fehlerquelle ausgeschlossen werden kann. Der VLC rendert die Einzelbilder des Videos und übergibt diese über einfache (Bitkopier-)Operationen an den Grafikspeicher der Grafikkarte. Bei modernen Prozessoren gibt es da auch kaum Einschränkungen bezüglich der Leistungsfähigkeit, so dass Videos sauber abgespielt werden.

Fazit: Nicht immer gleich auf “Microsoft-Schrott” schimpfen und ein “Codec-Pack” auf das System hauen. Die Gründe können auch tiefer liegen. Ich hoffe, dass der obige Beitrag ein paar Hintergründe erhellt und gleichzeitig intelligente Lösungsstrategien für Videowiedergabeprobleme aufgezeigt hat.

[Update Juni 2011: Zwischenzeitlich unterstützt/nutzt der VLC auch Hardwareunterstützung der GPU zum Videorendering. Diesbezügliche Aussagen im obigen Beitrag werden dadurch etwas relativiert bzw. es kann ähnliche Probleme wie beim WMP 12 geben, wenn die Grafikkarte bzw. der Grafiktreiber Ärger macht. Aber die Ausführungen zur DirectShow-Filterproblematik haben sich nicht geändert. Einfach als Zusatzinfo im Hinterkopf behalten.]

Links:
[1] Erklärt: So funktionieren DirectShow-Filter
[2] Erklärung für Videofilter beim Capturen
[3] DirectShow-Einführung bei Wikipedia (englisch)
[4] Media Foundation-Einführung bei Wikipedia (englisch)
[5] DirectShow Filters (Auflistung der Filter bei MSDN)
[6] DirectShow Filter Manager
[6] Explorer-Absturz beim Zugriff auf Bilderordner
[7] Ärger bei der Audio- und Videowiedergabe
[8] Wenn der Windows Movie Maker Ärger macht …
[9] Diskussion Videoprobleme in Microsoft-Forum
[10] Diskussion Videoprobleme in Microsoft-Forum


Weitere Infos zu Windows 7 finden sich in meinen Windows 7-Titeln.

(c) by Günter Born www.borncity.de
The source of smart computer books


Anzeige

Dieser Beitrag wurde unter Problemlösung, Scanner, Foto, Video, Video/Foto/Multimedia, Windows 7, Windows Media Player abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Ein Kommentar zu Warum spielt VLC Videos ab und der WMP 12 nicht?

  1. Markus sagt:

    Sehr interessante Erläuterung über Codecs. Mit Windows 7 hatte ich bisher kaum Probleme, was das Abspielen von Videos angeht – im Gegensatz zu XP und Vista.
    VLC verwende ich dennoch – aus alter Gewohnheit, und da dieser in der Lage ist, Trailer und Warnhinweise etc auf DVD zu überspringen.

    Markus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.