Vánoce jsou za námi a jistě se v některých rodinách pod stromečkem objevila chytrá televize. V takovém případě člověka napadne, jak zpřístupnit širokou multimediální sbírku z počítače na nové televizi. V tomto článku si ukážeme, jak toho dosáhnout relativně nenáročnou formou pomocí dvou programů, jednoho open-source a druhého uzavřeného.

Pokročilejší multimediální centra a televize dokáží pracovat se vzdáleným obsahem i přes běžné protokoly, jako jsou FTP, NFS nebo Samba. V tomto případě s obsahem pracujete na úrovni souborů. Nicméně to není zaprvé úplně pohodlný způsob a zadruhé nejrozšířenější televizní systémy tento způsob nepodporují. V tomto okamžiku přichází na řadu DLNA, což je zkratka Digital Living Network Alliance. Tato aliance má za cíl vytvářet průmyslový standard, který se stará o bezproblémové sdílení obsahu mezi zařízeními v domácí síti. K tomu využívá protokol UPnP (Universal Plug and Play). Po světě už je podle DLNA přes 18 tisíc certifikovaných zařízení a software, který může fungovat jako DLNA server a tedy sdílet multimediální obsah počítače dalším zařízením v síti, naleznete i ve Fedoře. Pojďme se podívat na první možnost.

MiniDLNA

Poznámka: MiniDLNA změnil název na ReadyMedia. V tomto článku se budu ale i nadále držet názvu MiniDLNA, protože se tak i nadále jmenuje v repozitářích Fedory a pod tímto názvem ho naleznete i všude na internetu.

Jedná se o jednoduchý a nenáročný DLNA server, který je open-source, a naleznete ho přímo v repozitářích Fedory. Nainstalovat ho lze jednoduše příkazem:

sudo yum -y install minidlna

Server se nastavuje editací konfiguračního souboru /etc/minidlna.conf. V něm je sice celá řada nastavení, ale k základnímu běhu potřebujete jen nastavit adresář, kde se média nacházejí (např. media_dir=/home/pepa/Multimedia). Je možné také nastavit různé adresáře pro různé druhy médií (videa, hudba, fotky). Dále se ještě hodí nastavit si nějaký rozumný název serveru, pod kterým se bude hlásit v TV (např. friendly_name=Můj domáci DLNA server). Editace konfiguračního souboru je jednoduchá. Všechny volby jsou předvyplněné a dobře okomentované. Často je stačí pouze odkomentovat.

Dalším krokem je nastavení firewallu tak, aby komunikaci mezi TV a DLNA serverem umožňoval. Často se člověk může v návodech dočíst, abyste firewall vypnuli úplně. V domácí síti, která je zpravidla už chráněná několika firewally, to asi nehraje takovou roli, ale rozhodně správnějším řešením je firewall nevypínat a jen povolit porty, které potřebujeme. Těmi jsou v tomto případě TCP 8200 a UDP 1900. Předpokládáme-li, že používáte v domáci síti zónu “home”, nastavíte je těmito příkazy:

sudo firewall-cmd --zone=home –add-port=8200/tcp --permanent
sudo firewall-cmd --zone=home –add-port=1900/udp --permanent

Tím máte nastavený firewall a posledním krokem je server nastartovat, což provedete příkazem:

sudo systemctl start minidlna

Následujícím příkazem pak zajistíte, aby server startoval při každém spuštění počítače:

sudo systemctl enable minidlna

Jak jste se mohli přesvědčit, zprovoznění MiniDLNA je otázka chvilky. Jedná se také o opravdu malý server s malým zatížením systému. V mém případě zabíral v paměti po spuštění nějakých 14 MB. Tím ovšem výhody končí. MiniDLNA má také jednu velkou nevýhodu pro sdílení obsahu na TV. Neumožňuje totiž převádět multimediální soubory do kodeků, kterým TV rozumí. Ty jsou totiž v tomto směru docela hloupé a kvůli hardwarové optimalizaci podporují jen vybranou sadu kodeků. Pokud tedy máte hudební sbírku například v OGG Vorbis nebo FLAC, můžete na přehrávání ve většině televizí zapomenout, pokud tedy nemáte DLNA server, který ty soubory dokáže převést pomocí kodeku, kterému TV rozumí. Z tohoto důvodu se v další části zaměřím na Serviio.

Serviio

Serviio je relativně mladý projekt založený Čechem Petrem Nejedlým. Jako většina ostatních pokročilejších DLNA serverů je napsaný v Javě a na rozdíl od MiniDLNA není open-source, ale pouze freeware, který má i verzi Pro s několika přidanými funkcemi. Jelikož Serviio není otevřený software, nenajdeme ho v repozitářích Fedory. Z tohoto důvodu vyžaduje instalace trochu víc než jen instalaci balíčku:

Nejdříve musíte nainstalovat Javu:

sudo yum install java-1.7.0-openjdk

A potom také ffmpeg z repozitáře RPM Fusion:

sudo yum install ffmpeg

Instalace ffmpeg je dost zásadní věc, protože bez ní vám Serviio nebude prakticky fungovat. Aby mohl pořádně zindexovat multimediální soubory, vytvořit náhledy a potom to vše poskytnout TV, musí mít k dispozici kodeky. Většina programů ve Fedoře už přešla z ffmpeg na libav. Nicméně libav vám nepomůže, Serviio se ptá přímo po ffmpeg. Já jsem dlouho přemýšlel nad tím, proč se mi v TV nezobrazuje žádný obsah, když to vypadá, že Serviio v pořádku běží a je správně nastavené, a až z logů jsem se dočetl, že mu chybí ffmpeg.

Tím bychom měli vyřešené závislosti a nyní se můžeme pustit do samotné instalace:

wget http://download.serviio.org/releases/serviio-1.4-linux.tar.gz (stažení)
sudo tar -C /opt -zxvf serviio-1.4-linux.tar.gz (rozbalení)
sudo mv /opt/serviio-1.4 /opt/serviio (nakopírování do složky /opt/serviio)

V dalším kroku si vytvoříme uživatele jménem serviio a dáme mu práva přístupu k adresáři /opt/serviio:

sudo useradd -d /opt/serviio -r serviio
sudo chown -R serviio:serviio /opt/serviio

Nyní musíme vytvořit unit soubor, podle kterého se bude služba spouštět. Soubor s následujícím obsahem uložte jako /lib/systemd/system/serviio.service:

[Unit]
Description=Start the serviio DLNA server in headless mode
After=local-fs.target network.target

[Service]
Type=simple
User=serviio
ExecStart=/opt/serviio/bin/serviio.sh
ExecStop=/opt/serviio/bin/serviio.sh -stop
Restart=on-abort

[Install]
WantedBy=multi-user.target

Po uložení souboru ještě proveďte následující příkaz, abyste se ujistili, že změny v nastavení systemd se provedou okamžitě:

systemctl --system daemon-reload

A nyní už vám nic nebrání v tom Serviio spustit:

sudo systemctl start serviio.service
systemctl enable serviio.service (zajistí, aby se Serviio spouštělo po každém startu počítače)

(návod pro instalaci čerpá z wiki Serviio).

Serviio mi v zóně home fungovalo bez dodatečných nastavení. Máte-li s tím problémy nebo používáte-li jinou zónu, povolte porty TCP 8895 a UDP 1900.

Teď už nám zbývá jen Serviio nastavit. Dobrou zprávou je, že Serviio má vlastní grafickou konzoli pro nastavení, takže to je přehledné a jednoduché. Stačí provést následující příkaz:

/opt/serviio/bin/serviio-console.sh

Na kartě Status můžete vidět, jestli server běží, nebo ne. Níže je potom seznam DLNA klientů, které Serviio dokázalo v síti detekovat. Tento seznam je důležitý v případě, že chcete multimédia, která nejsou kompatibilní se zařízením, převést do kodeku, kterému zařízení rozumí. Podle zvoleného profilu se totiž daný kodek vybere.

Na kartě Library můžete nastavit adresáře, kde se mají jednotlivé druhy multimédií vyhledávat. Myslete na to, že musíte dát DLNA serveru nějaký čas, než vaši sbírku zindexuje. Kompletní obsah sbírky tak v TV nenajdete hned. Pod tlačítkem Show Status můžete vidět, jak daleko se indexace dostala. Ukázkové nastavení na této kartě můžete vidět na screenshotu:

serviioNa kartě Delivery můžete nastavit právě to převádění do kodeků, kterým TV rozumí. Ve výchozím stavu se převedené soubory dočasně ukládají do /tmp. Důležité je také nastavení v podkartě Subtitles, kde budete chtít pravděpodobně změnit kódování titulků z UTF-8 na WIN-1250, protože tuto znakovou sadu stále používá drtivá většina českých titulků. Na kartě Metadata můžete nastavit, z jakých zdrojů a v jakém jazyce se mají získávat metadata k multimédiím. Na kartě Presentation můžete zvolit, jak má multimediální sbírka zobrazovat v TV (jde především o způsob třídění). Na kartě Console Settings si můžete nastavit české rozhraní pro konzoli Serviio, pokud vám dělá nastavování výše zmíněných věcí v angličtině problémy.

Tím je zprovoznění DLNA serveru Serviio hotovo. Nyní jen stačí počkat, až se celá sbírka zindexuje, a můžete si ji začít užívat na televizi. Na 14 dní automaticky získáte Pro verzi, která má navíc funkce jako aplikaci do Androidu, streamování mimo lokální síť apod. Stojí 25 dolarů a je na vašem zvážení, jestli vám stojí za to. Vzhledem k tomu, že Serviio je napsáno v Javě, jeho nároky na operační paměť jsou výrazně vyšší než v případě MiniDLNA. V mém případě to je něco lehce přes 100 MB, což ale při velikostech dnešních pamětí není nic zničujícího.

Serviio samozřejmě není jediným pokročilým DLNA serverem, který na Linuxu a tedy i Fedoře běží. Hodně lidem se osvědčil např. PS3 Media Server, který je dokonce pod GPL. Jaké jsou vaše zkušenosti s provozem DLNA serveru na Fedoře?