# CD/DVD használat

## CD/DVD vezérlők

Részlet a Linux dokumentációból:

A modern CD-ROM meghajtók nagyon nagy sebességen működnek, ugyanakkor több CD-ROM képes kisebb sebességű pörgésre is. Rengeteg oka lehet annak, hogy valaki meg akarja megváltoztatni a CD-ROM meghajtó sebességét:

- Sok helyen írtak olvasási hibákról, melyek nagy sebességnél fordulnak elő, különösen rosszul nyomott CD-ROM-ok esetén. A csökkentett sebességgel megelőzheted az adatvesztést ilyen esetben.

- Sok CD-ROM idegesítően hangos, alacsonyabb sebességen kisebb a zaj.

Az IDE CD-ROM meghajtók sebességét a `hdparm` vagy egy `setcd` nevezetű programmal módosíthatod. It works like this:

    hdparm -E [speed] [cdrom device]

    setcd -x [speed] [cdrom eszköz]

Ha root jogaid vannak, a következő parancs is segíthet:

    echo file_readahead:2000000 > /proc/ide/[cdrom eszköz]/settings

Ez beállítja a fájl előreolvasást 2 MB-ra, ami segít a karcos CD-ROM-ok esetében. Ha túl nagyra állítod, a meghajtó folyton felpörög majd leáll, és dramatikus módon csökkenni fog a teljesítménye. A javasolt módszer a CD-ROM meghajtó `hdparm`-mal történő beállítása:

    hdparm -d1 -a8 -u1 cdrom device

Ez bekapcsolja a DMA elérést, az előreolvasást, és az IRQ unmasking-ot (olvasd el a `hdparm` man oldalát a bővebb magyarázatért).

Nézd meg a "`/proc/ide/cdrom eszköz/settings"` fájlt a CD-ROM tuningolásához.

A SCSI meghajtókra vonatkozóan nincs egységes módszer ezen paraméterek beállításához. (Ismersz egyet? Mondd el nekünk is!) Van egy eszköz, ami Plextor SCSI meghajtókkal működik.

FreeBSD:

Sebesség: `cdcontrol [-f eszköz] speed sebesség`

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

## DVD lejátszás

A használható kapcsolók teljes listájáért olvasd el a man oldalt. A szintaxis egy szabványos Digital Versatile Disc (DVD)-hez a következő:

    mplayer dvd://<sáv> [-dvd-device <eszköz>]

Például:

    mplayer dvd://1 -dvd-device /dev/hdc

Az alapértelmezett DVD eszköz a `/dev/dvd`. Ha a te beállításod különböző, készíts egy szimbolikus linket vagy add meg a megfelelő eszközt a parancssorban a `-dvd-device` kapcsolóval.

### A DVD támogatás új formája (mpdvdkit2)

Az MPlayer fel tudja használni a libdvdread-ot és a libdvdcss-t is a DVD-k dekódolásához és lejátszásához. Ez a két függvény könyvtár a `libmpdvdkit2/` alkönyvtárban található az MPlayer forrás fájéban, nem kell őket külön telepítened. Ezt a megoldást választottuk, mert javítanunk kellett egy libdvdread hibát és beletennünk egy másik javítást a feltört CSS kulcsok cache-elésének támogatásához a libdvdcss-be. Ez nagy sebességnövekedést eredményezett, mivel a kulcsokat nem kell mindig feltörni lejátszás előtt.

Az MPlayer a rendszer libdvdread és libdvdcss függvénykönyvtárait is tudja használni, de ez nem javasolt, mivel hibák forrása lehet, könyvtár inkompatibilítást és sebességcsökkenést okozhat.

Ha DVD dekódolási problémáid vannak, próbáld meg letiltani a supermount-ot vagy bármilyen más hasonló dolgot.

### DVD struktúra

A DVD lemezeken 2048 bájtos szektorok vannak ECC/CRC-vel. Legtöbbször UDF fájlrendszer van egyetlen sávon, ami különböző fájlokat tartalmaz (kicsi .IFO és .BUK fájlok, valamint nagy (1 GB) .VOB fájlok). Ezek igazi fájlok, amik másolhatóak/lejátszhatóak egy nem titkosított DVD mountolt fájlrendszeréről.

Az .IFO fájlok a filmben történő navígációhoz tartalmaznak információkat (fejezet/cím/szög térkép, nyelvtáblázat, stb.) és szökségesek a .VOB tartalmának olvasásához és értelmezéséhez (film). A .BUK fájlok ezek biztonsági mentései. Szektorokat használnak mindenhol, így a lemezen nyers szektor címzést kell használni a DVD navigáláshoz és a tartalom dekódolásához.

A DVD támogatás nyers szektor-alapú elérést igényel az eszközhöz. Sajnos (Linux alatt) root-nak kell lenned, hogy megkapd egy fájl szektor címét. Emiatt egyáltalán nem használjuk a kernel fájlrendszer vezérlőjét, inkább felhasználói szinten (userspace) oldottuk meg. A libdvdread 0.9.x és a libmpdvdkit teszi ezt lehetővé. A kernel UDF fájlrendszer vezérlője nem kell, mivel saját beépített UDF fájlrendszer vezérlőjük van. Sőt, még mountolni sem kell a DVD-t, mivel csak nyers szektor-alapú címzést használnak.

Néha a `/dev/dvd` nem olvasható a felhasználók által, így a libdvdread szerzői egy emulációs réteget készítettek, ami átalakítja a szektor címeket fájlnév+eltolásra, így nyers elérést emulál a mountolt fájlrendszeren vagy akár a merevlemezen is.

A libdvdread elfogadja a mountolás helyét is az eszköz neve helyett a nyers címzéshez, az eszköz nevét a `/proc/mounts` fájlból olvassa ki. Solaris-ra lett kifejlesztve, ahol az eszköz nevek dinamikusan vannak lefoglalva.

Az alapértelmezett DVD eszköz a `/dev/dvd`. Ha a te beállításaid különbözőek, készíts egy szimbolikus linket vagy add meg a megfelelő eszközt a parancssorban a `-dvd-device` kapcsolóval.

### DVD hitelesítés

A hitelesítés és az új formájú DVD támogatás dekódolási metódusának támogatását a patchelt libdvdcss biztosítja (lásd feljebb). A módszert a `DVDCSS_METHOD` környezeti változó segítségével előírhatod, beállítható kulcsra, lemezre vagy sávra.

Ha semmi sincs megadva, akkor a következő módon próbálkozik (alapértelmezett: kulcs, sáv kérés):

1. busz kulcs: Ez a kulcs a hitelesítés során kerül megállapításra (ioctl-ek és egyéb kulcs cserék hosszú sora, titkosítási cucc) és a sáv és a lemez kulcsok titkosítására használják, mielőtt kiküldenék a védtelen buszra (hogy megelőzzés az eavesdropping-ot). A busz kulcs szükséges a titkosított lemez kulcs megszerzéséhez és visszakódolásához.

2. cache-elt kulcs: Az MPlayer végignézi a már cache-elt sáv kulcsokat, amik a `~/.mplayer/DVDKeys` könyvtárban tárolódnak (gyors ;).

3. kulcs: Ha nincs cache-lt kulcs, az MPlayer megpróbálja visszakódolni a lemez kulcsot a beépített lejátszó kulcsok gyűjteményének segítségével.

4. lemez: Ha a kulcs metódus sikertelen (pl. nincs beépített lejátszó kulcs), az MPlayer feltöri a lemez kulcsot egy brute force algoritmussal. Ez az eljárás intenzív CPU használatot eredményez és 64 MB memóriát igényel (16M 32Bit-es bejegyzések a hash táblához) az ideiglenes adatok tárolásához. Ez a módszer mindig működik (lassú).

5. sáv kérés: a lemez kulccsal az MPlayer az ioctl() segítségével lekéri a titkosított sáv kulcsokat, amik rejtett szektorokban találhatók. Az RPC-2 meghajtók régió védelme is ebben a lépésben van megvalósítva, ezért ez hibázhat ilyen meghajtókon. Ha sikerül, a sáv kulcsokat dekódolja a busz és lemez kulccsal.

6. sáv: Ezt a metódust akkor használjuk, ha a sáv kérés sikertelen és nem a DVD meghajtóval történő kulcs cserén alapul. Ez egy crypto támadást indít, hogy kitalálja közvetlenül a sáv kulcsot (egy, a visszakódolt VOB tartalomban ismétlődő minta megkeresésével, azt feltételezve, hogy az első titkosított bájtnak megfelelő sima szöveg ezen minta folytatása). Ezt a metódust úgy is ismerik, mint "ismert tiszta szöveg támadás" vagy "DeCSSPlus". Ritka esetben sikertelen lehet, mert nincs elég titkosított adat a lemezen a statisztikai támadáshoz vagy mert a kulcs megváltozik a sáv közepén. Ez a módszer az egyetlen járható út a merevlemezen tárolt DVD-k visszakódolásához vagy a rossz régió kódú DVD-k RPC2 meghajtóban történő lejátszásához (lassú).

Az RPC-1 DVD meghajtók csak szoftveresen védik a régió kódot. Az RPC-2 meghajtókban hardveres védelem van, ami csak 5 változtatást engedélyez. Szükséges/javasolt a firmware frissítése RPC-1-re ha RPC-2-es DVD meghajtód van. Megpróbálhatsz keresni firmware frissítést az Interneten, ez a firmware fórum egy jó kiinduló pont lehet. Ha nincs firmware javítás a te meghajtódhoz, használd a regionset eszközt a DVD meghajtód régió kódjának beállításához (Linux alatt). Figyelem: Csak 5 alkalommal állíthatod át a régió kódot.

## VCD lejátszás

A használható kapcsolók teljes listájáért olvasd el a man oldalt. Egy szabványos Video CD (VCD) szintaxisa a következő:

    mplayer vcd://<sáv> [-cdrom-device <eszköz>]

Például:

    mplayer vcd://2 -cdrom-device /dev/hdc

Az alapértelmezett VCD eszköz a `/dev/cdrom`. Ha a te beállításaid különbözőek, készíts egy szimbolikus linket vagy add meg a megfelelő eszközt a parancssorban a `-cdrom-device` kapcsolóval.

A Plextor és néhány Toshiba SCSI CD-ROM meghajtónak borzalmas a teljesítménye CVD olvasáskor. Ez azért van, mert a CDROMREADRAW ioctl nincs teljesen implementálva ezekben a meghajtókban. Ha ismered a SCSI programozást, kérlek segíts nekünk egy általános SCSI támogatás elkészítésében VCD-khez.

Addig is kinyerheted az adatokat a VCD-ről a readvcd segítségével, majd az eredményül kapott fájlt lejátszhatod az MPlayerrel.

### VCD struktúra

Egy Video CD (VCD) CD-ROM XA szektorokból áll, pl. CD-ROM 2-es módban 1-es és 2-es formátumú sávok:

- Az első sáv 2-es módban, 2-es formátumban van, ami azt jelenti, hogy L2 hibajavítást használ. A sáv ISO-9660 fájlrendszert tartalmaz 2048 bájt/szektorral. Ez a fájlrendszer VCD metaadat információkat tartalmaz, valamint gyakran a menükben alkalmazott képkockákat. A menük MPEG szegmensei is ezen az első sávon tárolhatóak, de az MPEG-eket fel kell osztani 150 szektoros csonkokra. Az ISO-9660 fájlrendszer tartalmazhat egyéb fájlokat vagy programokat, amik a VCD működése szempontjából nem lényegesek.

- A második és a további sávok általában nyers 2324 bájt/szektor formátumú MPEG (film) sáv, mely egy MPEG PS adat csomagot tartalmaz szektoronként. Ezek 2-es mód 1-es formátumban vannak, így több adatot tárolnak szektoronként némi hibajavítás elveszítése árán. Lehet CD-DA sáv is a VCD-n az első sáv után. Némelyik operációs rendszeren van egy kis csalás, amivel ezek a nem-ISO-9660 sávok megjelennek a fájlrendszerben. Más operációs rendszereken, például GNU/Linux-on ez nem így van (még). Itt az MPEG adat nem mountolható. Mivel a legtöbb film ilyen típusú sávon belül van, először próbáld ki a `vcd://2` -t.

- Léteznek olyan VCD lemezek is, melyeken nincs meg az első sáv (egy sáv és egyáltalán nincs fájlrendszer). Ezek szintén lejátszhatóak, de nem lehet őket becsatolni.

- A Video CD szabvány definícióját a Philips "Fehér könyv"-nek nevezte el és nem szabadon hozzáférhető, a Philipstől kell megvásárolni. A Video CD-kről sokkal részletesebb információt találhatsz a vcdimager dokumentációjában.

### A .DAT fájlokról

A becsatolt VCD első sávján látható ~600 MB fájl valójában nem igazi fájl! Ez egy úgynevezett ISO átjáró, azért hozták létre, hogy a Windows kezelni tudja ezen sávokat (a Windows semmilyen módon sem engedi a közvetlen eszköz elérést az alkalmazásoknak). Linux alatt nem tudod átmásolni vagy lejátszani az ilyen fájlokat (szemét van bennük). Windows alatt lehetséges, mivel az iso9660 vezérlője a sávok nyers olvasását emulálja ebben a fájlban. A .DAT fájlok lejátszásához szükséged lesz egy kernel vezérlőre, ami a PowerDVD Linuxos verziójában található. Ez egy módosított iso9660 fájlrendszer vezérlőt (`vcdfs/isofs-2.4.X.o`) tartalmaz, ami képes a nyers sáv emulációra ezen ál .DAT fájlon keresztül. Ha az ő vezérlőjük segítségével csatolod be a lemezt, át tudod másolni és le tudod játszani a .DAT fájlt az MPlayerrel. A Linux kernel szabványos iso9660 vezérlőjével ez nem megy! Használd a `vcd://`-t helyette. VCD másolásához alternatíva az új cdfs kernel vezérlő (nem része a hivatalos kernelnek) ami a CD meneteket kép fájlok formájában mutatja, és a cdrdao, egy bitről-bitre grabbelő/másoló program.