1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
|
<!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önnen sehr hohe Abtastgeschwindigkeiten
erreichen. Einige können jedoch auch ihre Geschwindigkeit reduzieren.
Es gibt mehrere Grü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ällen die
Datenverluste verringern.</LI>
<LI>Viele CD-ROM Laufwerke erzeugen störend laute Gerä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> <CODE>hdparm -E <Geschwindigkeit>
<CD-ROM-Device></CODE></P>
<P> <CODE>setcd -x <Geschwindigkeit>
<CD-ROM-Device></CODE></P>
<P>Du kannst auch folgendes probieren:</P>
<P> <CODE>echo current_speed:4 >
/proc/ide/[CDROM-Device]/settings</CODE></P>
<P>Aber dafür brauchst du Root-Privilegien. Der folgende Befehl
könnte ebenfalls helfen:</P>
<P> <CODE>echo file_readahead:2000000 >
/proc/ide/[CDROM-Device]/settings</CODE></P>
<P>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:</P>
<P> <CODE>hdparm -d1 -a8 -u1 <CDROM-Device>
</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> Speed: <CODE>cdcontrol [-f device] speed [speed]
</CODE></P>
<P> 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ügbaren Optionen willst. Die Syntax bei einer normalen Digital
Versatile Disc (DVD) sieht wie folgt aus:</P>
<P><CODE>mplayer dvd://<track> [-dvd-device <Gerät>]</CODE></P>
<P>Beispiel: <CODE>mplayer dvd://1 -dvd-device /dev/hdc</CODE></P>
<P>Das Standard-DVD-Gerät ist <CODE>/dev/dvd</CODE>. 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 <CODE>-dvd-device</CODE> an.
</P>
<P>MPlayer benutzt <CODE>libdvdread</CODE> und <CODE>libdvdcss</CODE>
für die DVD Entschlüsselung und Wiedergabe. Diese beiden Bibliotheken
sind im <CODE>libmpdvdkit2/</CODE>-Unterverzeichnis enthalten und mü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ügt haben, welcher <B>Caching-Support für gecrackte
CSS-Keys</B> für <CODE>libdvdcss</CODE> ermöglicht. Dies führt
zu einer Geschwindigkeitssteigerung, da MPlayer nicht vor jeder
Wiedergabe die Verschlüsselung erneut knacken muss.</P>
<P>MPlayer kann jedoch auch die systemweiten <CODE>libdvdread</CODE>-
und <CODE>libdvdcss</CODE>-Bibliotheken verwenden. Diese Lösung wird
jedoch aus oben den oben genannten Gründen <B>nicht</B> empfohlen.
Ausßerdem kann es zu Fehlern, Inkompatibilitäten zwischen den
Bibliotheken und niedriger Geschwindigkeit führen.</P>
<H4>Unterstützung für DVD-Navigation</H4>
<P>An einer Unterstützung für DVD-Navigation via <CODE>dvdnav</CODE>
wird gearbeitet. Sie ist jedoch noch nicht vollendet und wird momentan nicht
gewartet. Wer weiß - vielleicht lässt sie sich sogar
compilieren.</P>
<H4>Alte DVD-Unterstützung - OPTIONAL</H4>
<P>Nützlich, wenn du verschlü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ü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ä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.</P>
<P>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
<B>Sektornummern</B> 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.</P>
<P>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:</P>
<UL>
<LI>Sei root oder gib der mplayer-Programmdatei das SUID-Bit.</LI>
<LI>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 <CODE>libcss</CODE> so
sgemacht).</LI>
<LI>Lass die Dateisystemtreiber des Kernels links liegen und programmiere
den Support dafür erneut im User-Space. <CODE>libdvdread</CODE>
0.9.x und <CODE>libmpdvdkit2</CODE> 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.</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ängten DVDs und sogar bei auf die Festplatte kopierten
Dateien ermöglicht.</P>
<P><CODE>libdvdread</CODE> akzeptiert sogar Mountpoints anstelle von
Devicenamen. Dabei schaut sie in <CODE>/proc/mounts</CODE> nach, um den
tatsächlichen Devicenamen für den Sektorzugriff herauszufinden.
Entwickelt wurde diees Verfahren für Solaris, da Solaris Devicenamen
dynamisch vergibt.</P>
<P>Der Standardname fü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üsselung der neuen
DVD-Unterstützung wird durch eine gepatchte <CODE>libdvdcss</CODE>
ermöglicht (siehe oben). Die Zugriffsmethoden können über die
Umgebungsvariable <CODE>DVDCSS_METHOD</CODE> gewählt werden. Gä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ü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.</LI>
<LI><B>cached key:</B> MPlayer sucht nach bereits gecrackten
Schlü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üsseln.</LI>
<LI><B>disk:</B> 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.</LI>
<LI><B>title request:</B> Mit dem disk key kann MPlayer den
verschlü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üsselt.</LI>
<LI><B>title:</B> 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).</LI>
</OL>
<P>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
<A HREF="http://perso.club-internet.fr/farzeno/firmware/">Firmwareseite</A>
gefunden werden. Solltest du dort keine Firmware fü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 ändern (klappt
nur unter Linux). <B>Warnung:</B> Du kannst nur fünf mal den Gebietscode
ä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://<Tracknummer> [-cdrom-device
<Gerät>]</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ä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ändig implementiert ist.
Wenn du Ahnung von der SCSI-Programmierung hast, dann
<A HREF="../tech/patches.txt">hilf uns</A>, generische Unterstützung
fü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ält, auf dem meist ein VCD-Player
fü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. Ähnlich wie bei Audio-CDs kö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, überhaupt
kein Dateisystem). Diese lassen sich abspielen aber nicht mounten.</LI>
</UL>
<H4>Über .DAT-Dateien:</H4>
<P>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 (<CODE>vcdfs/isofs-2.4.X.o</CODE>),
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 <B>nicht</B> mit dem Standard-ISO9660-Treiber funktionieren! Benutze dabei
<CODE>-vcd</CODE>. Alternativen fü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ür-Bit-Grabben/Kopieren von CDs.</P>
</BODY>
</HTML>
|