# Utilizzo CD/DVD

## Lettori CD/DVD

I lettori CD-ROM recenti possono raggiungere velocità molto alte, ma molti lettori sono capaci di girare a velocità ridotte. Ci sono diversi motivi che possono farti pensare di cambiare la velocità di un'unità CD-ROM:

- Ci sono state notifiche di errori di lettura ad alte velocità, specialmente con CD-ROM malamente pressati. Ridurre la velocità può prevenire la perdita di dati in queste circostanze.

- Molti lettori CD-ROM sono fastidiosamente rumorosi, una minor velocità può ridurre il rumore.

### Linux

Puoi diminuire la velocità delle unità CD-ROM IDE con `hdparm`, `setcd` o `cdctl`. Funziona così:

    hdparm -E [velocità] [dispositivo cdrom]

    setcd -x [velocità] [dispositivo cdrom]

    cdctl -bS [velocità]

Se stai usando l'emulazione SCSI, puoi dover applicare le impostazioni al lettore IDE reale, e non al dispositivo emulato come SCSI.

Se hai i privilegi di root può essere di aiuto anche il comando seguente:

    echo file_readahead:2000000 > /proc/ide/[dispositivo cdrom]/settings

    hdparm -d1 -a8 -u1 [dispositivo cdrom]

Ciò imposta la lettura in prefetch dei file a 2MB, che aiuta con CD-ROM graffiati. Se la imposti troppo alta, il lettore continuerà ad aumentare e diminuire la velocità, e le prestazioni diminuiranno drasticamente. Si raccomanda di regolare il tuo lettore CD-ROM anche con `hdparm`:

    hdparm -d1 -a8 -u1 [dispositivo cdrom]

Questo abilita l'accesso in DMA, la pre-lettura, e la mascheratura IRQ (leggi la pagina man di `hdparm` per una spiegazione dettagliata).

Per favore fai riferimento a "`/proc/ide/[dispositivo cdrom]/settings`" per regolare con precisione il tuo CD-ROM.

I lettori SCSI non hanno un modo uniforme di impostare questi parametri (ne conosci uno? diccelo!). C'è uno strumento che funziona con i lettori SCSI Plextor.

### FreeBSD

velocità:

    cdcontrol [-f dispositivo] speed [velocità]

DMA:

    sysctl hw.ata.atapi_dma=1

## Riproduzione DVD

Per una lista completa delle opzioni disponibili per favore leggi la pagina man. La sintassi per riprodurre un DVD normale è la seguente:

    mplayer dvd://<traccia> [-dvd-device <dispositivo>]

Esempio:

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

Se hai compilato MPlayer con il supporto per dvdnav, la sintassi è la stessa, tranne che devi usare dvdnav:// invece di dvd://.

Il dispositivo DVD di default è `/dev/dvd`. Se la tua impostazione è diversa, crea un collegamento simbolico o indica il dispositivo giusto dalla riga comando con l'opzione `-dvd-device`.

MPlayer usa libdvdread e libdvdcss per la riproduzione e la decrittazione dei DVD. Queste due librerie sono contenute nei sorgenti di MPlayer, non hai bisogno di installarle separatamente. Puoi anche usare le controparti di sistema delle due librerie, ma questa non è la soluzione raccomandata, in quanto può portare a bachi, incompatibilità di librerie e minor velocità.

Nel caso di problemi di decodifica di DVD, prova a disabilitare il supermount, o qualsiasi altra utilità. Alcuni lettori RPC-2 possono anche aver bisogno di avere il codice di zona impostato.

Struttura DVD

I dischi DVD hanno 2048 byte per settore con ECC/CRC. Di solito hanno un filesystem UDF su una sola traccia, contenente svariati file (piccoli file .IFO e .BUP e grossi (1GB) file .VOB). Questi sono file veri e possono esser copiati/riprodotti dal filesystem montato di un DVD non criptato.

I file .IFO contengono le informazioni per navigare nel film (capitoli/titoli/angolazioni, tabella lingue, etc) e sono necessari per leggere ed interpretare il contenuto .VOB (il film). I file .BUP sono dei loro backup. Usano sectors dappertutto, per cui hai bisogno di usare un indirizzamento dei settori del disco a basso livello per implementare la navigazione DVD o decrittarne il contenuto.

Il supporto per DVD ha bisogno di un accesso di basso livello basato su settori al dispositivo. Sfortunatamente devi (sotto Linux) essere root per ottenere l'indirizzamento del settore in un file. Per questo non usiamo proprio il filesystem del kernel, piuttosto lo reimplementiamo nello spazio utente di esecuzione. libdvdread 0.9.x fa ciò. Non serve il driver del kernel per il filesystem UDF visto che ha già il suo driver integrato per il filesystem UDF. Inoltre non serve che il DVD sia montato visto che viene utilizzato solo l'accesso di basso livello a settori.

Alcune volte `/dev/dvd` non può esser letto dagli utenti, perciò gli autori di libdvdread hanno implementato un livello di emulazione che traduce gli indirizzi dei settori in nomifile+posizioni relative, per emulare un accesso di basso livello su di un filesystem montato o anche su un disco fisso.

libdvdread accetta anche il nome del punto di mount al posto del nome del dispositivo per l'accesso di basso livello e controlla in `/proc/mounts` per definire il nome del dispositivo. E' stato sviluppato per Solaris, dove i nomi dei dispositivi sono allocati dinamicamente.

Decrittazione DVD

La decrittazione dei DVD viene fatta da libdvdcss. La modalità può esser specificata attraverso la variabile d'ambiente `DVDCSS_METHOD`, vedi la pagina di manuale per i dettagli.

Attenzione: puoi cambiare la zona solo 5 volte. I lettori DVD RPC-1 proteggono le impostazioni di zona solo via software. I lettori RPC-2 hanno invece una protezione hardware che permette solo 5 modifiche. Può esser necessario/consigliato aggiornare il firmware a RPC-1 se hai un lettore DVD RPC-2. Puoi provare a cercare aggiornamenti di firmware per il tuo lettore su internet, questo forum su firmware potrebbe essere un buon punto di partenza per la tua ricerca. Se non c'è alcun aggiornamento di firmware disponibile per il tuo dispositivo, usa lo strumento regionset per impostare la zona del tuo lettore DVD (sotto Linux).

## Riproduzione VCD

Per una lista completa delle opzioni disponibili per favore leggi la pagina man. La sintassi per riprodurre un Video CD (VCD) normale è la seguente:

    mplayer vcd://<traccia> [-cdrom-device <dispositivo>]

Esempio:

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

Il dispositivo VCD di default è `/dev/cdrom`. Se la tua impostazione è diversa, crea un collegamento simbolico o indica il dispositivo giusto dalla riga comando con l'opzione `-cdrom-device`.

Perlomeno i lettori CD-ROM Plextor e alcuni Toshiba SCSI hanno prestazioni orribili leggendo i VCD. Questo perché l'ioctl CDROMREADRAW non è implementata appieno per questi lettori. Se hai una qualche conoscenza della programmazione SCSI, per favore aiutaci ad implementare un supporto SCSI generico per i VCD.

Nel frattempo puoi estrarre i dati dal VCD con readvcd e riprodurre con MPlayer il file così ricavato.

Struttura VCD

Un Video CD (VCD) è fatto di settori CD-ROM XA, per es. tracce CD-ROM mode 2 form 1 e 2:

- La prima traccia è in formato mode 2 form 2 il che significa che usa una correzione errori L2. La traccia contiene un filesystem ISO-9660 con 2048 byte/settore. Il filesystem contiene delle informazioni metadati VCD, così come fermi-immagine spesso usati nei menu. I segmenti MPEG per i menu possono anche essere salvati nella prima traccia, ma gli MPEG devono essere spezzettati in una serie di blocchi di 150 settori. Il filesystem ISO-9660 può contenere altri file o programmi che non sono essenziali per le operazioni VCD.

- Le seconde e restanti tracce spesso sono tracce MPEG (filmato) di basso livello di 2324 byte/settore, contenenti un pacchetto dati MPEG PS per settore. Queste sono in formato mode 2 form 1, così da poter archiviare più dati per settore con la perdita di qualche correzione di errore. E' anche valido avere tracce CD-DA in un VCD dopo la prima traccia. In alcuni sistemi operativi c'è qualche trucchetto che fa apparire queste tracce non ISO-9660 in un filesystem. In altri sistemi operativi come GNU/Linux non è (ancora) così. Qui i dati MPEG non possono venir montati. Siccome molti film sono dentro questo tipo di tracce, dovresti provare prima `vcd://2`.

- Ci sono dischi VCD senza la prima traccia (traccia singola e proprio nessun filesystem). Essi sono comunque riproducibili, ma non possono essere montati.

- La definizione dello standard VCD viene chiamato il "White Book" Philips, e non è disponibile on-line visto che deve essere acquistato da Philips. Informazioni più dettagliate sui Video CD si possono trovare nella documentazione di vcdimager.

Riguardo i file .DAT

Il file .DAT da ~600MB visibile sulla prima traccia del filsystem VCD montato non è un vero file! Viene anche detto "ISO gateway", creato per permettere a Windows di gestire tali tracce (Windows non permette alle applicazioni alcun accesso di basso livello ai dispositivi). Sotto Linux non puoi copiare o riprodurre questi file (contengono spazzatura). Sotto Windows è possibile che il driver iso9660 emuli la lettura a basso livello delle tracce nel file. Per riprodurre un file .DAT ti serve il driver per il kernel che si può trovare nella versione per Linux di PowerDVD. Esso ha un driver modificato per il filesystem iso9660 (`vcdfs/isofs-2.4.X.o`), che è in grado di emulare le tracce di basso livello attraverso quel file fantasma .DAT. Se monti il disco usando il loro driver, puoi poi copiare e anche riprodurre i file .DAT con MPlayer. Ma non funzionerà col driver iso9660 standard del kernel Linux! Usa invece `vcd://`. Alternative per copiare i VCD sono il nuovo driver del kernel cdfs (non incluso nel kernel ufficiale), che mostra le sessioni dei CD come file immagine, e cdrdao, un'applicazione per copiare/fare il dump di CD bit-per-bit.