mpv/DOCS/de/cd-dvd.html

323 lines
16 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>CD, DVD, VCD - MPlayer - The Movie Player for Linux</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="../default.css">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H2><A NAME="drives">4.1 CD-ROM- und DVD-ROM-Laufwerke</A></H2>
<P>Auszug aus der Linux-Dokumentation:</P>
<P>Moderne CDROM-Laufwerke k&ouml;nnen sehr hohe Abtastgeschwindigkeiten
erreichen. Einige k&ouml;nnen jedoch auch ihre Geschwindigkeit reduzieren.
Es gibt mehrere Gr&uuml;nde, dies zu tun:</P>
<UL>
<LI>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&auml;llen die
Datenverluste verringern.</LI>
<LI>Viele CD-ROM Laufwerke erzeugen st&ouml;rend laute Ger&auml;usche, die
eine niedrigere Geschwindigkeit ebenfalls reduzieren kann.</LI>
</UL>
<P>Die Lesegeschwindigkeit eines IDE-CD-Laufwerkes kann mit <CODE>hdparm</CODE>
oder einem Programm namens <CODE>setcd</CODE> verringert werden. Das geht
so:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>hdparm -E &lt;Geschwindigkeit&gt;
&lt;CD-ROM-Device&gt;</CODE></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>setcd -x &lt;Geschwindigkeit&gt;
&lt;CD-ROM-Device&gt;</CODE></P>
<P>Du kannst auch folgendes probieren:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>echo current_speed:4 &gt;
/proc/ide/[CDROM-Device]/settings</CODE></P>
<P>Aber daf&uuml;r brauchst du Root-Privilegien. Der folgende Befehl
k&ouml;nnte ebenfalls helfen:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>echo file_readahead:2000000 &gt;
/proc/ide/[CDROM-Device]/settings</CODE></P>
<P>Dies setzt einen 2MB Lesepuffer für die Daten, was sich bei zerkratzten CDs
als n&uuml;tzlich erweist. Wenn du die Gr&ouml;&szlig;e zu hoch w&auml;hlst,
dann wird das Laufwerk st&auml;ndig beschleunigen und abbremsen und dadurch die
Geschwindigkeit dramatisch verringern. Es ist auch empfehlenswert, das CD-ROM
Laufwerk via hdparm auf performantere Werte einzustellen:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>hdparm -d1 -a8 -u1 &lt;CDROM-Device&gt;
</CODE></P>
<P>Dies aktiviert den DMA-Zugriff, Vorauslesen und IRQ-Unmasking
(genauere Details dazu findest du in der <CODE>hdparm</CODE>-Manpage)</P>
<P>Bitte schau dir "<CODE>/proc/ide/[CDROM-Device]/settings</CODE>" an, um
das CD-ROM feineinzustellen.</P>
<P>SCSI-Laufwerke kennen keine einheitliche Schnittstelle zum Setzen dieser
Werte (oder kennst du eine? Dann sag sie uns!) Es gibt ein Tool, das mit <A
HREF="http://das.ist.org/~georg/">Plextor-SCSI-Laufwerken</A> funktioniert.</P>
<P>FreeBSD:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;Speed: <CODE>cdcontrol [-f device] speed [speed]
</CODE></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;DMA: <CODE>sysctl hw.ata.atapi_dma=1</CODE></P>
<H2><A NAME="dvd">4.2 DVD-Wiedergabe</A></H2>
<P>Bitte schau in der man-Page nach, wenn du eine Auflistung aller
verf&uuml;gbaren Optionen willst. Die Syntax bei einer normalen Digital
Versatile Disc (DVD) sieht wie folgt aus:</P>
<P><CODE>mplayer -dvd &lt;track&gt; [-dvd-device &lt;Ger&auml;t&gt;]</CODE></P>
<P>Beispiel: <CODE>mplayer -dvd 1 -dvd-device /dev/hdc</CODE></P>
<P>Das Standard-DVD-Ger&auml;t ist <CODE>/dev/dvd</CODE>. Wenn das bei dir
anders ist, so erstelle einen symbolischen Link auf das richtige Ger&auml;t,
oder gib es auf der Kommandozeile mit der Option <CODE>-dvd-device</CODE> an.
</P>
<P>MPlayer benutzt <CODE>libdvdread</CODE> und <CODE>libdvdcss</CODE>
f&uuml;r die DVD Entschl&uuml;sselung und Wiedergabe. Diese beiden Bibliotheken
sind im <CODE>libmpdvdkit2/</CODE>-Unterverzeichnis enthalten und m&uuml;ssen
nicht separat installiert werden. Wir haben uns dazu entschlossen, da wir einen
Fehler in der <CODE>libdvdread</CODE> beheben mussten und einen Patch
hinzuf&uuml;gt haben, welcher <B>Caching-Support f&uuml;r gecrackte
CSS-Keys</B> f&uuml;r <CODE>libdvdcss</CODE> erm&ouml;glicht. Dies f&uuml;hrt
zu einer Geschwindigkeitssteigerung, da MPlayer nicht vor jeder
Wiedergabe die Verschl&uuml;sselung erneut knacken muss.</P>
<P>MPlayer kann jedoch auch die systemweiten <CODE>libdvdread</CODE>-
und <CODE>libdvdcss</CODE>-Bibliotheken verwenden. Diese L&ouml;sung wird
jedoch aus oben den oben genannten Gr&uuml;nden <B>nicht</B> empfohlen.
Aus&szlig;erdem kann es zu Fehlern, Inkompatibilit&auml;ten zwischen den
Bibliotheken und niedriger Geschwindigkeit f&uuml;hren.</P>
<H4>Unterst&uuml;tzung f&uuml;r DVD-Navigation</H4>
<P>An einer Unterst&uuml;tzung f&uuml;r DVD-Navigation via <CODE>dvdnav</CODE>
wird gearbeitet. Sie ist jedoch noch nicht vollendet und wird momentan nicht
gewartet. Wer wei&szlig; - vielleicht l&auml;sst sie sich sogar
compilieren.</P>
<H4>Alte DVD-Unterst&uuml;tzung - OPTIONAL</H4>
<P>Nützlich, wenn du verschl&uuml;sselte VOBs von der Festplatte abspielen
willst. Kompiliere und installiere <B>libcss</B> 0.0.1 (nicht neuer). Wenn
MPlayer sie nicht findet, dann benutze die Option <CODE>-csslib
/pfad/zu/libcss.so</CODE>. Um diese Bibliothek zu benutzen musst du root-Rechte
haben, das SUID-Bit f&uuml;r die MPlayer-Programmdatei setzen oder den
fibmap_mplayer-Wrapper benutzen, der das SUID-Bit gesetzt hat.</P>
<H4>DVD-Strukturen</H4>
<P>DVDs benutzen alle 2048 Bytes/Sektor mit ECC/CRC. Meistens beinhalten sie
ein UDF-Dateisystem in einem einzigen Track. Dieses Dateisystem enth&auml;lt
mehrere Dateien (kleine .IFO- und .BUK-Dateien sowie die gro&szlig;en (1GB)
.VOB-Dateien). Sie sind echte Dateien und k&auml;nnen von einem in's
Dateisystem eingeh&auml;ngten Dateisystem einer nicht verschl&auml;usselten
DVD abgespielt oder kopiert werden.</P>
<P>Die .IFO-Dateien enthalten Filmnavigationsinformationen (z.B. Kapitel,
Titel, verschiedene Kameraeinstellungen sofern vorhanden, Tabelle mit den
Sprachen etc.) und werden ben&auml;tigt, um den Inhalt der .VOB-Dateien (den
eigentlichen Film) lesen und interpretieren zu k&ouml;nnen. Die .BUK-Dateien
sind Backups der .IFO-Dateien. Sie benutzen ausschlie&szlig;lich
<B>Sektornummern</B> zur Adressierung, sodass man zur DVD-Navigation das
direkte Ansprechen einzelner Sektoren der DVD implementieren muss. .IFOs werden
ebenfalls ben&auml;tigt, um den Inhalt entschl&auml;sseln zu k&auml;nnen.</P>
<P>Aus diesem Grund braucht die alte DVD-Unterst&uuml;tzung ein in den
Dateibaum eingeh&auml;ngtes DVD-Dateisystem sowie zus&auml;tzlich Zugriff auf
das Device, um einzelne Sektoren der DVD lesen zu k&ouml;nnen. Leider musst du
(unter Linux) root-Rechte besitzen, um die Sektorenadresse einer Datei zu
erhalten. Du hast nun die folgenden M&ouml;glichkeiten:</P>
<UL>
<LI>Sei root oder gib der mplayer-Programmdatei das SUID-Bit.</LI>
<LI>Lass MPlayer das Wrapper-Programm fibmap_mplayer ausf&uuml;hren,
welches das SUID-Bit gesetzt hat, um Zugriff auf die DVD zu bekommen
(wird bei der alten DVD-Unterst&uuml;tzung mit der <CODE>libcss</CODE> so
sgemacht).</LI>
<LI>Lass die Dateisystemtreiber des Kernels links liegen und programmiere
den Support daf&uuml;r erneut im User-Space. <CODE>libdvdread</CODE>
0.9.x und <CODE>libmpdvdkit2</CODE> machen das genau so (neue
DVD-Unterst&uuml;tzung). Der
UDF-Treiber des Kernels wird nicht ben&ouml;tigt, da diese Bibliotheken
ihren eigenen UDF-Dateisystemtreiber mitbringen. Die DVD muss nicht einmal
in den Dateibaum eingeh&auml;ngt sein, da direkt auf die Sektoren der
DVD zugegriffen wird.</LI>
</UL>
<P>Manchmal hat ein Benutzer keinen Zugriff auf das Device (z.B.
<CODE>/dev/dvd</CODE>). Deswegen haben die Autoren der <CODE>libdvdread</CODE>
einen Emulationsmodus spendiert, der eine Umsetzung zwischen Sektornummern und
Dateinamen/Offsets vornimmt. Damit wird Sektorzugriff auch bei in das
Dateisystem eingeh&auml;ngten DVDs und sogar bei auf die Festplatte kopierten
Dateien erm&ouml;glicht.</P>
<P><CODE>libdvdread</CODE> akzeptiert sogar Mountpoints anstelle von
Devicenamen. Dabei schaut sie in <CODE>/proc/mounts</CODE> nach, um den
tats&auml;chlichen Devicenamen f&uuml;r den Sektorzugriff herauszufinden.
Entwickelt wurde diees Verfahren f&uuml;r Solaris, da Solaris Devicenamen
dynamisch vergibt.</P>
<P>Der Standardname f&uuml;r das DVD-Device ist <CODE>/dev/dvd</CODE>. Sollte
das bei dir anders sein, so erstelle einen symbolischen Link auf das richtige
Device, oder gib es beim Starten mit der Option <CODE>-dvd-device</CODE>
separat an.
<H4>DVD-Authentifizierung</H4>
<P>Die Authentifizierung und Entschl&uuml;sselung der neuen
DVD-Unterst&uuml;tzung wird durch eine gepatchte <CODE>libdvdcss</CODE>
erm&ouml;glicht (siehe oben). Die Zugriffsmethoden k&ouml;nnen &uuml;ber die
Umgebungsvariable <CODE>DVDCSS_METHOD</CODE> gew&auml;hlt werden. G&auml;ultige
Werte sind <CODE>key</CODE>, <CODE>disk</CODE> und <CODE>title</CODE>.</P>
<P>Wird nichts angegeben, so versucht libdvdcss die folgenden Methoden
(Standardwerte: key, title-Request):</P>
<OL>
<LI><B>bus key:</B>Dieser Schl&uuml;ssel wird w&auml;hrend der
Authentifizierung (eine lange Mischung aus ioctls und verschiedenen
Schl&uuml;sselaustauschen, dient der Entschl&uuml;sselung) verhandelt.
Er wird benutzt, um die title- und disk-Schl&uuml;ssel vor dem Versand
&uuml;ber den ungesch&uuml;tzten Systembus zu verschl&uuml;sseln und damit
ein Ablauschen der Schl&uuml;ssel zu verhindern. Der bus key ist
erforderlich, um den verschl&uuml;sselten disk key zu erhalten und zu
entschl&uuml;sseln.</LI>
<LI><B>cached key:</B> MPlayer sucht nach bereits gecrackten
Schl&uuml;sseln, die im <CODE>~/.mplayer/DVDKeys</CODE>-Verzeichnis
gespeichert werden (das ist schnell ;).</LI>
<LI><B>key:</B> Falls kein cached key vorhanden ist, so versucht
MPlayer den disk key mit Hilfe einer Reihe von mitgelieferten
und eincompilierten player keys zu entschl&uuml;sseln.</LI>
<LI><B>disk:</B> Wenn die key-Methode fehlschl&auml;gt (z.B. wenn keine
Player-Schl&uuml;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&ouml;tigt mindestens 64MB Speicher
(16M 32Bit breite Eintr&auml;ge in einer Hashtabelle), um tempor&auml;re
Werte zu speichern. Diese Methode sollte immer funktionieren, ist aber
langsam.</LI>
<LI><B>title request:</B> Mit dem disk key kann MPlayer den
verschl&uuml;sselten title key anfordern, der auf <I>versteckten
Sektoren</I>, die mit <CODE>ioctl()</CODE> 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&uuml;sselt.</LI>
<LI><B>title:</B> Diese Methode wird dann benutzt, wenn die Anforderung
f&uuml;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&uuml;sselten Inhalt der VOBs zu finden.
Geraten wird dann, dass die ersten verschl&uuml;sselten Bytes des dazu
passenden verschl&uuml;sselten Textes
eine Weiterf&uuml;hrung dieser Muster sind.) Diese Methode ist auch als
"known plaintext attack" (Angriff bei bekanntem Klartext) oder "DeCSSPlus"
bekannt. In seltenen F&auml;llen kann auch diese Methode fehlschlagen,
wenn nicht genug verschl&uuml;sselte Daten auf der DVD vorhanden sind,
um einen statistischen Angriff zu starten, oder weil sich der Schl&uuml;ssel
mitten in einem Titel &auml;ndert. Diese Methode ist die
einzige M&ouml;glichkeit, den auf der Festplatte gespeicherten Inhalt einer
DVD zu entschl&uuml;sseln und bei RPC2-Laufwerken mit falschem Regionalcode
(langsam).</LI>
</OL>
<P>RPC-1-konforme DVD-Laufwerke sind nur &uuml;ber den Gebietsschutz
gesch&uuml;tzt, den der Softwareplayer bietet. RPC-2-konforme Laufwerke haben
dagegen einen Hardwareschutz, der es nur f&uuml;nf mal erlaubt, den Gebietscode
zu &auml;ndern. Es ist evtl. n&ouml;tig oder empfehlenswert, dass du Firmware
f&uuml;r dein Laufwerk zu finden, die nur einen RPC-1-Schutz implementiert.
Firmwareupgrades k&ouml;nnen auf dieser
<A HREF="http://perso.club-internet.fr/farzeno/firmware/">Firmwareseite</A>
gefunden werden. Solltest du dort keine Firmware f&uuml;r dein Laufwerk finden,
so kannst du mit dem
<A HREF="http://www.linuxtv.org/download/dvd/dvd_disc_20000215.tar.gz">
region set tool</A> den Gebietscode deines DVD-Laufwerks &auml;ndern (klappt
nur unter Linux). <B>Warnung:</B> Du kannst nur f&uuml;nf mal den Gebietscode
&auml;dnern.</P>
<H2><A NAME="vcd">4.3 VCD Wiedergabe</A></H2>
<P><B>Abspielen von Standard Video-CDs:</B></P>
<P><CODE>mplayer -vcd &lt;Tracknummer&gt; [-cdrom-device
&lt;Ger&auml;t&gt;]</CODE></P>
<P>Beispiele:<BR>
<CODE>mplayer -vcd 2 -cdrom-device /dev/hdc</CODE><BR></P>
<P>Das Standard-CD-Rom-Laufwerk ist <CODE>/dev/cdrom</CODE>. Falls das bei dir
nicht der Fall ist, erstelle einen symbolischen Link oder gib das richtige
Ger&auml;t mit <CODE>-cdrom-device</CODE> auf der Kommandozeile an.</P>
<P><B>Anmerkung</B>: 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&auml;ndig implementiert ist.
Wenn du Ahnung von der SCSI-Programmierung hast, dann
<A HREF="../tech/patches.txt">hilf uns</A>, generische Unterst&uuml;tzung
f&uuml;r VCD auf SCSI-Laufwerken zu implementieren.</P>
<P>Bis dahin kannst du mit
<A HREF="http://140.132.1.204/OS/Linux/packages/X/viewers/readvcd/">readvcd</A>
Daten von der VCD extrahieren und diese mit MPlayer abspielen.</P>
<H4>VCD-Struktur</H4>
<P>Eine VCD besteht aus einem oder mehreren Spuren:</P>
<UL>
<LI>Die erste Spur ist eine kleine Datenspur mit 2048 Bytes pro Sektor, die
ein ISO9660-Dateisystem enth&auml;lt, auf dem meist ein VCD-Player
f&uuml;r Windows und eventuell auch andere Informationen (Bilder, Texte
etc.) gespeichert sind.</LI>
<LI>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. &Auml;hnlich wie bei Audio-CDs k&ouml;nnen diese Spuren
<B>nicht gemountet</B> werden (hast du jemals eine Audio-CD gemountet,
um sie abzuspielen?). Da die meisten Filme sich auf der zweiten Spur
befinden, solltest du zuerst <CODE>-vcd 2</CODE> ausprobieren.</LI>
<LI>Es existieren auch VCDs ohne die erste Spur (nur eine Spur, &uuml;berhaupt
kein Dateisystem). Diese lassen sich abspielen aber nicht mounten.</LI>
</UL>
<H4>&Uuml;ber .DAT-Dateien:</H4>
<P>Die ca. 600MB gro&szlig;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&ouml;glichen, solche Spuren
zu lesen (Windows erlaubt Anwendungen den direkten Zugtriff auf das Laufwekr
n&auml;mlich nicht). Unter Linux kannst du diese Datei weder einfach kopieren
noch einfach abspielen (sie enthalten dann nur M&uuml;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&auml;lt einen modifizierten
Treiber f&uuml;r das ISO9660-Dateisystem (<CODE>vcdfs/isofs-2.4.X.o</CODE>),
der ebenfalls in der Lage ist, das direkte Auslesen &uuml;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 <B>nicht</B> mit dem Standard-ISO9660-Treiber funktionieren! Benutze dabei
<CODE>-vcd</CODE>. Alternativen f&uuml;r's Kopieren einer VCD sind der neue <A
HREF="http://www.elis.rug.ac.be/~ronsse/cdfs/">cdfs</A>-Kerneltreiber (der
nicht Teil des offiziellen Kernels ist), der CD-<I>Sessions</I> als Abbilder
anzeigt, und <A HREF="http://cdrdao.sourceforge.net/">cdrdao</A>, ein
Anwendung zum Bit-f&uuml;r-Bit-Grabben/Kopieren von CDs.</P>
</BODY>
</HTML>