IPTV in EPG na OpenELEC

IPTV in EPG na OpenELEC - jodlajodla.si

Pred mesecem dni sem se ukvarjal z uvozom IPTV kanalov v pravem formatu v TVHeadEnd. Izdelal sem program, ki prebere sezname kanalov iz formatov M3U in CSV, nato pa jih pretvori v konfiguracijske datoteke, ki jih kasneje naložimo v ustrezno mapo na sistemu. Glede na to, da kdaj prižgem televizijo v upanju, da bom brez daljšega iskanja našel ustrezno oddajo, sem se odločil, da samemu prebiranju sporeda na spletu in preklapljanju kanalov naredim konec. Čeprav sem že dlje časa vedel, da TVHeadEnd podpira tudi EPG, nisem vedel kako pridobiti spored, prav tako ni bilo na voljo nobenega spletnega servisa, ki bi ponujal celoten odprt spored. Po nekaj iskanja in urejanja skript mi je uspelo zapolniti še zadnjo luknjo za popolno predvajanje IPTV kanalov na OpenELEC. Dopolnil sem IPTV Playlist Editor, ki z zadnjo izdano različico omogoča izvoz XMLTV identifikacijskih nizov, kateri so namenjeni prepoznavanju vsebine znotraj XML datoteke s sporedom.

Vodič za namestitev EPG v TVHeadEnd

Če želite pridobiti spored v obliki XMLTV, ki ga lahko kasneje uvozite v TVHeadEnd, potrebujete naslednja orodja:

  • Računalnik ali (virtualni) strežnik z operacijskim sistemom temelječim na Linuxu
  • Urejevalnik Python in bash kode ter nekaj programerskih spretnosti
  • Program IPTV Playlist Editor in seznam kanalov IPTV z ustreznimi podatki

Celoten opisan postopek sem izvajal na operacijskih sistemih Ubuntu 13.10 in Ubuntu Server 12.04 LTS. Večina stvari iz vodiča verjetno deluje tudi na operacijskem sistemu Windows, le da je tam postopek nekoliko drugačen. Za kakršnekoli nastale težave ne odgovarjam, saj postopek izvajate na lastno odgovornost, pred nadaljevanjem pa vam priporočam, da naredite varnostno kopijo datotek, ki jih potrebujete. Sam sem EPG uspešno in brez težav namestil, zato spodnji postopek smatram kot delujoč.

1. Najprej na računalnik ali strežnik potrebujemo prenesti program, ki podpira pridobivanje podatkov za spored iz različnih spletnih strani. WebGrab+ Plus nam ravno to omogoča, saj lahko iz različnih spletnih strani izdelamo datoteko v kateri se nahaja celoten spored za določeno število dni. Najprej prenesemo temeljno različico iz tukaj, nato pa še posodobitev iz tukaj. V kolikor postopek izvajate na strežniku brez grafičnega načina, potem si lahko pomagate z ukazom wget:

$ sudo apt-get install wget
$ wget http://webgrabplus.com/sites/default/files/download/SW/V1.1.1/WebGrabPlusV1.1.1LINUX.rar
$ wget http://webgrabplus.com/sites/default/files/download/sw/V1.1.1/upgrade/patchexe_52.zip

Ko paketa prejmemo iz spleta, sledi ustvarjanje mape imenovane wg++ in razširitev obeh paketov iz katerih skopiramo določene datoteke.

$ mkdir wg++
$ sudo apt-get install unzip unrar
$ unrar WebGrabPlusV1.1.1LINUX.rar
$ unzip patchexe_52.zip
$ cp patchexe_52/WebGrab+Plus.exe wg++/
$ cp WebGrab+PlusV1.1.1LINUX/WebGrab++.config.xml wg++/
$ cp -r WebGrab+PlusV1.1.1LINUX/MDB/ wg++/mdb
$ cp -r WebGrab+PlusV1.1.1LINUX/REX/ wg++/rex

Na podstrani programa WebGrab+ Plus si sedaj ogledamo imena spletnih strani iz katerih lahko prenašamo podatke za EPG. Ko se odločite za določenega ponudnika, se z miškinim kazalcem premaknite nad ikono, ki prikazuje prenos datoteke in počakajte, da se vam izpiše katere datoteke vsebuje. Če je datum izgradnje datotek izbranega ponudnika mlajši od avgusta 2012, potem skopirajte naslov do strani in prenesite paket ter ga razpakirajte po zgoraj opisanem postopku. V kolikor je datum starejši od avgusta 2012, potem lahko skopirate datoteko iz prejšnjega paketa, vendar z držanjem miškinega kazalca nad ikono preverite ime konfiguracijske datoteke izbrane spletne strani. Datoteko prekopiramo v prej ustvarjeno mapo wg++ (* nadomestite z imenom konfiguracijske datoteke):

$ cp WebGrab+PlusV1.1.1LINUX/*.ini wg++/

Osnova je sedaj pripravljena, namestiti pa potrebujemo še orodje Mono, ki omogoča zagon programa WebGrab+ Plus. V kolikor uporabljate Ubuntu, morate v sistem dodati še repozitorij, ki vključuje zadnjo različico projekta Mono. Postopek namestitve najdete v prejšnjem prispevku.

2. Po namestitvi orodja Mono lahko nadaljujemo z ustvarjanjem nove konfiguracijske datoteke za WebGrab+ Plus. Pripravil sem skripto, ki samodejno prebere kanale iz spletne strani in izdela konfiguracijsko datoteko. Celoten paket vseh skript prenesemo in ga razpakiramo:

$ wget https://github.com/jodlajodla/IPTV_EPG_Scripts/archive/master.zip
$ unzip master.zip

Od vseh štirih skript, potrebujemo le dve, zato ju skopiramo v mapo wg++ in namestimo zahtevano knjižnico.

$ cp IPTV_EPG_Scripts-master/generate_config.py wg++/
$ cp IPTV_EPG_Scripts-master/parse.sh wg++/
$ sudo apt-get install python-beautifulsoup

Najprej uredimo skripto generate_config.py, kateri moramo podati naslov spletne strani iz kjer prenašamo podatke ter vnesti regularen izraz za pridobitev vseh imen ter identifikacijskih nizov kanalov. Nato uredimo še datoteko parse.sh, v katero moramo vnesti pravilno pot do mape, kjer se nahaja program WebGrab+ Plus. Za urejanje priporočam program nano. Ko sta datoteki uspešno urejeni ju zaporedoma zaženemo. Prva je datoteka generate_config.py, kateri lahko podamo dodatne argumente (te si lahko ogledate s stikalom -h), druga pa datoteka parse.sh, ki zažene WebGrab+ Plus. Ta se lahko izvaja dlje časa, odvisno od nastavitev, ki ste jih podali v konfiguracijsko datoteko in števila kanalov za katere prenašate spored.

$ python wg++/generate_config.py
$ bash wg++/parse.sh

Po uspešno pridobljenem sporedu lahko nadaljujete. V kolikor uporabljate strežnik in je ta dostopen v vašem omrežju, vam priporočam, da nekaj prostora namenite sporedu in ga postavite v mapo, ki je dostopna preko spleta. Tako boste v omrežju lahko iz vseh naprav dostopali do sporeda preko spleta. V nasprotnem primeru, če uporabljate računalnik, pa boste datoteko na nek način morali prenesti do naprave na kateri je nameščen OpenELEC.

3. Da ne bomo po nepotrebnem izgubljali časa in vsak dan znova zaganjali omenjeni skripti, ju dodamo v sistem cron. Ta nam omogoča poganjanje ukazov ob določenem času ali intervalu, vendar ima nekoliko zapletenejšo zgradbo ukaza s katerim to dosežemo. Tabelo cron ukazov uredimo z ukazom:

$ crontab -e

V primeru, da še nikoli niste urejali datoteke izberite vam najljubši urejevalnik kode ter na konec datoteke prilepite ukaza, katera uredite po svojih željah (user obvezno zamenjajte z vašim uporabniškim imenom):

0 0 */15 * * python /home/user/wg++/generate_config.py
5 0 */2 * * bash /home/user/wg++/parse.sh >/dev/null 2>&1

Prvi ukaz se izvaja na 15 dni ob 00:00, drugi ukaz pa vsak drugi dan ob 00:05. Ta dva ukaza prilagodite glede na konfiguracijsko datoteko programa WebGrab+ Plus in vašim potrebam. S tem zaključujemo konfiguriranje računalnika ali strežnika za pridobivanje podatkov sporeda za kanale in nadaljujemo z urejanjem identifikacijskih nizov kanalov in nastavitvijo OpenELEC.

4. Na računalnik s katerim ste delali ali upravljali strežnik prenesite prej omenjene skripte. Odpakirajte jih in uredite datoteko update_playlist.py, ki zahteva enake podatke za pridobitev naslovov kanalov in identifikacijskih nizov, kot v prejšnjem koraku generate_config.py. Za posodobitev seznama kanalov morate imeti že pripravljeno datoteko M3U ali CSV v katerih se nahajajo podatki o kanalih. To nato podamo v argument in ustvarimo novo izhodno datoteko s kanali, ki ima posodobljene identifikacijske nize.

$ python update_playlist.py seznam-kanalov.m3u -o posodobljeni-kanali.m3u

Sedaj zaženemo program IPTV Playlist Editor, ki mora biti različice vsaj 1.1, ter uvozimo ravnokar ustvarjen seznam posodobljeni-kanali.m3u. Za izvoz kanalov s programom IPTV Playlist Editor in uvoz v TVHeadEnd, sledite temu vodiču. Poleg nalaganja vseh izvoženih map v mapo TVHeadEnd na OpenELEC, potrebujemo še datoteko tv_grab_sl, ki smo jo prejeli v paketu skript. To morate urediti glede na to, kje se datoteka nahaja – na spletu ali na disku. Ko to dokončate, jo je potrebno naložiti v /storage/.xbmc/addons/service.multimedia.tvheadend/bin/. Predlagam da sedaj ponovno zaženete napravo na kateri je OpenELEC, saj se zna zgoditi, da vam zaradi preobremenjenosti uvoza podatkov v TVHeadEnd vse skupaj zamrzne.

5. Čaka nas le še uvoz sporeda v TVHeadEnd. Na računalniku odpremo spletni vmesnik TVHeadEnd, ki se nahaja na naslovu http://IP-naslov:9981 in odidemo v Configuration (Konfiguracija) – Channel/EPG (Kanal/EPG) – EPG Grabber (EPG pobiralnik). V nastavitvah izberemo modul XMLTV: Slovenia, interval pobiranja pa nastavite glede na nastavitev konfiguracijske datoteke za WebGrab+ Plus. Kliknemo le še na gumb Save configuration (Shrani konfiguracijo) in ponovno zaženemo TVHeadEnd.

$ cd /usr/bin/
$ tvheadend.stop
$ tvheadend.start

Sedaj bi EPG moral pričeti delovati, predlagam pa, da si ogledate vse kanale v ConfigurationChannel/EPGChannels (Kanali) in jim po možnosti ustrezno nastavite izvor EPG prejema oziroma XMLTV identifikacijski niz (to velja v primeru, da kakšen kanal nima nastavljenega niza ali pa ga želite spremeniti).

S postopkom smo uspešno zaključili. Z EPG smo vključili še eno odlično funkcijo, ki omogoča snemanje programov glede na spored ali pa poljubno nastavimo od kdaj do kdaj želimo, da TVHeadEnd snema video pretok. Upam, da vam je uspelo urediti EPG po vaših željah, verjamem pa, da je ta vodič nekoliko zahtevnejši, zato me v primeru težav lahko karkoli vprašate pod komentarji. Sedaj pa čimbolje izkoristite EPG, hkrati pa vam želim prijeten ogled IPTV kanalov!

Snemanje programov s TVHeadEnd - jodlajodla.si

10 Responses to IPTV in EPG na OpenELEC

  1. Zdravo!

    Imam manjše probleme z zadnjim delom tvojega članka. Mi lahko pošleš primer izpolnjene in delujoče generate_config.py?
    ČE prav razumem, ta skripta zgenerira config za WebGrab++?
    KAj se zgodi, ko poženem WebGrab?
    Kje dobim xmltv datoteko, ki jo potem podam v tv_grab_sl? Mi jo zgenerira webgrab++? Kam jo shrani?

    V zadnjih korakih manjka nekaj vsebine, pa se mi vse skupaj malo ustavi.

    Matej

  2. generate_config.py zgenerira konfiguracijsko datoteko za WebGrab+, vendar jo je potrebno prirediti spletni strani iz katere se jemlje podatke za EPG. Drugače ni nujna za delovanje samega WebGraba+, ker obstaja možnost, da z njim pridobiš enake podatke – ime kanala za podstran, …
    Ko poženeš WebGrab+, ta program prične z odpiranjem podstrani kanalov izbrane spletne strani, ki ponuja spored in ga prepisuje v XML datoteko.
    XMLTV datoteko zgenerira WebGrab+, shrani jo na mesto podano v konfiguracijski datoteki.

  3. S samo konfiguracijo (.ini) se nisem še skoraj nič ukvarjal. Uredil sem samo to, da se je na koncu vsakega opisa dodala pika, ki je privzeto ni bilo. Verjetno bi ti lahko bolje pomagali na forumu WebGrab+Plus, predvsem avtor, ki te konfiguracije piše.

  4. ikone lahko dodaš v xml tako, da popraviš dve datoteki.
    najprej .ini in sicer dodaš pod index_urlshow:
    index_variable_element.modify {addstart(scope=datelogo)|’config_site_channel’}
    index_urlchannellogo.modify {addstart|’index_variable_element’}

    Nato pa se mora spemeniti še:
    SLO+1

    v npr:

    SLO+1

  5. najprej hvala za tale how-to!

    Ampak meni nikakor ni jasno, kateri URL in div ID naj bi vnesel v scripto generate_config.py?!? po navodilih predpostavljam da je URL http://webgrabplus.com/epg-channels. Kaj naj bi bil potem div ID za siol.net playlisto?

    Sicer sem popravil skripto tako, da vzame kar channel elemente iz .xml-ja, ampak me se vedno matra, kaj je bilo misljeno s tem.

    hvala in lp

  6. generate_config.py služi temu, da zgenerira konfiguracijo iz IDjev kanalov, ki so objavljeni na spletni strani sporeda. Vse kar je potrebno narediti je to, da na glavni strani, kjer so ti IDji objavljeni najdeš div v katerem so podani omenjeni podatki in nato spišeš regex, ki vsebuje id strani (npr. domena.tld), XMLTV ID kanala in ime kanala. Na podlagi tega je skripta zmožna zgenerirati celotno konfiguracijo, ki se jo posodablja glede na poljuben interval.

    Ta skripta od zadnje posodobitve konfiguracijske datoteke za ponudnika sporeda na WebGrab++ strani sicer sploh ni potrebna, ker WG++ odslej pravilno zgenerira isto konfiguracijo s čimer so bili v preteklosti manjši problemi.

  7. Dobar dan Jan SUSNIK,

    Instalirao sam IPTV Playlist Editor ali nemogu da otvorim m3u da bi menjao raspored kanala.
    Dokument m3u otvorim ga na Kodi M3U IPTV Editor ali nema mogucnost za promenu kanala ID kao vas software (menjati raspored kanala)

  8. Pozdravljeni,

    Program podpira točno določen format m3u datoteke, opisan pod naslovom “M3U & CSV file structure” na uradni strani programa. V kolikor želite uvoziti datoteko z drugačnim formatom, morate prilagoditi izvorno kodo programa, ki je prav tako na voljo na omenjeni strani.

  9. A bi lahko kdo dal primer kako mora zgledati generate_config.py, ker sem probal že vse in mi ne uspe usposobiti. hvala

Dodaj odgovor

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja