4.1. CD-ROM- und DVD-ROM-Laufwerke

Auszug aus der Linux-Dokumentation:

Moderne CDROM-Laufwerke können sehr hohe Abtastgeschwindigkeiten erreichen. Einige können jedoch auch ihre Geschwindigkeit reduzieren. Es gibt mehrere Gründe, dies zu tun:

Die Lesegeschwindigkeit eines IDE-CD-Laufwerkes kann mit hdparm oder einem Programm namens setcd verringert werden. Das geht so:

    hdparm -E <Geschwindigkeit> <CD-ROM-Device>

    setcd -x <Geschwindigkeit> <CD-ROM-Device>

Du kannst auch folgendes probieren:

    echo current_speed:4 > /proc/ide/[CDROM-Device]/settings

Aber dafür brauchst du Root-Privilegien. Der folgende Befehl könnte ebenfalls helfen:

    echo file_readahead:2000000 > /proc/ide/[CDROM-Device]/settings

Dies setzt einen 2MB Lesepuffer für die Daten, was sich bei zerkratzten CDs als nützlich erweist. Wenn du die Größe zu hoch wählst, dann wird das Laufwerk ständig beschleunigen und abbremsen und dadurch die Geschwindigkeit dramatisch verringern. Es ist auch empfehlenswert, das CD-ROM Laufwerk via hdparm auf performantere Werte einzustellen:

    hdparm -d1 -a8 -u1 <CDROM-Device>

Dies aktiviert den DMA-Zugriff, Vorauslesen und IRQ-Unmasking (genauere Details dazu findest du in der hdparm-Manpage)

Bitte schau dir "/proc/ide/[CDROM-Device]/settings" an, um das CD-ROM feineinzustellen.

SCSI-Laufwerke kennen keine einheitliche Schnittstelle zum Setzen dieser Werte (oder kennst du eine? Dann sag sie uns!) Es gibt ein Tool, das mit Plextor-SCSI-Laufwerken funktioniert.

FreeBSD:

    Speed: cdcontrol [-f device] speed [speed]

    DMA: sysctl hw.ata.atapi_dma=1

4.2. DVD-Wiedergabe

Bitte schau in der man-Page nach, wenn du eine Auflistung aller verfügbaren Optionen willst.

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. Ausß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 compilieren.

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äusselten 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:

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 diees 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äultige Werte sind key, disk und title.

Wird nichts angegeben, so versucht libdvdcss die folgenden Methoden (Standardwerte: key, title-Request):

  1. 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.
  2. cached key: MPlayer sucht nach bereits gecrackten Schlüsseln, die im ~/.mplayer/DVDKeys-Verzeichnis gespeichert werden (das ist schnell ;).
  3. key: Falls kein cached key vorhanden ist, so versucht MPlayer den disk key mit Hilfe einer Reihe von mitgelieferten und eincompilierten player keys zu entschlüsseln.
  4. 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.
  5. 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.
  6. 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 zu finden, die nur einen RPC-1-Schutz implementiert. Firmwareupgrades können auf dieser Firmwareseite gefunden werden. Solltest du dort keine Firmware für dein Laufwerk finden, so kannst du mit dem region set tool den Gebietscode deines DVD-Laufwerks ändern (klappt nur unter Linux). Warnung: Du kannst nur fünf mal den Gebietscode ädnern.

4.3. VCD Wiedergabe

Abspielen von Standard Video-CDs:

mplayer -vcd <Tracknummer> [-cdrom-device <Gerät>]

Beispiele:
mplayer -vcd 2 -cdrom-device /dev/hdc

Das Standard-CD-Rom-Laufwerk ist /dev/cdrom. Falls das bei dir nicht der Fall ist, erstelle einen symbolischen Link oder gib das richtige Gerät mit -cdrom-device auf der Kommandozeile an.

Anmerkung: Zumindest einige Plextor- und Toshiba-SCSI-CD-Rom-Laufwerke haben eine grauenvolle Geschwindkeit beim Lesen von VCDs. Das liegt daran, dass der ioctl-Aufruf CDROMREADRAW nicht vollständig implementiert ist. Wenn du Ahnung von der SCSI-Programmierung hast, dann hilf uns, generische Unterstützung für VCD auf SCSI-Laufwerken zu implementieren.

VCD-Struktur

Eine VCD besteht aus einem oder mehreren Spuren:

Über .DAT-Dateien:

Die ca. 600MB große sichtbare Datei auf der ersten Spur der gemounteten VCD ist keine echte Datei! Es handelt sich dabei um ein sogenanntes ISO-Gateway, das erstellt wurde, um Windows zu ermöglichen, solche Spuren zu lesen (Windows erlaubt Anwendungen den direkten Zugtriff auf das Laufwekr nämlich nicht). Unter Linux kannst du diese Datei weder einfach kopieren noch einfach abspielen (sie enthalten dann nur Müll). Unter Windows geht das, weil der ISO9660-Treiber den direkten Zugriff auf die Spur emuliert. Um eine .DAT-Datei abzuspielen, brauchst du einen Kerneltreiber, der in der Linux-Version von PowerDVD enthalten ist. Er enthält einen modifizierten Treiber für das ISO9660-Dateisystem (vcdfs/isofs-2.4.X.o), der ebenfalls in der Lage ist, das direkte Auslesen über diese .DAT-Datei zu emulieren. Wenn du die Disc mit diesem Treiber mountest, dann kannst du die .DAT-Datei kopieren und sogar direkt mit MPlayer abspielen. Das wird aber nicht mit dem Standard-ISO9660-Treiber funktionieren! Benutze dabei -vcd. Alternativen für's Kopieren einer VCD sind der neue cdfs-Kerneltreiber (der nicht Teil des offiziellen Kernels ist), der CD-Sessions als Abbilder anzeigt, und cdrdao, ein Anwendung zum Bit-für-Bit-Grabben/Kopieren von CDs.