Tag Archives: media center

XBMC library update script

A JSON-RPC APIt használjuk a curl fedőnév alatt futó szamurájkarddal:

curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": 1}' http://IPOfMyXBMCMachine:8080/jsonrpc > /dev/null 2>&1

Media Center Szent Grál: tanulságos mese a megvezetett enduserről

Hétvégén ismét nekiálltam média centert szerelni. A dolog onnan indult, hogy megjelent a 12-es XBMC-t tartalmazó raspbmc disztribúció. A 12-es XBMC (becenevén "Frodo") már képes arra, hogy uPnP master-slave-et játszon. Ez annyit tesz, hogy míg az egyik média centeren futó XBMC uPnP szerverként megosztja a saját médiakönyvtárát, addig más XBMC-k uPnP kliensként láthatják ezeket a librarykat és így elég csak az egyik XBMC-nek karbantartani a metaadatokat. Nálam van két darab Raspberry Pi is, mindkettőn raspbmc, így nosza neki is álltam ezt élesíteni rajtuk. Az eredmény az alábbiakban részletezett kisebb káosz lett.

A disztribúció installja ugyanúgy problémamentes, mint eddig, az uPnP beállítás sem rocket science - az egyik (server) XBMC-t megkérjük, hogy hirdesse magát uPnP-n, a másik (kliens) XBMC-nek pedig azt mondjuk, hogy a server XBMC által hirdetett uPnP megosztást vesszük fel media folder gyanánt. A dolog működik, ám egy ronda szépséghibája akad: a kliens XBMC-n az uPnP megosztás sorrendje csak név szerinti lehet, így azon nem tudunk pl. időben csökkenő sorrendet beállítani, hogy azonnal lássuk, mik a friss anyagok a megvásárolt DVD-inket mondjuk H.264 formában tároló gyűjteményünkben.

A Raspberry Pi-n futó XBMC talán egyik legnagyobb előnye, hogy képes használni a kis masina HDMI kimenetén levő aktív CEC lábat, lehetővé téve ezáltal, hogy a HDMI CEC kompatibilis televíziónk távirányítója a teljes XBMC frontendet vezérelje (=egy remote mind felett rulez). Nos, a friss raspbmc disztibúcióval pont ez a funkció kezdett el akadozni. Minden egyes sleep után csak a Raspberry Pi-re kötött billentyűzet volt képes felébreszteni a mini média centert - úgy tűnt, hogy a CEC kapcsolat a sleep-pel együtt elmúlik, majd a gépet felébresztve újra létrejön.
Ebből kezdett elegem lenni, így először nekiálltam fórumokat túrni, majd egy idő után más Raspberry Pi XBMC disztrókat keresgéltem. Így akadatam rá az openELEC és az XBian pakkokra.

Az openELEC jött előbb - felpakoltam, bekonfirguráltam, hagytam, hogy libraryt scanneljen magának, kipróbáltam a média lejátszás funkciókat, majd vártam, hogy lemenjen sleep-be és megpróbáltam a TV távirányítójával felébreszteni: siker. Minden működött, így feltettem a másik Raspberry Pi-re is ugyanezt a csomagot, beállítottam azt is.
Másnap meglepetten vettem észre, hogy az openELEC-en futó XBMC borzasztóan akadozik. Ránézek a CPU load-ra: 100%, pedig csak a főmenüben áll az XBMC. Új legális DVD másolat nincs a libraryban, ergo a scannerek sem futhatnak, hát akkor meg mi a rák ez? Szűk órányi googling előhozza, hogy két dolog lassíthatja szerencsétlent: a skinben bekapcsolt RSS feed, illetve a "Common Plugin Cache" nevű add-on, amit többek között a YouTube trailerek lejátszásához készített plugin is használ. Kikapcsolom mindkettőt, de még mindig magas a CPU load. Reboot: most már kicsit jobb - 70-85% közötti.

Tanulság #1: a Raspberry Pi nem egy Cray supercomputer.

Ha ezen a ponton nem járt volna tovább az agyam, az nagyon hasznos lett volna. De persze járt.
Épp megszereltnek lehetne nyilvánítani a media centert, amikor eszembe jut, amit az előbbi googling közben az egyik fórumozótól olvastam. A srác a Plexet, az XBMC-ből forkolt média centert emlegette. Az ő Plex servere, ami a library managementet végzi egy Synology NAS-on futott. Ehhez már csak annyinak kellett beugrani, hogy az LG tavaly megiratta a Plex-es fiúkkal a serverük frontendjét a Smart TV-ikhez, és indultak is a fogaskerekek: csináljunk Plex backendet a NAS-ra és az LG TV-n próbáljuk ki a Plex klienssel!
A NAS-ra gond nélkül feltelepült a Plex backend és némi konfugurálás után neki is látott a library építésnek. Miután elkészült, megnéztem, hogy mit mutat a TV-n. Nos, a TV egész konktétan egy Loading... becenevű homokórát mutatott úgy 3-4 percig onnantól kezdve, hogy megkértem őt a Plex backend által kínált libraryban való tallózásra. Valószínűleg valami LG store-ból kellett volna letölteni még egy Plex frontendet is a TV-be, ám ez már nem következett be, ugyanis a TV egyszercsak minden figyelmeztetés nélkül rebootolt.
Néztem bután, mint ló a tüzijátékra, hogy ez meg mi volt. Első körben természetesen a gonosz új Raspberry Pi disztróra gyanakodtam, hátha ott valami watchdog űz nem túl fair játékot és küld valamit a CEC porton a készüléknek. Mire azonban oda jutottam volna, hogy input forrást váltok a TV készüléken és ránézek az XMBC-re, újabb reboot következett.

Tanulság #2: a házilag gyártott media centerekkel lehet küzdeni bőven.

Kezdett megindulni az adrenalin, így egy hirtelen mozdulattal lehúztam a Raspberry Pi HDMI kábelét a TV-ről és már mentem is volna XBiant installálni szerencsétlen openELEC helyére, amikor a TV ismét újraindult. Álltam, néztem egy darabig, hogy a boot után megjelenik rajta a NO SIGNAL felirat, majd megint jön egy reset. WTF? A dolog odáig fokozódott, hogy két reboot között cirka 30 másodperc már telt csak el. Lehet, hogy a TV hibás?
Pár újabb rebootnyi ciklussal nagy nehezen eljutok odáig a TV menüjében, hogy megtalálom a Factory Reset opciót, aztán a következő rebootnál el is indítom. A reset lefut, a TV frissen, mindenféle beállítás nélkül jelentkezik be, majd amikor megnyugodva elkezdem újra konfigurálni, ismét újraindul. Nincs mit tenni, ez halott - én meg szerencsétlen openELEC-et hibáztattam!

Becsomagolom a TV-t a hétfői szervizbe cipeléshez, majd leülök fórumokat olvasgatni, hátha más is pórul járt már folyton rebootoló LG Smart TV-vel. Mit ad az ég, egy rahedli bejegyzést találok, pontosan ugyanilyen esetekről. Sajnos mindenhol ugyanaz a válasz: vidd vissza és cseréltesd ki. Nincs sehol egy szervízmenü, vagy valami bootable USB image, amivel újra működővé lehetne varázsolni szerencsétlent.
Már csukom be az utolsó ilyen fórumoldalt, amikor meglátom a legalsó bejegyzését: a jóember Plexet installált frissen és onnantól indult a reboot móka, majd leszedte a backendet és a probléma elmúlt. Nosza, TV kicsomagol, talp újra összeszerel, NAS-ról a Plex uninstallál, TV indít és minden újra a régi: az LG Smart TV reboot betegsége megszűnt.

Tanulság #3: valami kóddarab van az LG Smart TV készülékekben, amit egy élő Plex backend képes annyira hanyattvágni, hogy az a televízió újraindulását eredményezi. Lehet, hogy majd egy software update ezt orvosolni fogja, de egész biztosan nem én leszek az a felhasználó, aki ezt ellenőrizni fogja. 2013 február 23-án vasárnap részemről eltemettem a Plexet örökre.

Media Center Szent Grál: feliratozzunk!

A probléma

Filmünk van, ráadásul mondjuk sok, feliratunk meg nem van, főleg nem több nyelven.

A megoldás

Subliminalt installálunk:

  • leszedjük az aktuális master branchet innen
  • hagyjuk, hogy installálja magát: sudo ./setup.py install

Ha ez kész, megírjuk az alábbi getsub scriptet:

#!/bin/sh
for F in `ls -1 *.mp4 *.avi *.mkv *.m4v *.mov`
do
	echo Processing "$F"...
	BASE=${F%.*}
	if [ -f "$BASE.hu.srt" -a -f "$BASE.en.srt" ]
		then echo "Subtitles exists - skipping download."
		else
			echo "Trying to download subtitles..."
			/usr/local/bin/subliminal -m -l hu -l en "$F"
	fi
done

Mindezek után csak annyi a dolgunk, hogy bemászunk egy folderbe, ahol a sok film lakik és ráeresztjük a getsub scriptünket. Az eredmény jó esetben a filmfile-ok mellett keletkező .hu.srt és .en.srt állományok kellemes tömege.

Advancedebb olvasóink rekurzívvá tehetik a scriptet.

Update: az összes advanced olvasót megelőzve íme az ajándék minimalistább, ám annál rekurzívabb script (a tegnapi verzióban lemaradtak a space tartalmú fileneveket védő idézőjelek, amire ma hajnalra fds mester hívta fel a figyelmemet):

#!/bin/sh
find . \( -name "*.mp4" -or -name "*.avi" -or -name "*.mkv" -or -name "*.m4v" -or -name "*.mov" \) -and \( ! -iname ".*" \) -print0 | while read -rd $'\0' F; do
	BASE=${F%.*}
	echo Processing "$F"...
	if [ ! -f "$BASE.hu.srt" -o ! -f "$BASE.en.srt" ]
		then /usr/local/bin/subliminal -m -l hu -l en "$F"
	fi
done

Media center szent grál saga: ne vegyél most TV-t!

Az OS X alapú media center megvalósításról már többször volt szó errefelé: a házimozi HOWTO komplett workflow-t magyaráz el, a Plex + Logitech Harmony HOWTO pedig a kedvenc TV-re kötött médiafogyasztó alkalmazásom és a Logitech Harmony okos távirányítók házasítását ecseteli. Mindkét postban az XMBC alkalmazásból született Plex media centeré volt a frontend főszerepe, aki pár napja váltott a 0.9.0 verzióra.

A 0.9.0-s váltás a Plex Media Server parserei által tömött metadata library teljes megújulását hozta, s ezzel egyidőben megszületett a Plex iOS app is, amely iOS alapú eszközökre teszi lehetővé a media center által látott tartalom streamelését, valamint a desktop Plex frontend alkalmazás távirányítójává alakítja az iOS appot futtató eszközt.

A 0.9.0 még bírkózik pár problémával, de bízom benne, hogy hamarosan kinövi ezeket. Sok esetben az ember egy nyitott platformú ingyen alkalmazásnál csak legyintene egyet erre, ám a Plex-es fiúk valami nagy bejelentést tartogattak még a múlt hét végére, amely eloszlatta bennem az ilyen jellegű aggodalmakat.
A Plex fejlesztői megállapodtak az LG Electronics-szel, hogy a 2011-től megjelenő egyes LG TV-kben és BluRay lejátszóiban a gyártó integrálni fogja a Plex frontend alkalmazást, ami a Plex Media server által streamelt tartalmakat képes majd az LG eszközein megjeleníteni. Ezzel együtt a dédelgetett, szabadidőben fejlesztett Plex-et a srácok mostantól a saját céges kereteik között, főmunkaidőben fejlesztik és nekiállnak a Plex Media Server több platformra történő portolásának is.
Annak ellenére, hogy az LG felkarolta a remek media centert, a fejlesztők nem kötöttek velük kizárólagos szerződést, valamint továbbra is nyitott és ingyenes platformnak tartják meg mind az alkalmazást, mind a plugin API-t.

A sok rizsa után íme egy kis sneak peek a most zajló IFA kiállításról:

Egy szó mint száz: ha mostanában terveznél TV-t upgrade-elni, megéri megvárni, mire a "Plex powered" LG Smart TV-k ellepik a piacot (arról meg majd egy következő postban beszélgetünk, hogy az LG azon kevés televízió gyártók egyike, aki a készülékei seggére szerelt soros port specifikációját nyíltan letölthetővé teszi, szabad utat engedve ezzel a korrekt épületfelügyeleti integrációnak).