Bitte schau in der man-Page nach, wenn du eine Auflistung aller
verfügbaren Optionen willst. Die Syntax bei einer normalen Digital
Versatile Disc (DVD) sieht wie folgt aus:
user@linux $
mplayer -dvd <track> [-dvd-device <Gerät>]
|
Beispiel:
user@linux ~$
mplayer -dvd 1 -dvd-device /dev/hdc
|
Das Standard-DVD-Gerät ist /dev/dvd. Wenn das bei dir anders ist, so
erstelle einen symbolischen Link auf das richtige Gerät, oder gib es
auf der Kommandozeile mit der Option -dvd-device
an.
MPlayer benutzt libdvdread und libdvdcss für die DVD
Entschlüsselung und Wiedergabe. Diese beiden Bibliotheken sind im
libmpdvdkit2/-Unterverzeichnis enthalten und müssen nicht separat
installiert werden. Wir haben uns dazu entschlossen, da wir einen
Fehler in der libdvdread beheben mussten und einen Patch hinzufügt
haben, welcher Caching-Support für gecrackte CSS-Keys für
libdvdcss ermöglicht. Dies führt zu einer
Geschwindigkeitssteigerung, da MPlayer nicht vor jeder Wiedergabe die
Verschlüsselung erneut knacken muss.
MPlayer kann jedoch auch die systemweiten libdvdread- und
libdvdcss-Bibliotheken verwenden. Diese Lösung wird jedoch aus oben
den oben genannten Gründen *nicht* empfohlen. Außerdem kann es zu
Fehlern, Inkompatibilitäten zwischen den Bibliotheken und niedriger
Geschwindigkeit führen.
Unterstützung für DVD-Navigation:
An einer Unterstützung für DVD-Navigation via dvdnav wird
gearbeitet. Sie ist jedoch noch nicht vollendet und wird momentan
nicht gewartet. Wer weiß - vielleicht lässt sie sich sogar
kompilieren.
Alte DVD-Unterstützung - Optional:
Nützlich, wenn du verschlüsselte VOBs von der Festplatte abspielen
willst. Kompiliere und installiere libcss 0.0.1 (nicht neuer). Wenn
MPlayer sie nicht findet, dann benutze die Option -csslib
/pfad/zu/libcss.so. Um diese Bibliothek zu benutzen musst du
root-Rechte haben, das SUID-Bit für die MPlayer-Programmdatei setzen
oder den fibmap_mplayer-Wrapper benutzen, der das SUID-Bit gesetzt
hat.
DVD-Strukturen:
DVDs benutzen alle 2048 Bytes/Sektor mit ECC/CRC. Meistens beinhalten
sie ein UDF-Dateisystem in einem einzigen Track. Dieses Dateisystem
enthält mehrere Dateien (kleine .IFO- und .BUK-Dateien sowie die
großen (1GB) .VOB-Dateien). Sie sind echte Dateien und können von
einem in's Dateisystem eingehängten Dateisystem einer nicht
verschlüsselten DVD abgespielt oder kopiert werden.
Die .IFO-Dateien enthalten Filmnavigationsinformationen (z.B. Kapitel,
Titel, verschiedene Kameraeinstellungen sofern vorhanden, Tabelle mit
den Sprachen etc.) und werden benötigt, um den Inhalt der .VOB-Dateien
(den eigentlichen Film) lesen und interpretieren zu können. Die
.BUK-Dateien sind Backups der .IFO-Dateien. Sie benutzen
ausschließlich Sektornummern zur Adressierung, sodass man zur
DVD-Navigation das direkte Ansprechen einzelner Sektoren der DVD
implementieren muss. .IFOs werden ebenfalls benötigt, um den Inhalt
entschlüsseln zu können.
Aus diesem Grund braucht die alte DVD-Unterstützung ein in den
Dateibaum eingehängtes DVD-Dateisystem sowie zusätzlich Zugriff auf
das Device, um einzelne Sektoren der DVD lesen zu können. Leider
musst du (unter Linux) root-Rechte besitzen, um die Sektorenadresse
einer Datei zu erhalten. Du hast nun die folgenden Möglichkeiten:
-
Sei root oder gib der mplayer-Programmdatei das SUID-Bit.
-
Lass MPlayer das Wrapper-Programm fibmap_mplayer ausführen,
welches das SUID-Bit gesetzt hat, um Zugriff auf die DVD zu
bekommen (wird bei der alten DVD-Unterstützung mit der libcss so
gemacht).
-
Lass die Dateisystemtreiber des Kernels links liegen und
programmiere den Support dafür erneut im User-Space. libdvdread
0.9.x und libmpdvdkit2 machen das genau so (neue
DVD-Unterstützung). Der UDF-Treiber des Kernels wird nicht
benötigt, da diese Bibliotheken ihren eigenen
UDF-Dateisystemtreiber mitbringen. Die DVD muss nicht einmal in
den Dateibaum eingehängt sein, da direkt auf die Sektoren der DVD
zugegriffen wird.
Manchmal hat ein Benutzer keinen Zugriff auf das Device (z.B.
/dev/dvd). Deswegen haben die Autoren der libdvdread einen
Emulationsmodus spendiert, der eine Umsetzung zwischen Sektornummern
und Dateinamen/Offsets vornimmt. Damit wird Sektorzugriff auch bei in
das Dateisystem eingehängten DVDs und sogar bei auf die Festplatte
kopierten Dateien ermöglicht.
libdvdread akzeptiert sogar Mountpoints anstelle von Devicenamen.
Dabei schaut sie in /proc/mounts nach, um den tatsächlichen
Devicenamen für den Sektorzugriff herauszufinden. Entwickelt wurde
dies Verfahren für Solaris, da Solaris Devicenamen dynamisch vergibt.
Der Standardname für das DVD-Device ist /dev/dvd. Sollte das bei dir
anders sein, so erstelle einen symbolischen Link auf das richtige
Device, oder gib es beim Starten mit der Option -dvd-device separat
an.
DVD-Authentifizierung:
Die Authentifizierung und Entschlüsselung der neuen DVD-Unterstützung
wird durch eine gepatchte libdvdcss ermöglicht (siehe oben). Die
Zugriffsmethoden können über die Umgebungsvariable DVDCSS_METHOD
gewählt werden. Gültige Werte sind key,
disk und title.
Wird nichts angegeben, so versucht libdvdcss die folgenden Methoden
(Standardwerte: key, title-Request):
-
bus key: Dieser Schlüssel wird während der Authentifizierung
(eine lange Mischung aus ioctls und verschiedenen
Schlüsselaustauschen, dient der Entschlüsselung) verhandelt. Er
wird benutzt, um die title- und disk-Schlüssel vor dem Versand
über den ungeschützten Systembus zu verschlüsseln und damit ein
Ablauschen der Schlüssel zu verhindern. Der bus key ist
erforderlich, um den verschlüsselten disk key zu erhalten und
zu entschlüsseln.
-
cached key: MPlayer sucht nach bereits gecrackten Schlüsseln,
die im ~/.mplayer/DVDKeys-Verzeichnis gespeichert werden (das
ist schnell ;).
-
key: Falls kein cached key vorhanden ist, so versucht MPlayer
den disk key mit Hilfe einer Reihe von mitgelieferten und
einkompilierten player keys zu entschlüsseln.
-
disk: Wenn die key-Methode fehlschlägt (z.B. wenn keine
Player-Schlüssel dabei sind), so versucht MPlayer, den disk key
mit Hilfe eines brute-force-Algorithmusses zu knacken. Dieser
Prozess belastet die CPU sehr und benötigt mindestens 64MB
Speicher (16M 32Bit breite Einträge in einer Hashtabelle), um
temporäre Werte zu speichern. Diese Methode sollte immer
funktionieren, ist aber langsam.
-
title request: Mit dem disk key kann MPlayer den
verschlüsselten title key anfordern, der auf /versteckten
Sektoren/, die mit ioctl() ausgelesen werden, auf der DVD
gespeichert ist. Der Gebietsschutz der RPC-2-konformen
DVD-Laufwerke wird in diesem Schritt realisiert. Bei manchen
Laufwerken kann dieser Schritt fehlschlagen. Wenn die
Anforderung erfolgreich war, wird der title key mit dem bus key
und dem disk key entschlüsselt.
-
title: Diese Methode wird dann benutzt, wenn die Anforderung für
den title key fehlgeschlagen ist. Sie basiert nicht auf einem
Datenaustausch mit dem DVD-Laufwerk sondern benutzt einen
kryptographischen Angriff, der den title key versucht zu
erraten. (Dabei wird versucht, sich wiederholende Muster im
entschlüsselten Inhalt der VOBs zu finden. Geraten wird dann,
dass die ersten verschlüsselten Bytes des dazu passenden
verschlüsselten Textes eine Weiterführung dieser Muster sind.)
Diese Methode ist auch als "known plaintext attack" (Angriff bei
bekanntem Klartext) oder "DeCSSPlus" bekannt. In seltenen Fällen
kann auch diese Methode fehlschlagen, wenn nicht genug
verschlüsselte Daten auf der DVD vorhanden sind, um einen
statistischen Angriff zu starten, oder weil sich der Schlüssel
mitten in einem Titel ändert. Diese Methode ist die einzige
Möglichkeit, den auf der Festplatte gespeicherten Inhalt einer
DVD zu entschlüsseln und bei RPC2-Laufwerken mit falschem
Regionalcode (langsam).
RPC-1-konforme DVD-Laufwerke sind nur über den Gebietsschutz
geschützt, den der Softwareplayer bietet. RPC-2-konforme Laufwerke
haben dagegen einen Hardwareschutz, der es nur fünf mal erlaubt, den
Gebietscode zu ändern. Es ist evtl. nötig oder empfehlenswert, dass
du Firmware für dein Laufwerk findest, die nur einen RPC-1-Schutz
implementiert hat. Firmwareupgrades können auf dieser
Firmwareseite
gefunden werden.
*Warnung:* Du kannst nur fünf mal den Gebietscode ändern.
|