summaryrefslogtreecommitdiffstats
path: root/DOCS/cd-dvd.html
blob: 2f2a891f87b60d41442f61a47f19b9b6bf6cf59a (plain)
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
<!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/DVD drives</A></H2>

<P>Linux documentation excerpt:</P>

<P>Modern CD-ROM drives can attain very high head speeds, yet some CD-ROM drives
  are capable of running at reduced speeds. There are several reasons that might
  make you consider changing the speed of a CD-ROM drive:</P>

<UL>
  <LI>There have been reports of read errors at these high speeds, especially
    with badly pressed CD-ROMs. Reducing the speed can prevent data loss under
    these circumstances.</LI>
  <LI>Many CD-ROM drives are annoyingly loud, a lower speed may reduce the
    noise.</LI>
</UL>

<P>You can reduce the drive speed with hdparm or a program called setcd.
  It works like this:</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>hdparm -E [speed] [cdrom device]</CODE></P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>setcd -x [speed] [cdrom device]</CODE></P>

<P>You can also try</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>echo current_speed:4 &gt; /proc/ide/[cdrom device]/settings</CODE></P>

<P>but you will need root privileges. The following command may also help:</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>echo file_readahead:2000000 &gt; /proc/ide/[cdrom device]/settings</CODE></P>

<P>This sets prefetched file reading to 2MB, which helps with scratched CD-ROMs.
  It is recommended that you also tune your CD-ROM drive with hdparm:</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>hdparm -d1 -a8 -u1 (cdrom device)</CODE></P>

<P>This enables DMA access, read-ahead, and IRQ unmasking (read the hdparm man
  page for a detailed explanation).</P>

<P>Please refer to "<CODE>/proc/ide/[cdrom device]/settings</CODE>" for
  fine-tuning your CD-ROM.</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 playback</A></H2>
  
<P>For the complete list of available options, please read the man page.</P>

<H4>New-style DVD support (mpdvdkit2)</H4>

<P>MPlayer uses <CODE>libdvdread</CODE> and <CODE>libdvdcss</CODE> for
  DVD decryption and playback. These two libraries are contained in the
  <CODE>libmpdvdkit2/</CODE> subdirectory of the MPlayer source tree, you
  do not have to install them separately. We opted for this solution because
  we had to fix a libdvdread bug, and apply a patch which adds <B>cracked CSS
  keys caching support</B> to libdvdcss. This results in a large speed increase
  because the keys do not have to be cracked every time before playing.</P>

<P>MPlayer can also use system-wide <CODE>libdvdread</CODE> and
  <CODE>libdvdcss</CODE> libraries, but this solution is <B>not</B> recommended,
  as it can result in bugs, library incompatibilities, and slower speed.</P>

<H4>DVD Navigation support (dvdnav)</H4>

<P>Support for DVD navigation via <CODE>dvdnav</CODE> was being worked on, but
  it was never finished properly and is therefore <B>not recommended</B>!</P>

<H4>Old-style DVD support - OPTIONAL</H4>

<P>Useful if you want to play encoded VOBs from <B>hard disk</B>. Compile and
  install <B>libcss</B> 0.0.1 (not newer) for this (If MPlayer fails to
  detect it, use the <CODE>-csslib /path/to/libcss.so</CODE> option). To use it,
  you need to be root, use a suid root MPlayer binary or let MPlayer call the
  suid-root fibmap_mplayer wrapper program.</P>

<H4>DVD structure</H4>

<P>DVD disks use all 2048 b/s sectors with ecc/crc. They usually have an UDF
  filesystem on a single track, containing various files (small .IFO and .BUK
  files and big (1GB) .VOB files). They are real files and can be copied/played
  from a mounted file system of an unencrypted DVD.</P>

<P>The .IFO files contain the movie navigation informations (chapter/title/angle
  map, language table, etc) and is needed to read and interpret the .VOB content
  (movie). The .BUK files are backups of them. They use <B>sectors</B> everywhere,
  so you need to use raw addressing of sectors of the disc to implement DVD
  navigation. It's also needed to decrypt the content.</P>

<P>The whole old-style DVD support with libcss needs therefore a mounted DVD
  filesystem and a raw sector-based access to the device. Unfortunately you must
  be root (under Linux) to get the sector address of a file. You got the
  following choices:</P>

<UL>
  <LI>Force the user to be root or use a suid-root mplayer binary.</LI>
  <LI>Let MPlayer call the suid-root fibmap_mplayer wrapper program to access
    the DVD (used in the old-style DVD playback over libcss).</LI>
  <LI>Don't use the kernel's filesystem driver at all and re-implement it in
    userspace. libdvdread 0.9.x and libmpdvdkit does this (New-style DVD
    support). The kernel udf filesystem drivers isn't needed as they already
    have their own, built-in udf fs driver. Also the dvd, doesn't needs to be
    mounted as only the raw sector-based access is used.</LI>
</UL>

<P>Sometimes /dev/dvd can't be read by users, so the libdvdread authors
  implemented an emulation layer which transfers sector addresses to
  filenames+offsets, to emulate raw access on the top of a mounted filesystem
  or even on a hard disk.</P>

<P>libdvdread even accepts the mountpoint instead of the device name for raw
  access and checks in <CODE>/proc/mounts</CODE> to get the device name. It was
  developed for Solaris, where device names are dynamically allocated.</P>

<P>The default DVD device is <CODE>/dev/dvd</CODE>. If your setup differs,
  make a symlink, or specify the correct device on the command line with the
  <CODE>-dvd-device</CODE> option.</P>

<H4>DVD authentication</H4>

<P>The authentication and decryption method of the new-style DVD support is done
  using a patched libdvdcss (see above). The method can be specified over the
  environment variable <CODE>DVDCSS_METHOD</CODE> which can be set to
  <CODE>key</CODE>, <CODE>disk</CODE> or <CODE>title</CODE>.</P>

<P>If nothing is specified it tries the following methods
  (default: key, title request):</P>

<OL>
  <LI><B>bus key:</B> This key is negotiated during authentication (a long mix
    of ioctls and various key exchanges, crypto stuff) and is used to encrypt
    the title and disk keys before sending them over the unprotected bus
    (to prevent eavesdropping). The bus key is needed to get and predecrypt the
    crypted disk key.</LI>
  <LI><B>cached key:</B> MPlayer looks for eventually already cracked
    title keys which are stored in the <CODE>~/.mplayer/DVDKeys</CODE> directory
    (fast ;).</LI>
  <LI><B>key:</B> If no cached key is available, MPlayer tries to
    decrypt the disk key with a set of included player keys.</LI>
  <LI><B>disk:</B> If the key method fails (e.g. no included player keys),
    MPlayer will crack the disk key using a brute force algorithm.
    This process is CPU intensive and requires 64 MB of memory (16M 32bit
    entries hash table) to store temporary data. This method should always
    work (slow).</LI>
  <LI><B>title request:</B> With the disk key MPlayer requests the crypted title
    keys, which are inside <I>hidden sectors</I> using <CODE>ioctl()</CODE>.
    The region protection of RPC-2 drives is performed in this step and may
    fail on such drives. If it succeeds, the title keys will be decrypted with
    the bus and disk key.</LI>
  <LI><B>title:</B> This method is used if the title request failed and does
    not rely on any key exchange with the DVD drive. It uses a crypto attack to
    guess the title key directly (by finding a repeating pattern in the
    decrypted VOB content and guessing that that the plain text for first
    encrypted bytes are a continuation of that pattern).
    The method is also known as "known plaintext attack" or "DeCSSPlus".
    In rare cases this may fail because there is not enough encrypted data on
    the disk to perform a statistical attack or because the key changes in the
    middle of a title. On the other hand it is the only way to decrypt a DVD
    stored on a hard disk or a DVD with the wrong region on an RPC2 drive
    (slow).</LI>
</OL>

<P>RPC-1 DVD drives only protect region settings over software DVD players.
  RPC-2 drives have a hardware protection that allows 5 changes only. It might
  be needed/recommended to upgrade the firmware to RPC-1 if you have a RPC-2 DVD
  drive. Firmware upgrades can be found
  <A HREF="http://perso.club-internet.fr/farzeno/firmware/">here</A>. If there is
  no firmware upgrade available for your device, use the
  <A HREF="http://www.linuxtv.org/download/dvd/dvd_disc_20000215.tar.gz">regionset
  tool</A> to set the region code of your DVD-drive (under Linux).
  <B>Warning:</B> You can only set the region 5 times.</P>


<H2><A NAME="vcd">4.3 VCD playback</A></H2>

<P>For the complete list of available options, please read the man page.
  The Syntax for a standard Video CD (VCD) is as followed:
  <CODE>mplayer -vcd &lt;track&gt; [-cdrom-device &lt;device&gt;]</CODE>.<BR>
  Example: <CODE>mplayer -vcd 2 -cdrom-device /dev/hdc</CODE></P>

<H4>VCD structure</H4>

<P>VCD disks consists of 2 or more track:</P>

<UL>
  <LI>The first track is a few MB 2048 bytes/sector data track, with an iso9660
    filesystem, usualy containing win32 VCD player programs and maybe other infos
    (jpegs, text, etc).</LI>
  <LI>The second and other tracks are raw 2324 bytes/sector mpeg tracks, without
    any filesystem but raw mpeg ps data, one packet per sector. they contain the
    movie(s)... The tracks <B>can't be mounted</B>! It is similar to audio
    tracks (e.g. You never mounted an audio cd to play it, or did you? No).
    As most movies are inside track too, you should try <CODE>-vcd 2</CODE>
    first.</LI>
  <LI>There exist VCD disks without the first track too (single track and no
    filesystems at all). They are still playable, but can't be mounted.</LI>
</UL>

<P>About .DAT files:</P>

<P>The ~600 MB file visible on the first track of the mounted vcd isn't a real
  file! It's a so called iso gateway, created to allow Windows to handle such
  tracks (Windows doesn't allow raw device access to applications at all).
  Under linux, you cannot copy or play such files (they contain garbage).
  Under Windows it is possible as its iso9660 driver emulates the raw reading of
  tracks in this file. To play a .DAT file you need a kernel driver which can be
  found in the Linux version of PowerDVD. It has a modified iso9660 filesystem
  (vcdfs/isofs-2.4.X.o) driver, which is able to emulate the
  raw tracks through this shadow .DAT file. If you mount the disc using their
  driver, you can copy and even play .DAT files with mplayer. But it <B>won't
  work</B> with the standard iso9660 driver of the kernel! It is recommended to
  use the <CODE>-vcd</CODE> option instead. Alternate options for VCD copy are
  the new cdfs kernel driver (shows CD <I>sessions</I> as image files) and
  cdrdao (a bit-to-bit cd grabber/copier application).</P>

<P>The default VCD device is <CODE>/dev/cdrom</CODE>. If your setup differs,
  make a symlink, or specify the correct device on the command line with the
  <CODE>-cdrom-device</CODE> option.</P>

</BODY>
</HTML>