SelfLinux Multimedia Video MPlayer - The Movie Player for Linux Abschnitt 8 | SelfLinux-0.13.0

| MPlayer - The Movie Player for Linux | Autor Formatierung GPL

#### 8 CD/DVD-Sektion

#### 8.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:

- Es gibt Berichte, dass diese Laufwerke bei hohen Geschwindkeiten Lesefehler erzeugen, vor allem bei schlecht gepressten CD-ROMs. Das Herabsetzen der Geschwindigkeit kann in diesen Fällen die Datenverluste verringern.
- Viele CD-ROM Laufwerke erzeugen störend laute Geräusche, die eine niedrigere Geschwindigkeit ebenfalls reduzieren kann.

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

root@linux ~# hdparm -E <Geschwindigkeit> <CD-ROM-Device>

root@linux ~# setcd -x <Geschwindigkeit> <CD-ROM-Device>

Du kannst auch folgendes probieren:

root@linux # echo current_speed:4 > /proc/ide/[CDROM-Device]/settings

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

root@linux # 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:

root@linux # 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.

#### 8.2 DVD-Wiedergabe

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.

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.

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.
- 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.

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.

#### 8.3 VCD Wiedergabe

Abspielen von Standard Video-CDs:

user@linux ~$ mplayer -vcd <Tracknummer> [-cdrom-device <Gerät>]

Beispiele:

user@linux ~$ 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 <../tech/patches.txt>, generische Unterstützung für VCD auf SCSI-Laufwerken zu implementieren.

VCD-Struktur:

Eine VCD besteht aus einem oder mehreren Spuren:

- Die erste Spur ist eine kleine Datenspur mit 2048 Bytes pro Sektor, die ein ISO9660-Dateisystem enthält, auf dem meist ein VCD-Player für Windows und eventuell auch andere Informationen (Bilder, Texte etc.) gespeichert sind.
- Die zweite Spur und alle folgenden sind MPEG-Spuren mit 2324 Bytes pro Sektor, die ein MPEG-PS-Datenpaket pro Sektor anstelle des Dateisystems enthalten. ähnlich wie bei Audio-CDs können diese Spuren nicht gemountet werden (hast du jemals eine Audio-CD gemountet, um sie abzuspielen?). Da die meisten Filme sich auf der zweiten Spur befinden, solltest du zuerst -vcd 2 ausprobieren.
- Es existieren auch VCDs ohne die erste Spur (nur eine Spur, überhaupt kein Dateisystem). Diese lassen sich abspielen aber nicht mounten.

ü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 Laufwerk 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.