XMMS2 - návrat krále

Pamatujete si ještě Linux Winamp aka XMMS? Dlouhou dobu to byl jediný použitelný Open Source přehrávač. Projekt XMMS2 je jeho kompletním remakem.

22.6.2006 08:00 | Radim Kolář | přečteno 13160×

XMMS

Kdo by neznal Linuxový Winamp - XMMS, byla to jedna z prvních linuxových 'Killer App'. Winamp byl tehdy (kolem roku 1998) velmi populární přehrávač mp3 souborů a těžko byste hledali Windows se zvukovou kartou bez Winampu.

XMMS přišel ve správný čas, uživatelské rozhraní měl téměř shodné s Winampem a málokdo se tehdy zajímal, co vlastně ta zkratka XMMS znamená, byl to prostě náš linuxový Winamp. Podobně jako originál byl skinovatelný a bylo možné k němu psát pluginy, kterých vzniklo poměrně rychle velké množství, jak se sami můžete přesvědčit na jeho homepage.

Jako uvědomělá opensource aplikace typu 'Killer App' XMMS velmi úspěšně zabíjel jistý uživatelský systém s modrým pozadím. Pro konverzi uživatelů se používala sympatická trojka složená z Netscape Navigátoru, KDE a našeho hrdiny XMMS, která si získala srdce nejedné uživatelky.

XMMS se stalo populárním a udrželo se na špici hezkých pár let. Konkurenční přehrávače sice existovaly např. ZINF, ale zájem o ně byl pramalý; zinf, ačkoliv nevypadal nejhůře a běhal dokonce i pod Win32, měl potíže se stabilitou. Kromě toho, když jste měli kvalitní, udržovaný, stabilní a skinovatelný přehrávač se spoustou pluginů, nebyl důvod shánět něco jiného.

S příchodem masového rozšíření videa začala sláva XMMS pohasínat. Video nebylo nikdy v XMMS slušně podporováno. Existovaly sice pluginy pro jeho přehrávání, ale nebyly nic moc, jelikož API poskytované pluginům bylo pro seriozní přehrávání videa značně nevhodné. Ono nebylo dost vhodné ani pro přehrávání audia, pokud jste chtěli něco víc než jen prosté přehrávání - např. titulky. Autorům se nechtělo API nějak zásadně předělávat, jelikož již existovala spousta pluginů.

Nastala tak pozvolná migrace uživatelů od XMMS k velké trojce skládající se z XINE, Video on LAN a Mplayeru. Všechny video přehrávače zvládaly pochopitelně přehrávání audia levou zadní a vývojáři z open source komunity dodali hezky vypadající skinovatelná grafická rozhraní. Jelikož uživatelé byli většinou líní používat dva přehrávače, ztratili o XMMS víceméně zájem. Ani autoři se nesnažili nějak radikálně XMMS předělat a v současné době je projekt víceméně v bugfix režimu.

XMMS2

Bylo jasné, že pokud má XMMS vstát z mrtvých, je třeba jeho radikální přepracování. XMMS2 tedy začal na zelené louce s využitím know-how načerpaného z předchozího projektu. Autorem XMMS2 je Peter Alm, autor XMMS. Jméno nového projektu je tentokrát X(cross)platform Music Multiplexing System.

Peter zvolil pro nový projekt architekturu klient-server. Server je složen z jádra a řetězce transportních pluginů, dekódovacích pluginů, efektových pluginů, výstupních pluginů, pluginů pro playlisty a konečně i podpora export datu pro vizualizaci klientem. Server taktéž obhospodařuje knihovnu metadat, ve které může klient vyhledávat pomocí SQL dotazů. Více informací o architektuře XMMS2 najdete zde.

XMMS2 není navržen jako video přehrávač a podpora videa se neplánuje, neboť autor je zásadně proti podpoře videa v XMMS2 v jakékoliv formě. Žádat o začlenění videa je tedy stejné jako nosit sovy do Atén.

Autor se také z chyb v designu XMMS poučil a projekt již důsledně využívá existující knihovny pro dekódování audia, ogg dekóduje knihovna vorbis a mp3 jsou dekódovány libmad. Pro výstup se používá knihovna ALSA. Technicky vzato všechny uvedené knihovny jsou volitelné, povinné pro sestavení jádra přehrávače jsou jen dvě - glib2 a sqlite3. Jako framework pro překlad je použit SCons, takže je nutné jej mít spolu s Pythonem nainstalován.

Praxe

Jak jsem již napsal, XMMS2 využívá klient-server architekturu. V základním balíku je server představován programem xmms2d a klient programem xmms2. Teprve po spuštění démona: xmms2d -q & můžeme začít s xmms2 pracovat. Démon standardně ukládá data v uživatelově $HOME, takže každý uživatel může mít jak svoji knihovnu metadat, tak i svou instanci démona, neboť defaultně je komunikace přes TCP zakázána a ipc sokety v tmp obsahují jméno uživatele (i.e. /tmp/xmms-ipc-clanky). Někdy se démon odmítne spustit, pokud neexistuje adresář ~/.xmms2 a je nutné jeho ruční vytvoření. U betaverze lze takové chování omluvit.

Dalším krokem je import hudebních souborů. K tomu slouží příkaz xmms2 mlib addpath adresář, který rekurzivně proscanuje adresář a do knihovny médií přidá metadata odpovídající nalezeným souborům. Jedná se o poměrně rychlou operaci. Pokud se metadata souborů změní (např. pomocí id3 editoru) lze příkazem xmms2 mlib rehash zajistit jejich opětovnou synchronizaci.

V takto vytvořené knihovně lze hledat v tzv. simple módu např. xmms2 mlib search title=%krishna. Pokud by nám toto vyhledávání nestačilo je možné pomocí xmms2 mlib query používat přímo dotazovací jazyk SQL, přesněji řečeno jeho podmnožinu podporovanou sqlite3 enginem.

Knihovna metadat obsahuje kromě souborů také playlisty. O import/export playlistů se starají pluginy, v standardní instalaci najdete zahrnutou podporu pro formáty pls a m3u. Zaujalo mne, že si xmms2 pamatuje aktuální pozici v playlistu i po restartu xmms2d.

Ovládání

Xmms2 se v současnosti ovládá pouze z příkazové řádky. Existují sice grafické a dokonce i web nadstavby, ale ty nejsou standardně dodávány. Ovládání z příkazové řádky je díky rozdělení programu na serverovou a klientskou část velmi pohodlné. Osobně jej považuji za největší praktický přínos tohoto projektu, jelikož jsem si programy ovládané z příkazové řádky oblíbil.

A tak můžeme xmms2 velice snadno ovládat pomocí intuitivních příkazů jako xmms2 play, xmms2 stop, xmms2 next atd. Tyto příkazy nečekají na dokončení požadované akce, pouze předají pokyn xmms2 démonu a skončí. Toto je velké plus, neboť je lze bez problémů použít z různých IDE prostředí za použití volby spusť příkaz.

Rozšiřování

Xmms2 je naprogramováno v jazyce C a proto je nejsnadnější psát pluginy v tomto jazyce. Pokud chcete napsat k xmms2 klienta, není nutné a ani doporučované komunikovat s xmms2d přímo. K tomuto účelu byla vytvořena knihovna. Tuto knihovnu lze v současné době využívat z C++, Ruby, Pythonu a Javy. Autoři doporučují použití interpretovaných jazyků, neboť v nich lze vyvíjet rychleji.

Shrnutí

Xmms2 je dobrý program. Mezi jeho hlavní pozitiva patří modulární architektura, snadné psaní pluginů a klientů, hezké ovládání z příkazové řádky, knihovna metadat a architektura klient-server. Pokud máte rádi programy ovládané z příkazové řádky, rozhodně nebudete zklamáni.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=1269