4.1. CD-ROM meghajtók

A Linux dokumentációjából:

Néhány CDROM meghajtó képes szabályozni az olvasás sebességét. Jónéhány okunk lehet arra, hogy ezt kihasználjuk:

- Magas sebességen előfordulhatnak olvasási hibák, főleg hibásan készített CD lemezek esetén.
- Nem elhanyagolható a sebességgel arányos zajszint sem.

Ajánlott a 'hdparm' vagy a 'setcd' nevű programot használni.

`hdparm -E [sebesség] [meghajtó]`

`setcd -x [sebesség] [meghajtó]`

A következő parancs is hasznos lehet:

`echo file_readahead:2000000 >/proc/ide/[meghajtó]/settings`

Ez 2Mb-ot olvas előre olvasáskor (karcos CDROM-oknál hasznos). Ha túl magasra állítod, a folytonosan fel-, és lepörgő meghajtó drámai teljesítménycsökkenést fog okozni. Ajánlott továbbá a 'hdparm' program használata:

`hdparm -d1 -a8 -u1 (meghajtó)`

Ez bekapcsolja a DMA hozzáférést, előreolvasást, IRQ unmaskingot. (ha ezeket nem érted, *olvasd el a hdparm man-ját*)

Kísérletezz a `/proc/ide/[meghajtó]/settings` file-lal további tuning céljából.

Az SCSI meghajtóknak nincs ilyen egységes felülete ezen paraméterek állításához. Plextor SCSI meghajtókhoz viszont rendelkezésre áll egy program.

FreeBSD:

Speed: `cdcontrol [-f meghajtó] speed [sebesség]`

DMA: `sysctl hw.ata.atapi_dma=1`

4.2. DVD lejátszás

A rendelkezésre álló opciók teljes listája a man page-ben tekinthető meg. Egy szabványos DVD lemez lejátszása a következőképpen történik:

`mplayer dvd://<sáv> [-dvd-device <egység>]`

Például: `mplayer dvd://1 -dvd-device /dev/hdc`

Az alapértelmezett DVD egység a `/dev/dvd`. Ha a rendszered ettől különbözik, egy megfelelő symlink-kel, vagy a `-dvd-device` opció használatával megoldhatod a problémát.

#### Új DVD támogatás (mpdvdkit2)

Az MPlayer a `libdvdread` és `libdvdcss` néven ismert könyvtárakat használja a DVD dekódolásához és lejátszásához. Ez a két program a `libmpdvdkit2/` alkönyvtárban található, így külön installálásuk szükségtelen és felesleges. Azért használjuk ezt a módszert mert így lehetőségünk nyílt kijavítani egy `libdvdread` bugot, és megpatchelni a `libdvdcss-t` olyan módon hogy a feltört CSS kulcsokat mentse el a `$HOME/.mplayer/DVDKeys` könyvtárba, így a következő lejátszásnál nem lesz szükség ezek újabb feltörésére.

Az MPlayer képes a rendszerben már jelenlevő libdvdread és libdvdcss könyvtárakat is használni, de ez a megoldás nem ajánlott, hibákat eredményezhet, könyvtár-inkompatibilitást, és alacsonyabb sebességet.

#### DVD navigáció (dvdnav)

A `libdvdnav` támogatásának készítése folyamatban volt, de soha nem készült el. Jelenleg nem használható.

#### A DVD-k struktúrája

A DVD lemezek 2048 b/s szektorokat használnak ecc/crc-vel. Általában egy UDF filerendszert tartalmaznak egyetlen sávon, ami több file-t tartalmaz (kis .IFO és .BUK, és nagy (1GB) .VOB). Ezek valódi file-ok és másolhatóak/lejátszhatóak egy mountolt, nem titkosított DVD-ről.

Az .IFO file-ok tartalmazzák a navigációs információkat (fejezet/sáv/szög/nyelv, stb), amelyek nélkülözhetetlenek a .VOB-ok értelmezéséhez. A .BUK file-ok ezek másolatai. Ezek a file-ok szektorokban számolnak, így a DVD navigáció helyes implementálásához ezt át kell számítani. Szükséges továbbá a file-ok titkosításának megszüntetése.

Az imént felsorolt okok miatt a DVD támogatás szektor szintű hozzáférést igényel az egységhez. Linux alatt ehhez sajnos root jogokkal kell rendelkezni. Ennek megoldásaképp az UDF filerendszert userspace-ben kell implementálni. A libdvdread 0.9.x és a libmpdvdkit ezt csinálja. A kernel UDF meghajtójára nincs szükség. A DVD-t sem kell mountolni, mivel csak a szektor alapú hozzáférés lesz érvényben.

Néha a /dev/dvd felhasználók számára nem hozzáférhető, így a libdvdread fejlesztők készítettek egy emulációs réteget, amely a szektorcímeket filenév+offset-re alakítja, ezáltal emulálva a "nyers" hozzáférést akár egy mountolt filerendszeren, vagy merevlemezen.

A libdvdread még mountolási pontot is elfogad meghajtó helyett, és a `/proc/mounts` alapján szerzi meg a meghajtó nevét. Ez a módszer Solaris-ra készült, ahol ezen nevek allokálása dinamikusan történik.

Az alapértelmezett DVD egység a `/dev/dvd`. Ha a te rendszered ettől eltér, hozz létre egy symlink-et, vagy add meg a helyes nevet a parancssorban. Erre a `-dvd-device` opció szolgál.

#### DVD authentikáció

Ez, és a titkosítás feltörése egy patchelt libdvdcss-sel történik (lásd fent). A módszerek között a `DVDCSS_METHOD` környezeti változó állításával lehet választani. A lehetséges értékek: `key`, `disk`, vagy `title`.

Ha semmi nincs megadva, a következő módszerek közül választ (alapban: key, title request):

1. bus key: ez a kulcs az authentikáció után készül el, és ezzel történik a titkosítása a kulcsoknak mielőtt a buszra kerülnének (a hallgatózást elkerülendő).
2. cached key: az MPlayer keres egy már feltört, megfelelő kulcsot az `~/.mplayer/DVDKeys` könyvtárban (gyors).
3. key: ha nincs cache-elt kulcs, az MPlayer megpróbálja a rendelkezésre álló kulcsokkal feltörni a lemezt.
4. disk: ha a key módszer nem jár sikerrel, az MPlayer megpróbálhatja egy brute force algoritmussal feltörni a lemezt. Ez a folyamat erősen igényli a CPU-t, és 64Mb memóriát is átmeneti adattárolásra. Ez a metódus mindig működik (lassú).
5. title request: a lemez kulccsal az MPlayer feltöri a title kulcsot, amik rejtett szektorokban tárolódnak. Az RPC-2 meghajtók régióellenőrzése is ilyenkor történik, ezért az ilyen meghajtókon hibát jelezhet. Ha sikerült, a title kulcs feltörése következik a bus és disk kulcsokkal.
6. title: ez a módszer lesz kipróbálva, ha a title request sikertelen volt. Itt nincs szükség kulccserére a DVD meghajtóval. Ismétlődő minták alapján megpróbálja kitalálni a title kulcsot. Ritka esetekben sikertelen lehet, például ha nincs elég titkosított adat, vagy a title közepén megváltozik a kulcs. Mindenesetre ez az egyetlen módszer egy merevlemezen tárolt DVD feltörésére, vagy egy helytelen régióval rendelkező RPC2 meghajtón (lassú).

Az RPC-1-es DVD meghajtók a régióbeállításokat csak a szoftveres DVD lejátszókkal tudják korlátozni, az RPC-2 meghajtók hardveresen vannak limitálva 5 változtatásra. Ajánlott lehet a firmware-t RPC-1-re upgradelni, ha RPC-2-es meghajtód van. Ezek az upgrade-k itt találhatóak. Ha nincs firmware upgrade a meghajtódhoz, használd a regionset parancsot hogy Linux alatt is át tudd állítani a meghajtód régiókódját. Vigyázz: csak 5 lehetőséged van rá.

4.3. VCD lejátszás

A rendelkezésre álló opciók teljes listája a man page-ben tekinthető meg.

#### VCD struktúra

A VCD lemezek 2 vagy több sávból állnak:

- Az első sáv egy pár MB-os 2048 byte/szektor méretű adatsáv, egy iso9660 filerendszerrel. Ez általában win32-es VCD lejátszót, vagy más információkat tartalmaz (jpeg, szöveg, stb).
- A második (és a többi) sáv nyers 2324 byte/szektor méretű MPEG sáv, amely nem filerendszert hanem nyers MPEG-PS adatot tartalmaz, egy csomagot szektoronként. Ezeket a sávokat nem lehet mountolni!
- Léteznek VCD lemezek amelyeken nincs is első sáv (abszolut filerendszer nélkül). Ezek is lejátszhatóak, de nem mountolhatóak.

A .DAT file-okról:

Azok a ~600Mb-os file-ok amik a mountolt VCD-k elso sávján vannak, nem igazi file-ok! Ez egy úgynevezett ISO átjáró, amivel a Windows programok hozzáférhetnek az ilyen file-okhoz (mivel vinnyózon a programok nem tudnak hozzáférni közvetlenül az eszközhöz). Linux alatt nem tudod másolni vagy lejátszani az ilyen file-okat, mert szemetet tartalmaznak. Windows alatt azért lehetséges, mert az iso9660 meghajtója ezeken a file-okon keresztül emulálja a közvetlen lemezhozzáférést.

Az alapértelmezett VCD egység a `/dev/cdrom`. Ha a beállításod ettől eltér, készíts egy symlink-et, vagy add meg paraméterként a `-cdrom-device` opcióval.

Megjegyzés: legalábbis a Plextor és Toshiba SCSI CD-ROM meghajtókról ismert hogy nagyon lassan játszanak le VCD-ket. Ennek oka, hogy a CDROMREADRAW ioctl nincs teljesen implementálva ezeken a meghajtókon. Ha értesz az SCSI programozásához, segíts a VCD-k SCSI-n történő támogatásában.

Addigis VCD-ről az adatot a readvcd programmal lehet leszedni, az így keletkező file-t pedig az MPlayer is lejátsza.

#### A VCD-k struktúrája

- Az első sáv egy 2048 byte/sector méretú szabvány sáv iso9660 filerendszerrel, általában Windows-os VCD lejátszó programot tartalmaz, néha egyéb információ (képek, szöveg, stb).
- A második, és utána következő sávok nyers 2324 byte/sector méretű MPEG (film) sávok, mindegyik egy-egy MPEG-PS adat/sector-t tartalmaz filerendszer helyett. Hasonlóan az audio CD sávokhoz, ezeket a sávokat sem lehet mountolni (Mountoltál már valaha audio CD-t hogy lejátszd?). Mivel a legtöbb film ebben a sávban van, a `vcd://2` opciót kell használnod.
- Léteznek VCD lemezek amelyeken nincs rajta az első sáv (tehát csak egyetlen sávot tartalmaznak, filerendszer nélkül). Ezek is lejátszhatóak, de nem mountolhatóak.

#### A .DAT file-okról:

A ~600Mb-os fileok amik a mountolt Video CD-k első sávján találhatóak nem igazi file-ok! Ez az úgynevezett ISO gateway, amiknek a célja hogy Windows-os applikációk is hozzá tudjanak férni az MPEG sávokhoz (mivel a Windows egyáltalán nem engedi a nyers hozzáférést applikációk számára). Linux alatt ezek a file-ok nem megtekinhetők, sem pedig lejátszhatók. Windows alatt azért lehetséges mert az iso9660 meghajtója emulálja a nyers olvasást ezekre a fileokra. A .DAT file-ok lejátszására kernel patch-re van szükséged, melyet a PowerDVD Linux-os verziója tartalmaz. Ez egy módosított iso9660 filerendszer meghajtót tartalmaz (`vcdfs/isofs-2.4.X.o`), mely szintén képes ilyen emulációra. Ha ezzel a meghajtóval mountolod a lemezt, képes leszel az ilyen file-ok másolására, lejátszására. De a standard kernel meghajtójával nem. Egyébkéntis használd a `-vcd` opciót inkább. A VCD-k másolására egyéb alternatíva az új cdfs kernel meghajtó (nem része a hivatalos kernelnek), amely a CD session-okat image file-ként mutatja, valamint a cdrdao, egy bitről-bitre grabbelő CD másoló alkalmazás.