Wine multimedia

From Studiosg
Jump to navigationJump to search

Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: English - Italiano


Slackware Linux, WINE e la Riproduzione di Contenuti Multimediali

Esistono molti programmi per ascoltare musica, riprodurre video ed anche per giocare in Linux. Se per qualche ragione le applicazioni native non fossero soddisfacenti, esiste la possibilà di utilizzare programmi scritti per Windows grazia a WINE: il "non emulatore" di Windows per Linux. WINE ha recentemente tagliato il ragguardevole traguardo della seconda versione stabile e supporta un gran numero di applicazioni. Per un elenco completo per cortesia consultare il sito WINE AppDB. Nonostante le recensioni positive alcune applicazioni possono presentare errori come crash improvvisi o la mancata riproduzione di alcuni file, di alcune tracce sonore o ancora dei filmati contenuti in un gioco. Spesso i problemi non sono legati a WINE, ma alla mancata installazione di librerie e plug-in opzionali. Nel seguito dell'articolo verrà presentato un elenco delle librerie legate al multimedia richieste da WINE e le loro funzioni principali.

WINE ed il Supporto Multimediale

Linux dispone di molti programmi dedicati al multimedia ed alla produzione o riproduzione di contenuti. Esistono comunque diverse ragioni che potrebbero portare a preferire l'uso di un programma sviluppato per altra piattaforma:

  • L'abitudine o la necessità di dover scambiare file con colleghi, committenti o clienti che utilizzino tale programma.
  • Il programma supporta funzioni assenti dall'equivalente software contenuto nella distribuzione preferita.
  • Si potrebbe non disporre del tempo o della voglia di imparare un nuovo strumento vanificando gli sforzi compiuti in precedenza.
  • Semplicemente perchè è stata pagata una licenza d'uso per il programma e non si vuole sperperare il proprio investimento.

Tutte ragioni valide che comportano di usare due diversi sistemi operativi oppure di far funzionare il programma in questione con WINE. WINE consente di installare e far girare programmi sviluppati per Windows su Linux e di non dover imparare un nuovo insieme di applicazioni e strumenti necessari per la propria attività quotidiana. WINE supporta un numero notevole di applicazioni, programmi, strumenti o giochi con un diverso grado di compatibilità. Alcuni funzionano perfettamente, mentre altri per nulla. Il livello del supporto va da Garbage, il livello più basso che identifica i programmi troppo instabili per l'uso quotidiano, fino a Platinum, programmi che funzionano perfettamente in ogni loro aspetto. Nel caso dei programmi dedicati al multimediale può capitare che risentano di problemi anche gravi nonostante abbiano ottenuto una valutazione elevata. Rallentamenti improvvisi, crash, mancata riproduzione di contenuti audiovisivi ed altro ancora. Si riporta di seguito come esempio i messaggi di errore conseguenti al crash di WINE durante l'esecuzione di un gioco sviluppato per piattaforma Windows:

  fixme:gstreamer:GST_QueryInterface No interface for {37d84f60-42cb-11ce-8135-00aa004bb851}!
  fixme:gstreamer:event_src 0x7b903dd8 (61441) stub
  fixme:gstreamer:event_src 0x7b903e18 (61441) stub
  fixme:gstreamer:unknown_type Could not find a filter for caps: audio/mpeg, mpegversion=(int)1,
     mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2, parsed=(boolean)true
  fixme:gstreamer:watch_bus decodebin0: Your GStreamer installation is missing a plug-in.
  fixme:gstreamer:GST_Connect GStreamer could not find any streams
  fixme:gstreamer:watch_bus decodebin0: Your GStreamer installation is missing a plug-in.
  wine: Unhandled page fault on read access to 0x00000000 at address 0x7c3db38f (thread 0047), starting debugger...
  fixme:quartz:MPEGSplitter_QueryInterface No interface for {37d84f60-42cb-11ce-8135-00aa004bb851}!
  fixme:gstreamer:Gstreamer_FindMatch Could not find plugin for audio/mpeg, mpegversion=(int) 1

Il problema si presenta durante l'esecuzione del gioco in maniera sistematica e non si tratta dunque di un evento casuale. Segnalazioni simili sono reperibili sia nella pagina Wiki di WINE che di molte distribuzioni. La causa dell'errore è suggerita dai messaggi contrassegnati in grassetto. L'errore non è imputabile al funzionamento di WINE, ma alla mancanza di plug-in necessari per riprodurre il formato audio. Per chiarire l'ultima affermazione sarà necessario spiegare alcuni dettagli circa il funzionamento di WINE.

WINE e GStreamer

WINE traduce le chiamate alle librerie di Windows in chiamate alle librerie di Linux / Unix che eseguono le funzioni analoghe. In alcuni casi è il codice di WINE a replicare le funzionalità di Windows, ma la maggior parte delle volte la responsabilità viene delegata a librerie di sistema. Nel caso della riproduzione di contenuti multimediali, WINE si appoggia a GStreamer, che consiste in una libreria per la lettura e manipolazione di flussi multimediali quali animazioni, filmati o musica. GStreamer fornisce un insieme di funzionalità di utilizzo generale che possono essere ampliate attraverso plug-in specifici. L'architettura introduce un livello di astrazione rispetto alle normali applicazioni multimediali in modo da consentire il riutilizzo del codice e dei plug-in esistenti. Se normalmente i plug-in funzionano con una ed una sola applicazione, GStreamer consente di superare tale limite presentando un'interfaccia comune con cui il codice può comunicare in maniera uniforme. Un'applicazione basata su GStreamer è compatibile con tutti gli altri plug-in e tutte le altre applicazioni a loro volta basate sulla libreria. Per un elenco dei numerosi plug-in supportati da GStreamer e maggiori informazioni circa il funzionamento della libreria si rimanda alla documentazione reperibile sul sito del progetto.

L'adozione di GStreamer comporta numerosi vantaggi per sviluppo e l'evoluzione di un programma. Per aggiungere un nuovo formato audio ad esempio è sufficiente sviluppare un plug-in specifico che si adatti all'interfaccia generica. Analogamente nuove funzionalità introdotte sotto forma di un plug-in potranno essere immediatamente combinate con il codice preesistente. Infine GStreamer è una libreria multi-piattaforma di conseguenza il suo utilizzo comporta una riduzione dei tempi e dei costi per sviluppare applicazioni che girino su Linux, MacOsX, Unix, Windows ed altro ancora.

Esistono due facce di ogni medaglia. Tutti i vantaggi dell'architettura di GStreamer descritta poc'anzi sono bilanciati dai costi di reperimento, installazione e gestione dei plug-in. Per supportare quanti più formati audio e video possibili è necessario installare un numero elevato di plug-in, aggiornandoli periodicamente in modo da correggere eventuali errori ed includere le novità introdotte. I plug-in e le librerie su cui si appoggiano sono sviluppati in maniera indipendente dal programma principale ed i rilasci avvengono in maniera asincrona. La versione ufficiale di Slackware Linux include GStreamer tra i propri pacchetti, ma solo una parte delle librerie e dei plug-in. Errori di WINE come quello riportato più sopra possono essere risolti installano le librerie mancanti.

Librerie Incluse in Slackware

Per consentire a giochi e programmi che funzionano in Linux tramite WINE di riprodurre musica e filmati è necessario installare svariate librerie. Molte di queste sono incluse tra i pacchetti standard di Slackware; vedremo in seguito dove reperire e come installare le rimanenti. Segue un elenco delle librerie richieste da GStreamer ed incluse in Slackware 14.2:

  • aalib-1.4rc5: Libreria per la produzione di ASCII Art in grado di disegnare immagini con stringhe di testo.
  • cdparanoia-III_10.2: Strumento per leggere le traccie audio dai CD.
  • freeglut-2.8.1: Libreria utilizzata per gestire finestre contenti grafica 3-D realizzata con OpenGL.
  • GConf-3.2.6: Un database contenente le configurazioni di molte applicazioni basate su GTK+.
  • libcaca-0.99.beta18: Alternativa a aalib.
  • libsoup-2.52.2: Una libreria che può comportarsi come un client o un server HTTP per GTK+.
  • libtheora-1.1.1: Il codec video per il formato libero Theora.
  • libvisual-0.4.0: Libreria per la realizzazione di grafica basata su una traccia audio.
  • taglib-1.10: Libreria per leggere e modificare i meta-dati di molti formati audio.
  • eudev-3.1.5: Libreria per il riconoscimento dei dispositivi collegati ad un PC.
  • wavpack-4.75.1: Sistema di compressione di flussi audio senza perdita.

Molte di queste sono installata automaticamente assieme al sistema operativo. Per controllare la presenza di un pacchetto è sufficiente verificare che il corrispondente file descrittore sia presente nella directory /var/log/packages. Ad esempio per verificare se sia installato il codec Theora si utilizzi il comando:

  ls -la /var/log/packages/* | grep -i theora
  -rw-r--r-- 1 root root    1578 Jul 23  2016 /var/log/packages/libtheora-1.1.1-x86_64-1

Nel caso il codec fosse assente è possibile installare il pacchetto relativo utilizzando il comando:

  installpkg /tmp/libtheora-1.1.1-x86_64-1.txz

I pacchetti mancanti sono reperibili su di un supporto di installazione di Slackware, sia CD che DVD, oppure on-line scaricabili dal sito della distribuzione.

Librerie Non Incluse in Slackware

Ogni rilascio ufficiale di Slackware Linux consta di migliaia di pacchetti. Nonostante ciò non tutto il software libero esistente è incluso nella distribuzione. La politica di Slackware ha sempre consistito nel fornire ai propri utenti un sistema stabile e ben collaudato piuttosto che il maggior numero possibile di pacchetti. Nel caso di GStreamer, ad esempio, sono disponibili solo il sistema base ed i plug-in meglio supportati:

  • gstreamer-1.6.4-x86_64-1
  • gstreamer0-0.10.36-x86_64-1
  • gst-plugins-base-1.6.4-x86_64-1
  • gst-plugins-base0-0.10.36-x86_64-2
  • gst-plugins-good-1.6.4-x86_64-1
  • gst-plugins-good0-0.10.31-x86_64-2

WINE ed altri programmi potrebbero dover riprodurre formati audio e video di file non gestiti dai plug-in inclusi; in tal caso sarà necessario installare anche librerie e plug-in aventi un supporto qualitativamente inferiore oppure una licenza non libera. I pacchetti relativi dovranno essere compilati ed installati a partire dal codice sorgente. Fortunatamente sono reperibili script di compilazione dei pacchetti in questione sul sito del progetto SlackBuilds.org, che si propone di "fornire la raccolta di script di compilazione più estesa disponibile assicurando la qualità maggiore possibile degli stessi". Una ricerca per GStreamer ed FFmpeg renderà un elenco di pacchetti che completano l'offerta della versione 14.2 della distribuzione. L'elenco comprende tra gli altri:

  • alsa-plugin-ffmpeg-1.1.1: Plug-in che legano i codec FFmpeg ad ALSA, il sottosistema audio di Linux.
  • ffmpeg-3.2.4: FFmpeg una soluzione completa per registrare e riprodurre audio e video.
  • gst0-ffmpeg-0.10.13: Plug-in che legano i codec FFmpeg a GStreamer.
  • gst-plugins-bad-1.6.2: Un insieme di plug-in per GStreamer di qualità buona, ma comunque inferiore al resto della libreria.
  • gst-plugins-ugly-1.6.2: Un insieme di plug-in per GStreamer la cui licenza comporta delle restrizioni alla loro distribuzione.

Descriveremo di seguito la procedura per produrre ed installare un pacchetto tgz, il formato utilizzato da Slackware, di gst-plugins-bad. La procedura è generica e potrà essere impiegata per tutti gli altri pacchetti cambiando i nomi degli archivi.

  • Scaricare l'archivio contenente lo script di compilazione.
E' possibile sia scaricare l'archivio tramite il proprio browser che utilizzando il comando wget come nell'esempio sottostante.
  cd /tmp
  wget https://www.slackbuilds.org/slackbuilds/14.2/multimedia/gst-plugins-bad.tar.gz
  • Estrarre il contenuto dell'archivio tramite il comando tar.
  tar -zxf gst-plugins-bad.tar.gz
  • Spostarsi nella nuova directory creata.
  cd gst-plugins-bad
  ls -la
  total 24
  drwxr-xr-x  2 1016 users 4096 Jan  9 22:07 .
  drwxrwxrwt 42 root root  4096 Apr 26 19:25 ..
  -rw-r--r--  1 1016 users  592 Jan  9 22:07 README
  -rwxr-xr-x  1 1016 users 2975 Jan  9 22:07 gst-plugins-bad.SlackBuild
  -rw-r--r--  1 1016 users  329 Jul  2  2016 gst-plugins-bad.info
  -rw-r--r--  1 1016 users 1004 Jul  2  2016 slack-desc
  • Scaricare il codice sorgente del pacchetto che si desidera compilare utilizzando il collegamento presente nella pagina del sito SlackBuilds.org.
  wget http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.6.2.tar.xz
  • Lanciare lo script SlackBuild di compilazione.
  sh ./gst-plugins-bad.SlackBuild

Lo script estrarrà il codice sorgente dall'archivio compresso. Eseguirà la compilazione del codice e le operazioni di configurazione richieste per produrre un pacchetto nella directory /tmp: gst-plugins-bad-1.6.2-x86_64-2_SBo.tgz per una architettura a 64 bit.

  • Installare il pacchetto mediante il comando installpkg.
  installpkg ./gst-plugins-bad-1.6.2-x86_64-2_SBo.tgz

Le ultime 2 operazioni dovrebbero essere eseguite dall'utente root.

  • Rimuovere i file temporanei creati dalla procedura di compilazione.
  cd /tmp
  rm -r /tmp/SBo

Come anticipato: nel caso si desiderasse installare più di un pacchetto, la procedura dovrà essere ripetuta più volte.

Sistemi Multi-Libreria

I processori a 64 bit compatibili Intel sono stati introdotti in commercio nel 2003 ed adottati lo stesso anno da molte distribuzioni Linux. Versioni del sistema operativo Windows per 64 bit sono state messe in commercio nella prima metà del 2005. Purtroppo, nonostante siano passati oltre 10 anni, di molti programmi scritti per Windows esiste solo la versione a 32 bit. Un programma compilato per architettura a 32 bit può girare su di un processore a 64 bit solo installando alcune librerie di compatibilità. Per essere sicuri che WINE faccia girare un programma su Linux a 64 bit è necessario installare tutte le dipendenze a 64 bit, le librerie ed i pacchetti compat32 per la compatilità a 32 bit.

Le istruzioni per convertire un sistema Slackware 64 bit puro in uno multi-libreria sono state oggetto di un precedente articolo pubblicato su questo stesso sito. Pacchetti ed istruzioni recenti possono essere reperiti sul sito di Alien Bob.

Se l'installazione delle librerie di compatibilità risulta facile e lineare, i pacchetti a 32 bit richiedono uno sforzo maggiore. Lo script massconvert32.sh incluso converte solo una parte dei pacchetti distribuiti nel rilascio ufficiale di Slackware e nessuna delle dipendenze esterne. Nel caso di GStreamer, massconvert32.sh agisce sul programma principale ed i plug-in di base, che purtroppo non sono sufficienti a coprire tutti i formati multimediali leggibili da Linux ed utilizzati dalle più recenti versioni di WINE. I pacchetti mancanti dovranno essere convertiti ed installati seguendo la procedura descritta di seguito:

  • Copiare i pacchetti da un supporto di installazione di Slackware a 32 bit, oppure scaricarli in una directory del proprio computer.
  • Creare una directory ove salvare i pacchetti convertiti:
  mkdir /tmp/compat32
  • Convertire i pacchetti mediante il comando convertpkg-compat32 citato in precedenza:
  convertpkg-compat32 -i ./aalib-1.4rc5-i486-5.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./cdparanoia-III_10.2-i486-1.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./libcaca-0.99.beta18-i486-2.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./libsoup-2.52.2-i586-1.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./libtheora-1.1.1-i486-1.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./libvisual-0.4.0-i486-3.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./libvisual-plugins-0.4.0-i486-2.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./libvpx-1.5.0-i586-1.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./taglib-1.10-i586-1.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./taglib-extras-1.0.1-i486-1.txz -d /tmp/compat32/
  convertpkg-compat32 -i ./wavpack-4.75.2-i586-1.txz -d /tmp/compat32/
  • Installare i pacchetti ottenuti mediante il comando installpkg:
  installpkg  /tmp/compat32/*.t?z

Al termine dell'installazione sia i pacchetti a 32 bit che il contenuto della directory /tmp/compat32/ potranno essere rimossi senza controindicazioni.

Rimangono in sospeso FFmpeg ed i plug-in bad ed ugly di GStreamer. Non esistono pacchetti ufficiali per gli stessi e neppure le versioni compat32 di compatibilità a 32 bit. Il primo passo consisterà nel compilare i pacchetti per poi convertirli come fatto in precedenza per i plug-in standard. Per compilare i pacchetti sono necessari 2 prerequisiti:

  • Gli script SlackBuild di compilazione.
  • Un ambiente a 32 bit.

Il primo prerequisito non presenta problemi: è possibile utilizzare i medesimi script reperiti in precedenza sul sito SlackBuilds.org. La procedura di compilazione coincide con quella descritta più sopra per i pacchetti a 64 bit. Per compilare i pacchetti si potrebbe far ricorso ad una partizione dedicata oppure una macchina virtuale in cui installare una versione di Slackware 14.2 a 32 bit. La seconda soluzione proposta presenza probabilmente i maggiori vantaggi. Installare una macchina virtuale con VirtualBox o altro programma di emulazione risulta più semplice e comodo rispetto all'installazione di Slackware 14.2 in una partizione dedicata. In entrambi i casi si consiglia di assegnare almeno 12 Gb di spazio per il disco virtuale o la partizione. Compilare software comporta un notevole consumo di spazio occupato dal codice sorgente e dai file temporanei.

Una volta compilati, i pacchetti a 32 bit devono essere convertiti in pacchetti di compatibilità mediante il comando convertpkg-compat32 come in precedenza:

  convertpkg-compat32 -i alsa-plugin-ffmpeg-1.1.1-i586-1_SBo.tgz -d /tmp/compat32/
  convertpkg-compat32 -i ffmpeg-3.2.4-i486-1_SBo.tgz -d /tmp/compat32/
  convertpkg-compat32 -i gst-plugins-bad-1.6.2-i486-2_SBo.tgz -d /tmp/compat32/
  convertpkg-compat32 -i gst-plugins-ugly-1.6.2-i486-1_SBo.tgz -d /tmp/compat32/
  convertpkg-compat32 -i gst0-ffmpeg-0.10.13-i486-1_SBo.tgz -d /tmp/compat32/

ed infine installati con il comando installpkg:

  installpkg  /tmp/compat32/*.t?z

Anche in questo caso al termine dell'installazione sia i pacchetti a 32 bit che il contenuto della directory /tmp/compat32/ potranno essere rimossi.


Conclusioni

WINE è un ottimo strumento per far girare giochi e programmi multimediali scritti per Windows su sistemi Linux / Unix a patto di installare tutte le dipendenze necessarie. La mancata installazione delle dipendenze può causare notevoli problemi fino al crash apparentemente inspiegabile di WINE. Nel presente articolo sono state elencate alcune dipendenze non incluse tra i pacchetti standard di Slackware Linux ed è stata sviscerata la procedura per installarli su sistemi Linux a 32 bit, 64 bit o multi-libreria.


Per commenti, consigli, domande inviate una e-mail all'indirizzo studiosg [chiocciola] giustetti [punto] net.


Link esterni





Lingue: English - Italiano