CD, DVD, VCD - MPlayer - Movie Player per Linux

## 4.1. Lettori CD/DVD

Dalla documentazione di Linux:

Alcuni lettori CDROM sono capaci di cambiare la loro velocità. Ci sono varie ragioni per cambiare la velocità di un CD-ROM. CDROM pressati male possono avere benefici da una velocità minore della massima. I moderni lettori CDROM possono raggiungere velocità molto alte (fino a 24-volte è comune). E' stato riportato che questi lettori possono dare errori di lettura a queste alte velocità, ridurre la velocità può prevenire perdite di dati in queste circostanze. In fine, alcuni di questi lettori possono produrre un fastidioso rumore, che si può ridurre a velocità più basse.

Per ridurre la velocità del lettore si può usare hdparm o un programma chiamato setcd. Usali così:

`hdparm -E [velocità] [cdrom]`

`setcd -x [velocità] [cdrom]`

Puoi anche provare:

`echo current_speed:4 >/proc/ide/[cdrom device]/settings`

ma devi avere i privilegi di root. Può aiutare anche il seguente comando:

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

per leggere 2MB in anticipo dal file (è utile per i CDROM rigati). Se viene impostato ad un valore troppo alto, il lettore continuerà a girare e a fermarsi, riducendo drasticamente la performance. Si consiglia anche di regolare il tuo lettore CDROM anche con hdparm:

`hdparm -d1 -a8 -u1 (cdrom device)`

per abilitare l'accesso DMA, readahead, e l' IRQ unmasking. (se non capisci, *leggi la pagina di man di hdparm*)

Per favore fai riferimento a "`/proc/ide/[cdrom device]/settings`" per una regolazione fine del CDROM.

I lettori SCSI non hanno un modo comune per regolare questi parametri (ne conosci uno? Diccelo!) Esiste una utility che funziona con i lettori SCSI Plextor.

FreeBSD:

Velocità: `cdcontrol [-f device] speed [velocità]`

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

## 4.2. Vedere i DVD

Per la lista completa delle opzioni disponibili, leggete la pagina di man. La sintassi per la riproduzione di un DVD standard è la seguente:

`mplayer dvd://<track> [-dvd-device <device>]`

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

Il dispositivo DVD predefinito è `/dev/dvd`. Se il tuo sistema è diverso, crea un symlink o specifica il dispositivo corretto sulla linea di comando con l'opzione `-dvd-device`.

#### Supporto DVD nuovo stile (mpdvdkit2)

MPlayer usa `libdvdread` e `libdvdcss` per decifrare e leggere i DVD. Queste due librerie si trovano nella subdirectory `libmpdvdkit2/` dell'albero di MPlayer, non devi installarle separatamente. Abbiamo optato per questa soluzione perchè abbiamo dovuto correggere un bug di libdvdread, e applicare una patch che aggiunge il supporto al caching delle chiavi CSS crackate per libdvdcss. Risulta un grande aumento della velocità perchè le chiavi non devono essere crackate ogni volta prima della riproduzione . Queste chiavi vengono conservate nella directory `$HOME/.mplayer/DVDKeys`.

MPlayer può anche utilizzare le librerie `libdvdread` e `libdvdcss` installate nel sistema, ma questa soluzione non è consigliata, in quanto possono risultare bug, incompatibilità di librerie, e minore velocità.

#### Supporto DVD Navigation (dvdnav)

Il supporto per DVD navigation attraverso `dvdnav` era in implementazione, ma non è mai stato completato del tutto ed è quindi sconsigliato!

#### Supporto DVD vecchio stile - OPZIONALE

Utile se vuoi leggere file VOB dall' hardisk. Compila e installa libcss 0.0.1 (non più recente) (se MPlayer non lo trova, usa l'opzione `-csslib /percorso/di/libcss.so`). Per usarlo, devi essere root, usare un binario di MPlayer suid root o far richiamare ad MPlayer il programma wrapper fibmap_mplayer che è suid root.

#### Struttura dei DVD

I dischi DVD hanno settori da 2048 byte/settore con ECC/CRC. Solitamente hanno un filesystem UDF su una singola traccia, che contiene vari file (piccoli file .IFO e .BUK e grandi (1GB) file .VOB). Questi sono veri file e possono essere copiati/riprodotti dal filesystem montato di un DVD non criptato.

I file .IFO contengono le informazioni per la navigazione del film (capitoli/titoli/mappa delle angolazioni, tabella delle lingue, ecc.) ed è necessario per leggere ed interpretare il contenuto .VOB (film). I file .BUK sono i loro backup. Usano i settori ovunque, quindi bisogna usare il puro indirizzamento dei settori del disco per implementare la navigazione dei DVD navigation. Questo è necessario anche per decrittare il contenuto.

L'intero supporto DVD vecchio stile con libcss deve quindi avere il filesystem del DVD montato e l'accesso a basso livello ai settori della device. Sfortunatamente devi essere root (sotto Linux) per avere l'indirizzo del settore di un file. Hai quindi le seguenti possibilità:

- Essere root o usare un binario di mplayer suid-root.
- Far chiamare ad MPlayer il programma wrapper fibmap_mplayer (che è suid root) per accedere al DVD (usato col metodo che utilizzava libcss).
- Non usare per nulla il driver di filesystem del kernel e reimplementarlo in userspace. libdvdread 0.9.x e libmpdvdkit fanno questo (supporto DVD nuovo stile). Il driver per il filesystem udf del kernel non è necessario in quanto hanno già il proprio driver per l'udf. Inoltre il dvd non deve essere montato in quanto viene usato solo l'accesso a basso livello ai settori.

A volte /dev/dvd non può essere letto dagli utenti, quindi gli autori di libdvdread hanno implementato un livello di emulazione che trasferisce gli indirizzi dei settori in nomifile+offset, per simulare un accesso a basso livello su un filesystem montato o anche su un hard disk.

libdvdread accetta anche il punto di mount al posto del nome del dispositivo e controlla in `/proc/mounts` per ottenere il nome del device. E' stato sviluppato per Solaris, dove i nomi dei dispositivi sono assegnati dinamicamente.

Il dispositivo DVD di default è `/dev/dvd`. Se la tua impostazione è diversa, fai un symlink, o specifica la device corretta alla riga di comando con l'opzione `-dvd-device`.

#### Autenticazione del DVD

Il metodo di autenticazione e decrittazione del supporto DVD nuovo stile usa un libdvdcss modificato (vedi sopra). Il metodo può essere specificato con la variabile d'ambiente `DVDCSS_METHOD` che può avere i valori `key`, `disk` o `title`.

Se non è specificato nulla vengono provati i seguenti metodi (default: key, title request):

1. bus key: Questa chiave è negoziata durante l'autenticazione (un lungo miscuglio di ioctls e vari scambi di chiavi, roba crittografica) ed è usata per criptare le chiavi del titolo e del disco prima di mandarle sul bus non protetto (per prevenire l'eavesdropping). La chiave del bus è necessaria per ottenere e pre-decriptare la chiave del disco.
2. cached key: MPlayer cerca chiavi di titolo eventualmente già scoperte che sono salvate nella directory `~/.mplayer/DVDKeys` (veloce ;).
3. key: Se non è disponibile nessuna chiave già salvata, MPlayer prova a decriptare la chiave del disco con un insieme di chiavi incluse.
4. disk: Se il metodo della chave fallisce (es. nessuna chiave inclusa), MPlayer romperà la chiave del disco usando un algoritmo a forza bruta. Questo processo consuma molta CPU e richiede 64 MB di memoria (tabella di hash da 16M con 32bit di elementi) per salvare i dati temporanei. Questo metodo dovrebbe funzionare sempre (lento).
5. title request: Con la chiave del disco MPlayer richiede le chiavi criptate del titolo, che sono contenute in settori nascosti usando `ioctl()`. La protezione regionale dei lettori RPC-2 avviene a questo passaggio e potrebbe fallire su queto tipo di lettori. Se ha successo, le chiavi del titolo verranno decripttate usando la chiave del bus e la chiave del disco.
6. title: Questo metodo è usato se fallisce la title request e non si basa sullo scambio di chiavi con il lettore DVD. Usa un attacco criptografico per indovinare direttamente la chiave del titolo (trovando un modello che si ripete nel contenuto VOB e supponendo che il testo in chiaro dei primi byte criptati siano una continuazione di quel modello). Il metodo è conosciuto anche come "known plaintext attack" o "DeCSSPlus". In rari casi può fallire perchè non ci sono abbastanza dati criptati sul disco per implementare un attacco statistico o perchè la chiave cambia nel mezzo di un titolo. D'altra parte è l'unico modo per decriptare un DVD salvato su un hard disk o un DVD con la regione sbagliata su un lettore RPC2 (lento).

I lettori DVD RPC-1 proteggono le impostazioni regionali solo su lettori DVD software. I lettori RPC-2 hanno una protezione hardware che permette solo 5 cambiamenti. Potrebbe essere necessario/consigliato aggiornare il firmware a RPC-1 se hai un lettore DVD RPC-2. Aggiornamenti del firmware possono essere trovati qui. Se non c'è un aggiornamento del firmware per il tuo lettore, usa l'applicazione regionset per impostare il codice regionale del tuo lettore DVD (sotto Linux). Attenzione: Si può impostare la regione solo 5 volte.

## 4.3 Vedere i VCD

Per la lista completa delle opzioni disponibili, leggete la pagina di man. La sintassi per vedere i Video CD standard (VCD) è la seguente:

mplayer vcd://numerotraccia [-cdrom-device device]
Esempi:
mplayer vcd://1
mplayer -fs vcd://2 -cdrom-device /dev/hdc

Nota: Almeno i Plextor e alcuni CD-ROM SCSI della Toshiba hanno terribili prestazioni nella lettura dei VCD. Questo perchè l'ioctl CDROMREADRAW non è del tutto implementato per questi lettori. Se hai conoscenze nella programmazione SCSI, per favore aiutaci ad implementare il supporto SCSI generico per i VCD.

Nel frattempo puoi estrarre i dati dal VCD con readvdc e vedere il file risultante con MPlayer.

#### Struttura dei VCD

I dischi VCD contengono una o più tracce:

- La prima è una piccola traccia da 2048 byte/settore, con un filesystem iso9660, contenente di solito programmi win32 per la riproduzione di VCD e a volte altre informazioni (jpeg, testi, ecc).
- La seconda e le successive tracce sono pure tracce mpeg da 2324 byte/settore, senza alcun filesystem ma puri dati mpeg ps, un pacchetto per settore. Questi contengono il film... Le tracce non possono essere montate! E' come con le tracce audio (es. Tu non hai mai montato un cd audio per leggerlo, vero?). Dato che di solito i film sono contenuti nella traccia due, dovresti provare l'opzione `vcd://2` per prima.
- Esistono anche dischi VCD senza la prima traccia (traccia singola e privi di qualunque filesystem). Sono sempre leggibili, ma non possono essere montati.

Circa i file .DAT:

Il file da ~600 MB visibile sulla prima traccia vcd montato non è un vero file! E' un così detto iso gateway, creato per permettere a Windows di gestire quel tipo di tracce (Windows non consente assolutamente alle applicazioni un accesso a basso livello ai dispositivi). Sotto linux, non puoi copiare o riprodurre tali file (contengono schifezze). Sotto Windows è possibile perchè il suo driver iso9660 emula la lettura delle tracce pure in questo file. Per riprodurre un file .DAT devi usare un driver del kernel che si può trovare nella versione Linux di PowerDVD. Ha un driver per il filesystem iso9660 modificato (vcdfs/isofs-2.4.X.o). Se monti il disco col loro driver puoi copiare e riprodurre il file .DAT con mplayer. Ma non funzionerà col driver iso9660 standard contenuto nel kernel! Si consiglia invece di usare l'opzione `-vcd`. Altre opzioni per la copia dei VCD sono il nuovo driver del kernel cdfs (mostra le sessioni del CD come file di immagine) e cdrdao (un'applicazione che fa una copia bit-a-bit dei cd).

Il dispositivo VCD di default è /dev/cdrom. Se il dispositivo è diverso, allora devi fare un link simbolico, o specificarlo dalla linea di comando con l'opzione `-cdrom-device`.