7.4 Riproduzione Video

Contributo di Ross Lippert.

La riproduzione video è un'area applicativa molto recente e in rapido sviluppo. Sii paziente. Non tutto funzionerà così facilmente come è stato per l'audio.

Prima di iniziare, dovresti conoscere il modello della scheda video che possiedi e il chip che usa. Sebbene XFree86 supporti una vasta varietà di schede video, poche offrono buone prestazioni in riproduzione. Per ottenere una lista di estensioni supportate dall'X server con la tua scheda usa il comando xdpyinfo(1) mentre X11 sta girando.

È una buona idea avere un piccolo file MPEG che possa essere trattato come un file di test per la valutazione di vari riproduttori e opzioni. Visto che alcuni riproduttori di DVD cercheranno di default i DVD in /dev/dvd, o hanno questo nome di dispositivo codificato permanentemente al loro interno, potresti trovare utile creare dei link simbolici al dispositivo corretto:

# ln -sf /dev/acd0 /dev/dvd
# ln -sf /dev/acd0 /dev/rdvd

Nota che, data la natura del devfs(5), i collegamenti creati a mano come questi non rimarranno se riavvii il sistema. Per creare i collegamenti simbolici automaticamente quando avvii il sistema, aggiungi le seguenti righe in /etc/devfs.conf:

link acd0 dvd
link acd0 rdvd

Su FreeBSD 5.X, che usa devfs(5) c'è un insieme di link raccomandati leggermente diverso:

# ln -sf /dev/acd0c /dev/dvd
# ln -sf /dev/acd0c /dev/rdvd

In aggiunta, la decrittazione dei DVD, che richiede l'invocazione di speciali funzioni dei DVD-ROM, richiede il permesso in scrittura sui dispositivi DVD.

Alcuni dei port discussi si basano sulle seguenti opzioni del kernel per compilarsi correttamente. Prima di provare a compilarli, aggiungi queste opzioni al file di configurazione del kernel, compila un nuovo kernel, e riavvia:

option CPU_ENABLE_SSE
option USER_LDT

Nota: option USER_LDT non esiste su FreeBSD 5.X.

Per migliorare l'interfaccia della memoria condivisa di X11, è consigliabile incrementare i valori di alcune variabili sysctl(8):

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

7.4.1 Determinazione delle Capacità Video

Ci sono molti modi possibili per visualizzare immagini e filmati con X11. Quello che funzionerà meglio in pratica dipende in gran parte dal tuo hardware. Ogni metodo descritto qui sotto avrà una qualità variabile su hardware differente. In secondo luogo, il rendering video in X11 è un argomento che sta ricevendo un sacco di attenzione ultimamente, e con ogni nuova versione di XFree86 ci possono essere notevoli miglioramenti.

Una lista di interfacce video comuni:

  1. X11: normale output di X11 che usa la memoria condivisa.

  2. XVideo: un'estensione all'interfaccia X11 che supporta grafica e filmati in ogni oggetto X11 disegnabile.

  3. SDL: Simple Directmedia Layer.

  4. DGA: Direct Graphics Access.

  5. SVGAlib: interfaccia di basso livello per la grafica da console.

7.4.1.1 XVideo

XFree86 4.X ha un'estensione chiamata XVideo (aka Xvideo, aka Xv, aka xv) che permette di visualizzare grafica e filmati direttamente negli oggetti disegnabili attraverso una speciale accelerazione. Questa estensione fornisce una riproduzione di ottima qualità anche su macchine poco potenti (per esempio sul mio portatile PIII 400 Mhz). Sfortunatamente, la lista di schede che supportano questa caratteristica “out of the box” è attualmente:

  1. 3DFX Voodoo 3

  2. Intel® i810 e i815

  3. alcuni chip S3 (come il Savage/IX e il Savage/MX)

Se la tua scheda non è fra queste, non disperarti ancora. XFree86 4.X aggiunge il supporto a nuove schede con ogni release [1]. Per controllare se l'estensione sta girando, usa xvinfo:

% xvinfo

XVideo è supportato dalla tua scheda se il risultato è simile a:

X-Video Extension version 2.2
screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0

Inoltre tieni presente che i formati elencati (YUV2, YUV12, ecc) non sono presenti in tutte le implementazioni di XVideo e la loro assenza può ostacolare alcuni programmi.

Se il risultato è:

X-Video Extension version 2.2
screen #0
no adaptors present

Allora XVideo probabilmente non è supportato per la tua scheda.

Se XVideo non è supportato per la tua scheda, questo vuol dire solamente che sarà più difficile soddisfare le richieste computazionali per il rendering video. A seconda della tua scheda video e del tuo processore, comunque, potresti essere ancora in grado di avere un'esperienza soddisfacente. Dovrai probabilmente dare un occhio ai modi per migliorare le prestazioni nella lettura avanzata Sezione 7.4.3.

7.4.1.2 Simple Directmedia Layer

Il Simple Directmedia Layer, SDL, vuole essere un'interfaccia di portabilità tra Microsoft® Windows, BeOS, e UNIX®, che possa permettere di sviluppare applicazioni multi-piattaforma che facciano buon uso di suoni e grafica. L'interfaccia SDL fornisce una astrazione di basso livello all'hardware che può a volte essere più efficiente dell'interfaccia X11.

L'SDL può essere trovata in devel/sdl12.

7.4.1.3 Direct Graphics Access

Direct Graphics Access è un'estensione XFree86 che permette a un programma di evitare il server X ed alterare direttamente il buffer video. Siccome si basa su una mappatura di memoria a basso livello per effettuare questa condivisione, i programmi che la usano devono essere avviati da root.

L'estensione DGA può essere testata con dga(1). Quando dga è in esecuzione, cambia i colori del display ogni volta che viene premuto un tasto. Per uscire, premi q.

7.4.2 Port e Package che Riguardano il Video

In questa sezione si discuterà del software disponibile nella FreeBSD Port Collection che possono essere usati per la riproduzione video. La sezione software sulla riproduzione video è in continuo sviluppo, per cui le caratteristiche delle varie applicazioni sono destinate a differire dalla descrizione che segue.

In primo luogo, è importante sapere che molte delle applicazioni video che girano su FreeBSD sono stati sviluppate come applicazioni Linux. Molte di queste applicazioni sono ancora in fase beta. Alcuni dei problemi che puoi incontrare con i package video su FreeBSD comprendono:

  1. Un'applicazione non riesce a riprodurre un file generato da un'altra applicazione.

  2. Un'applicazione non riesce a riprodurre un file che lei stessa ha prodotto.

  3. Lo stesso applicativo posto su due computer diversi, ricompilato su ognuno dei due computer, riproduce lo stesso file in modo diverso.

  4. Da un filtro apparentemente banale quale il ridimensionamento di un'immagine si ottenga un pessimo risultato derivato da una routine di ridimensionamento bacata.

  5. Un'applicazione che genera frequentemente file “core”.

  6. La documentazione non viene installata con il port e può essere trovata sul web o nella directory work del port.

Molte di queste applicazioni possono anche esibire “Linuxismi”. Ovvero, ci possono essere problemi risultanti dal modo in cui le librerie standard sono state implementate nelle distribuzioni Linux, o alcune modifiche al kernel di Linux che sono state apportate dagli autori delle applicazioni. Questi problemi possono non essere stati notati e aggirati dal mantainer del port, e possono portare comunque a problemi come questi:

  1. L'uso di /proc/cpuinfo per riconoscere le caratteristiche del processore.

  2. Un uso errato dei thread che può portare un programma a bloccare la propria esecuzione piuttosto che terminare correttamente.

  3. Software non ancora presente nella collezione dei port di FreeBSD che è comunemente usato unitamente all'applicazione.

A questo punto, gli sviluppatori di queste applicazioni sono stati collaborativi con i maintainer dei port al fine di minimizzare la ricerca di soluzioni necessarie al processo di porting.

7.4.2.1 MPlayer

MPlayer è stata sviluppata di recente ed è un player in rapida evoluzione. Gli obbiettivi degli sviluppatori di MPlayer sono la velocità e la flessibilità su Linux e le altre famiglie di UNIX. Il progetto è partito non appena il fondatore del gruppo si stancò delle prestazioni degli altri riproduttori. C'è chi dice che l'interfaccia grafica sia stata sacrificata per un design essenziale. Tuttavia, una volta che si sono imparate perfettamente le opzioni da riga di comando e le scorciatoie, funziona decisamente bene.

7.4.2.1.1 Compilazione di MPlayer

MPlayer è reperibile sotto multimedia/mplayer. MPlayer effettua una serie di controlli sull'hardware durante il processo di compilazione, che ha come risultato un binario che non potrà essere considerato portabile da una piattaforma ad un'altra. Questo è il motivo per cui risulta importante compilarlo usando il port piuttosto che il pacchetto contenente il binario. Inoltre, ulteriori opzioni possono essere specificate nella riga di comando di make, come descritto all'inizio della compilazione.

# cd /usr/ports/multimedia/mplayer
# make
You can enable additional compilation optimizations
by defining WITH_OPTIMIZED_CFLAGS
You can enable GTK GUI by defining WITH_GUI.
You can enable DVD support by defining WITH_DVD.
You can enable SVGALIB support by defining WITH_SVGALIB.
You can enable VORBIS sound support by defining WITH_VORBIS.
You can enable XAnim DLL support by defining WITH_XANIM.

Se hai installato x11-toolkits/gtk12, a questo punto si potrà abilitare la compilazione della GUI. Altrimenti, non vale la pena la fatica. Se si ha intenzione di vedere DVD (possibilmente codificati in CSS) con MPlayer si sarà costretti ad abilitare l'opzione per il supporto DVD qui [2]. Alcune opzioni utili sono:

# make WITH_DVD=yes WITH_SVGALIB=yes

Al momento, il port MPlayer creerà la sua documentazione in HTML e l'eseguibile mplayer. Sarà anche possibile compilare un codificatore, mencoder, uno strumento utile per ricodificare i video. Una modifica al Makefile lo rende disponibile. È possibile che venga abilitato di default nelle versioni successive del port.

La documentazione HTML di MPlayer è molto istruttiva. Qualora il lettore trovasse le informazioni sull'hardware e le interfacce video in questo capitolo scarne, la documentazione di MPlayer risulta essere un ottimo supplemento. Se si stanno cercando informazioni riguardo il supporto video sotto UNIX, sarebbe utile trovare il tempo di leggere in modo preciso la documentazione di MPlayer.

7.4.2.1.2 Utilizzo di MPlayer

Ogni utente che voglia usare MPlayer deve creare la directory .mplayer sotto la propria home. Per creare questa directory necessaria, puoi digitare il seguente comando:

% cd /usr/ports/multimedia/mplayer
% make install-user

Le opzioni del comando mplayer sono elencate nella pagina del manuale. Per qualunque altro dettaglio consulta la documentazione HTML. In questa sezione, descriveremo solamente alcuni degli usi più comuni.

Per riprodurre un file, ad esempio testfile.avi, usando una delle varie interfacce video usa l'opzione -vo:

% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi

È utile provare tutte queste opzioni, considerando che le prestazioni dipendono da svariati fattori e variano in modo considerevole a seconda dell'hardware.

Per riprodurre un DVD, sostituisci testfile.avi con l'opzione -dvd N DISPOSITIVO dove N corrisponde al numero del titolo da riprodurre e DISPOSITIVO al dispositivo che identifica il DVD-ROM. Per esempio, per riprodurre il terzo titolo da /dev/dvd:

# mplayer -vo dga -dvd 3 /dev/dvd

Per interrompere, mettere in pausa, andare avanti e così via, leggi l'elenco delle associazioni dei tasti, che vengono elencati eseguendo mplayer -h o consulta la pagina man.

Ulteriori opzioni utili per la riproduzione sono: -fs -zoom che abilita la modalità schermo intero e -framedrop che aiuta le prestazioni.

Perchè la riga di comando di mplayer non diventi eccessivamente lunga, l'utente può creare il file .mplayer/config ed impostare lì i valori predefiniti:

vo=xv
fs=yes
zoom=yes

In ultimo, è possibile usare mplayer per estrarre una traccia DVD in un file .vob. Per estrarre la seconda traccia dal DVD, digita questo:

# mplayer -dumpstream -dumpfile out.vob -dvd 2 /dev/dvd

Il file ottenuto, out.vob, sarà in formato MPEG e potrà manipolato da un'altro programma descritto in questa sezione.

7.4.2.1.3 mencoder

Se hai scelto di installare mencoder quando hai compilato MPlayer, sei avvisato che è ancora un componente sperimentale. Prima di usare mencoder è una buona idea familiarizzare con le opzioni contenute nella documentazione HTML. Esiste anche una pagina man, ma non è utile senza la documentazione HTML. Esiste un numero considerevole di modi per migliorare la qualità, un bitrate più basso, cambiare codifica ed alcuni di questi trucchi può fare la differenza tra prestazioni più o meno accettabili. Di seguito un paio di esempi per cominciare. Prima di tutto, una semplice copia:

% mencoder input.avi -oac copy -ovc copy -o output.avi

Combinazioni errate di opzioni da riga di comando possono portare a file di output irriproducibili perfino con mplayer. Di conseguenza, se si vuole semplicemente estrarre una traccia, usare l'opzione -dumpfile eseguendo in mplayer.

Per convertire il file input.avi in formato MPEG4 con l'audio codificato in MPEG3 (è necessario audio/lame):

% mencoder input.avi -oac mp3lame -lameopts br=192 \
  -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

Questo comando ha creato un file riproducibile con mplayer e xine.

Il parametro input.avi può essere sostituito con -dvd 1 /dev/dvd ed eseguire il comando come root per ricodificare il capitolo DVD direttamente. Poichè si sarà certamente poco soddisfatti del risultato la prima volta, è consigliato eseguire il dump del capitolo e lavorare direttamente sul file.

7.4.2.2 Il Riproduttore Video xine

Il riproduttore video xine è un progetto dagli ampi obiettivi e non solo l'essere una soluzione unica per la riproduzione, ma anche una libreria di base riutilizzabile ed un eseguibile modulare che possa essere esteso con i plugin. È disponibile sia come pacchetto che come port, sotto multimedia/xine.

xine è ancora un pò rozzo, ma è chiaramente un buon inizio. In pratica, xine necessita sia di una CPU veloce che di una scheda video veloce o il supporto per l'estensione XVideo. L'interfaccia grafica è utilizzabile, ma ancora mal disegnata.

Allo stato attuale, non ci sono moduli distribuiti con xine che possano riprodurre DVD codificati in CSS. Esistono distribuzioni di terze parti che hanno moduli di questo genere già compilati, ma nessuno di questi esiste nella FreeBSD Ports Collection.

Comparato con MPlayer, xine offre maggiori caratteristiche all'utente ma, allo stesso tempo, non rende disponibile all'utente un controllo più accurato. Il riproduttore video xine funziona molto meglio sulle interfacce XVideo.

Di default, xine si avvierà con un'interfaccia grafica. Si possono quindi usare i menu per aprire per aprire un file specifico:

% xine

Alternativamente, può essere invocato per aprire direttamente un file senza l'interfaccia grafica, con il comando:

% xine -g -p mymovie.avi

7.4.2.3 Le Utility transcode

Il software transcode non è un riproduttore, piuttosto un insieme di strumenti per ricodificare file .avi e .mpg. Con transcode, si ha la possibilità di unire file video, riparare file corrotti ed utilizzare strumenti da riga di comando con interfaccie che utilizzano i flussi stdin/stdout.

Così come MPlayer, anche transcode è un software in fase sperimentale che deve essere compilato usando il port multimedia/transcode. Sono disponibili parecchie opzioni da passare a make. Io consiglio:

# make WITH_LIBMPEG2=yes

Se hai intenzione di installare multimedia/avifile, allora aggiungi l'opzione WITH_AVIFILE alla riga di comando di make, così come di seguito:

# make WITH_AVIFILE=yes WITH_LIBMPEG2=yes

Ecco due esempi di come usare transcode per la conversione video che produce un output ridimensionato. Il primo, codifica il risultato come un file openDIVX AVI, mentre il secondo codifica nel formato MPEG, più portabile.

% transcode -i input.vob -x vob -V -Z 320x240 \
-y opendivx -N 0x55 -o output.avi
% transcode -i input.vob -x vob -V -Z 320x240 \
-y mpeg -N 0x55 -o output.tmp
% tcmplex -o output.mpg -i output.tmp.m1v -p output.tmp.mpa -m 1

Esiste una pagina man per transcode, ma c'è poca documentazione sulle utility tc* (come per esempio tcmplex) che vengono installate. Tuttavia, l'opzione a riga di comando -h può sempre essere usata per avere delle brevi istruzioni d'uso del comando.

In confronto, transcode gira molto più lentamente rispetto a mencoder, ma risulta essere un'ottima alternativa per produrre file in formati più vari. Si sa che gli MPEG creati con transcode funzionano con Windows Media® Player ed Apple Quicktime®, ad esempio.

7.4.3 Ulteriori Letture

I vari package di applicazioni video per FreeBSD si stanno evolvendo rapidamente. È abbastanza possibile che in un futuro vicino molti dei problemi discussi qui saranno risolti. Nel frattempo, chiunque voglia ottenere il massimo dalle capacità A/V di FreeBSD, dovrà unire alla meglio la conoscenza che deriva dalle svariate FAQ e guide con l'uso di queste poche applicazioni. Questa sezione esiste per fornire al lettore indicazioni a queste informazioni aggiuntive.

La Documentazione di MPlayer è molto istruttiva sul piano tecnico. Questa documentazione, probabilmente, dovrà essere consultata da chiunque voglia ottenere un alto grado di conoscenza del video sotto UNIX. La mailing list di MPlayer risulta abbastanza ostile a chiunque non si sia preoccupato di leggere la documentazione, se si ha intenzione di segnalar loro un bug, RTFM.

L'HOWTO di xine contiene un capitolo su come aumentare le prestazioni che è comune a tutti i riproduttori.

In ultimo, ci sono alcuni applicativi promettenti che il lettore può provare:

Note

[1]

Una nota famiglia di schede video con ottime prestazioni in XFree86, nVidia, deve ancora rilasciare le proprie specifiche sul supporto XVideo al team XFree86. Potrà passare un po' di tempo prima che XFree86 supporterà completamente XVideo per queste schede.

[2]

La riproduzione non autorizzata di DVD è un grave atto criminale in alcuni paesi. Controlla le leggi locali prima di abilitare questa opzione.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.