Met een Raspberry Pi haal je gratis een XBMC-mediacenter in je woonkamer. Maar hoe speel je nou precies je mediacollectie af op die Pi? Door ze te streamen vanaf een andere machine natuurlijk!

In je woonkamer wil je liever geen luidruchtige PC plaatsen. Juist daarom is een Raspberry Pi als mediacenter zo interessant. Bij gebrek aan bewegende onderdelen (zoals een harde schijf, optische drive of ventilatoren) is die immers muisstil. Zo geniet je met volle teugen van je muziek en films, zonder storende achtergrondgeluiden. Dat wil je niet verpesten door een zoemende externe harde schijf aan je Pi te koppelen? Gelukkig ondersteunt XBMC verschillende protocolen om mediabestanden via het netwerk af te spelen. Denk bijvoorbeeld aan het mounten van een Samba- of NFS-share vanaf een NAS. Maar het UPnP-AV-protocol is eigenlijk veel interessanter voor zulke toepassingen. Dat protocol is immers specifiek ontworpen om multimediabestanden (audio, video en afbeeldingen) te streamen. Het wordt door heel wat devices ondersteund: AV-receivers, smart tv’s, smartphones, enzovoorts. Ook andere apparaten op je netwerk kunnen hier dus gebruik van maken.

ReadyMedia

Om bestanden via UPnP te streamen vanaf een Linux-machine moet je een zogenaamde UPnP media server installeren. Op Wikipedia vind je een ellenlange lijst van dergelijke software. Beperken we ons tot software die nog actief ontwikkeld wordt, geen al te hoge systeemvereisten stelt en eenvoudig te installeren is op Linux, dan blijft er heel wat minder keuze over! We hebben in het verleden reeds verschillende pakketten getest. Vooral ReadyMedia -het vroegere MiniDLNA- is wat ons betreft een aanrader. ReadyMedia wordt door Netgear ontwikkeld voor gebruik in zijn ReadyNAS-apparaten. Dat biedt verschillende voordelen:

        de kans is klein dat de ontwikkeling plots stilvalt

        het wordt getest op erg uiteenlopende apparaten. Uit de changelog blijkt dat compatibiliteitsproblemen met bepaalde apparaten geregeld worden opgelost;

        het heeft bescheiden systeemvereisten, aangezien het ook vlot moet draaien op de minder krachtige hardware van een NAS.

 

Transcoding

Nadelen zijn er natuurlijk ook. Zo kan ReadyMedia geen mediabestanden on-the-fly transcoderen naar een ander formaat. Transcoding is erg handig als de UPnP-client het formaat van het bronbestand niet ondersteunt. Bijvoorbeeld: de media server bevat een muziekcollectie in FLAC-formaat en een bepaald device speelt enkel MP3- en WAV-bestanden af. Een transcoding media server zet in dat geval het FLAC-bestand om in WAV-formaat zonder dat de client daar iets van merkt. Maar het transcoderen -met name van videobestanden- is erg processorintensief. Dat is wellicht geen probleem als je ReadyMedia op je desktop of laptop installeert. Maar wil je die apparaten steeds inschakelen om een film te streamen naar je mediacenter? Het is veel handiger om bijvoorbeeld een Raspberry Pi of BeagleBone Black in je meterkast te installeren. Die apparaatjes gebruiken zo weinig stroom dat je ze probleemloos dag en nacht kan laten draaien. Sluit er een externe harde schijf op aan en je hebt je eigen homeserver om je mediacollectie te bewaren.

 

Zolang je geen video wilt transcoderen, is een Pi of BeagleBone dus prima geschikt als UPnP-AV media server. We raden je wel aan om eens na te gaan welke audio- en videoformaten er allemaal in je mediacollectie aanwezig zijn. Controleer meteen of die formaten ook ondersteund worden door XBMC en eventuele andere devices waarop je ze wilt afspelen. Zitten er bepaalde bestanden tussen die niet afgespeeld kunnen worden? Converteer ze dan éénmalig naar een ondersteund formaat met tools zoals Handbrake (voor video) of Soundconverter (voor audio). Zo vermijd je onaangename verrassingen achteraf!

 

Installatie

De meeste distributies bieden ReadyMedia aan via hun eigen repositories, al moet je wellicht naar de oudere naam MiniDLNA zoeken. Onder Debian, Ubuntu of Linux Mint installeer je bijvoorbeeld het pakket ‘minidlna’. Na de installatie staan twee configuratiebestanden klaar om ReadyMedia in te stellen: /etc/default/minidlna en /etc/minidlna.conf. In het eerste bestand hoef je normaal gesproken niets te wijzigen. Het bevat onder andere de gebruikersnaam waaronder ReadyMedia draait (minidlna) en de locatie van het eigenlijk configuratiebestand (/etc/minidlna.conf). Dat bestand zullen we nu stap voor stap aan onze wensen aanpassen. Stop om te beginnen de minidlna-service…

 

 

$ service minidlna stop

 

…en open vervolgens /etc/minidlna.conf in een teksteditor. De belangrijkste optie is ‘media_dir’. Die bepaalt welke directories ReadyMedia moet scannen op zoek naar mediabestanden. Standaard staat dit ingesteld op /var/lib/minidlna: wijzig dit dus naar de locatie van je externe harde schijf. Meerdere media_dir-opties opnemen mag ook: bij elke directory kan je zelfs aangeven of die muziek (A), video (V) of afbeeldingen (P) bevat. ReadyMedia zoekt dan enkel naar die specifieke bestandstypes. In afbeelding 1 zie je een voorbeeld van drie verschillende media_dirs.

 

Permissies

De media_dir-optie is meteen de grootste oorzaak van problemen met ReadyMedia. Vergeet niet dat ReadyMedia draait als de minidlna-gebruiker. Die gebruiker moet dan ook minstens leestoegang hebben tot de verschillende media_dirs. Controleer dus eerst de bestandspermissies van de mediabestanden in die directories. Wellicht heb je de bestanden in die mappen geplaatst via Samba, NFS of SCP met je eigen gebruikersaccount. Je kan natuurlijk manueel de owner of group van alle bestanden wijzigen naar minidlna. Maar dan moet je dat steeds opnieuw doen nadat je er nieuwe mediabestanden plaatst. Wees er maar zeker van dat je dat zal vergeten! Een eenvoudigere oplossing is om minidlna toe te voegen aan de primary group van de owner van die directories. Zien de bestandspermissies er bijvoorbeeld uit zoals in afbeelding 2 (read/write-access voor gebruiker ‘filip’ en read-access voor groep ‘users’), voeg de minidlna-gebruiker dan toe aan de group ‘users’.

 

Kies tot slot nog een naam voor jouw mediaserver met de optie ‘friendly_name’. Die naam krijg je te zien op alle UPnP-clients: wel handig als je meerdere UPnP-mediaserver in huis zou hebben.

Tags en thumbnails

We zijn nu bijna klaar om ReadyMedia te starten en de verschillende media_dirs te laten doorzoeken. Voor de database van beschikbare mediabestanden baseert ReadyMedia zich op bestandsnamen én eventuele metadata, zoals ID3-tags voor muziekbestanden en EXIF-data voor foto’s. Het is erg belangrijk dat zowel de bestandsnamen als de metadata zo accuraat mogelijk zijn. Zo worden speciale karakters niet altijd netjes herkend door ReadyMedia. Problemen in bestandsnamen zijn grotendeels te vermijden door enkel ext3- of ext4-bestandsystemen te gebruiken voor de media_dirs. Externe harde schijven -die bij aankoop meestal voorzien zijn van een FAT32 of NTFS-bestandsysteem- herformatteer je dus voordat je deze gebruikt. Worden speciale karakters in ID3-tags niet correct weergegeven? Dan moet je die tags wellicht eerst omzetten in UTF-8-tekencodering met een programma zoals EasyTag.

ReadyMedia ondersteunt ook thumbnails van mediabestanden. Maar wellicht bevatten niet al jouw bestanden embedded thumbnails. In dat geval moet je de thumbnail zelf aanmaken: ReadyMedia doet dit niet automatisch voor jou. Tijdens het scannen van directories detecteert ReadyMedia thumbnails als de bestandsnaam ervan is opgenomen in de album_art_names-optie (zie afbeelding 3). Uiteraard kan je extra bestandsnamen toevoegen aan die lijst, maar het is eigenlijk eenvoudiger om je aan de standaardbenamingen te houden. Plaats elke film en elk muziekalbum gewoon in een afzonderlijke map, samen met een thumbnail genaamd cover.jpg. Voor tv-series heb je natuurlijk meerdere thumbnails nodig per map. Daarvoor gebruik je dezelfde naam als het videobestand, maar met extensie .jpg in plaats van de oorspronkelijke extensie.

 

Database aanmaken

Start nu minidlna om de database van mediabestanden aan te maken:

 

$ service minidlna start

 

Afhankelijk van de hoeveelheid data kan dit wel even duren: ons testsysteem had ongeveer 25 minuten nodig om een goede 20.000 bestanden te indexeren (vooral muziek en foto’s, in mindere mate video’s). In het logbestand /var/log/minidlna.log zie je welke directory momenteel geïndexeerd wordt en hoeveel bestanden ReadyMedia al heeft gevonden. Wacht zeker tot de database volledig klaar is, want een onvolledige database brengt clients in de war. Je ziet niet alleen maar een deel van je mediacollectie, ook het afspelen van bestanden loopt op dat ogenblik geregeld mis.

 

Kopieer je later nieuwe bestanden in één van de media_dirs, dan voegt ReadyMedia ze meteen toe aan de database. Daarvoor maakt het gebruik van inotify. Heb je erg veel subdirectories in je media_dirs, dan krijg je mogelijk volgende foutmelding te zien in de logfile: “WARNING: Inotify max_user_watches [8192] is low or close to the number of used watches”. Dit los je op door de kernel parameter fs.inotify.max_user_watches aan te passen (zie afbeelding 4). Configureer je extra media_dirs in /etc/minidlna.conf, dan moet je de database volledig opnieuw aanmaken met volgend commando:

$ service minidlna force-reload

Tot slot nog een laatste tip: het minidlna-package in Debian bevat geen logrotate-configuratie. Met het bestand uit afbeelding 5 zorg je dat /var/log/minidlna.log niet eindeloos blijft groeien.

 

XBMC

Is de ReadyMedia-database intussen klaar? Hoog tijd om XBMC te starten en je mediacollectie door te bladeren! Ga daarvoor naar “Video’s” > “Bestanden” en selecteer de optie “Video’s toevoegen”. Klik vervolgens op de knop “Bladeren” en kies “UPnP Devices” uit de lijst van ondersteunde bronnen. Wacht nu enkele seconden en je ReadyMedia server verschijnt hier met de friendly_name die je had ingesteld. Klik op de naam van jouw device en je krijgt vier submappen te zien: “Browse Folder”, “Music”, “Pictures” en “Video”. Klik nu op “Video” en dan tweemaal op “OK” om de locatie toe te voegen. Onder “Video’s” > “Bestanden” staat nu een extra entry met de naam van jouw ReadyMedia-server. De procedure om afbeeldingen of muziek toe te voegen is gelijkwaardig: in de onderdelen “Afbeeldingen” of “Muziek/Bestanden” voeg je de submap “Pictures” of “Music” van jouw ReadyMedia-server toe.

Heb je de verschillende mediabronnen ingesteld, dan kan het streamen beginnen! UPnP-clients, zoals XBMC, geven je op verschillende manieren toegang tot je mediabestanden. De eenvoudigste methode is via de “Folders”-optie: je bladert dan gewoon door de directorystructuur van je media server. Dat is vooral handig als je jouw media netjes geordend hebt in slechts één media_dir met audiobestanden. Bij meerdere media_dirs in ReadyMedia toont XBMC namelijk de first level subdirectories van alle media_dirs door elkaar, wat soms verwarrend is. Daarnaast kan je jouw mediacollectie ook doorbladeren op basis van de metadata. Dat is een stuk gebruiksvriendelijker, maar het vereist wel meer werk vooraf. Zonder correcte metadata is het soms erg moeilijk om bepaalde bestanden terug te vinden! De beschikbare metadata hangen uiteraard samen met het gekozen mediatype. Zo vind je voor muziek alfabetische lijsten van albums, artiesten en genres, terwijl je foto’s bijvoorbeeld op datum kan doorzoeken.

 

Media Renderer

In het voorbeeld hierboven gebruikten we XBMC als UPnP-client om bestanden van een UPnP-server af te spelen. De client neemt daarbij twee taken op zich: de mediabestanden weergeven (als Media Renderer) én de bestanden streamen vanaf de server (als Control Point). Eén van de voordelen van UPnP is dat de Media Renderer en het Control Point niet op hetzelfde device hoeven te draaien. Het is dus mogelijk om bijvoorbeeld de inhoud van een UPnP-server te browsen via je smartphone en daar de opdracht te geven om een bestand te streamen naar XBMC. In dat geval is ReadyMedia de Media Server, je smartphone het Control Point en XBMC de Media Renderer. Een Control Point kan je dus beschouwen als een doorgeefluik waarin je een invoerbron en een uitvoerapparaat selecteert (zie afbeelding), maar dat zelf geen mediabestanden bevat of afspeelt. De Media Renderer-functionaliteit moet je wel expliciet inschakelen in XBMC. Ga daarvoor naar “Systeem” > “Instellingen” > “Diensten” > “UPnP” en vink de optie “Besturing van XBMC via UPnP toestaan” aan.

 

Een UPnP-app op je smartphone als Control Point is wellicht de handigste methode om media te streamen naar XBMC. Op je smartphone navigeer je immers veel gemakkelijker door je mediacollectie. Ook beschikken sommige apps over een zoekfunctie, waarmee je nog sneller de gewenste bestanden vindt. In de volgende afbeelding zie je een voorbeeld van de zoekfunctie in BubbleUPnP, één van de vele prima UPnP-clients voor Android. Maar onthoud wel dat XBMC als Media Renderer niets weet over jouw mediacollectie. Sluit je de Control Point app af, dan zal XBMC na het huidige mediabestand gewoon stoppen met afspelen. Ook doorspoelen naar het vorige of volgende mediabestand lukt niet meer vanuit XBMC: enkel pauzeren werkt nog.

 

Meer dan XBMC

We zeiden het reeds in de inleiding: UPnP wordt door heel wat apparaten ondersteund. Zo zouden we via XBMC muziek kunnen afspelen op onze AV-receiver, maar dat gaat net zo goed rechtstreeks. In de afbeelding van de UPnP Android-app staat onze AV-receiver (Yamaha RX-V671) immers in het lijstje van beschikbare Media Renderers. Uiteraard weet die geen raad met afbeeldingen of videobestanden, maar voor muziek hebben we XBMC dus niet nodig. Bevat jouw AV-receiver geen netwerkfunctionaliteit, dan is XBMC wél nog nuttig om muziek te streamen. In BubbleUPnP’s lijstje van renderers zie je trouwens ook nog een “Local renderer” staan. Daarmee stream je media naar je smartphone of tablet. Zowel voor Android als iOS bestaan talloze apps die als UPnP Media Server, Control Point en Media Renderer functioneren. Tot slot vermelden we nog even dat ook Windows Media Player prima samenwerkt met ReadyMedia. Voor bepaalde formaten (zoals Ogg en FLAC) moet je wel nog extra codecs installeren in Windows Media Player. ReadyMedia ondersteunt immers geen transcoding, waardoor Windows Media Player de oorspronkelijke FLAC-streams krijgt voorgeschoteld.

 

Flexibel streamen

Via een Samba- of NFS-mount kan XBMC uiteraard ook mediabestanden afspelen van een NAS of homeserver. Maar een UPnP Media Server, zoals ReadyMedia, biedt veel meer mogelijkheden. Zo is het gemakkelijk om via een UPnP-app op je smartphone media van je server te streamen naar XBMC. Met diezelfde app speel je de mediabestanden net zo goed rechtstreeks op je smartphone af. En ook heel wat andere devices in je netwerk kunnen je ReadyMedia-bibliotheek benaderen: denk maar aan AV-receivers of Windows-computers. Met een UPnP-media server bereik je dus heel wat meer devices in je netwerk dan met een gewone Samba- of NFS-server.

Dit artikel heeft eerder in Linux Magazine gestaan.