{"id":1874,"date":"2014-03-31T21:45:07","date_gmt":"2014-03-31T19:45:07","guid":{"rendered":"http:\/\/jodlajodla.si\/blog\/?p=1874"},"modified":"2014-03-31T21:47:43","modified_gmt":"2014-03-31T19:47:43","slug":"iptv-in-epg-na-openelec","status":"publish","type":"post","link":"https:\/\/jodlajodla.si\/blog\/iptv-in-epg-na-openelec\/","title":{"rendered":"IPTV in EPG na OpenELEC"},"content":{"rendered":"<p><a href=\"http:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/iptv-in-epg-na-openelec.jpg\" rel=\"lightbox[1874]\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1876\" alt=\"IPTV in EPG na OpenELEC - jodlajodla.si\" src=\"http:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/iptv-in-epg-na-openelec_mini.jpg\" width=\"600\" height=\"250\" srcset=\"https:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/iptv-in-epg-na-openelec_mini.jpg 600w, https:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/iptv-in-epg-na-openelec_mini-430x179.jpg 430w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>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\u017eimo v ustrezno mapo na sistemu. Glede na to, da kdaj pri\u017egem televizijo v upanju, da bom brez dalj\u0161ega iskanja na\u0161el ustrezno oddajo, sem se odlo\u010dil, da samemu prebiranju sporeda na spletu in preklapljanju kanalov naredim konec. \u010ceprav sem \u017ee dlje \u010dasa 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 \u0161e zadnjo luknjo za popolno predvajanje IPTV kanalov na OpenELEC. Dopolnil sem IPTV Playlist Editor, ki z zadnjo izdano razli\u010dico omogo\u010da izvoz XMLTV identifikacijskih nizov, kateri so namenjeni prepoznavanju vsebine znotraj XML datoteke s sporedom.<\/p>\n<p><!--more--><\/p>\n<h3>Vodi\u010d za namestitev EPG v TVHeadEnd<\/h3>\n<p>\u010ce \u017eelite pridobiti spored v obliki XMLTV, ki ga lahko kasneje uvozite v TVHeadEnd, potrebujete naslednja orodja:<\/p>\n<ul>\n<li>Ra\u010dunalnik ali (virtualni) stre\u017enik z operacijskim sistemom temelje\u010dim na Linuxu<\/li>\n<li>Urejevalnik Python in bash kode ter nekaj programerskih spretnosti<\/li>\n<li>Program <a title=\"IPTV Playlist Editor 1.1 - jodlajodla.si\" href=\"http:\/\/jodlajodla.si\/blog\/iptv-playlist-editor-1-1\/\">IPTV Playlist Editor<\/a> in seznam kanalov IPTV z ustreznimi podatki<\/li>\n<\/ul>\n<p>Celoten opisan postopek sem izvajal na operacijskih sistemih Ubuntu 13.10 in Ubuntu Server 12.04 LTS. Ve\u010dina stvari iz vodi\u010da verjetno deluje tudi na operacijskem sistemu Windows, le da je tam postopek nekoliko druga\u010den. Za kakr\u0161nekoli nastale te\u017eave ne odgovarjam, saj <strong>postopek izvajate na lastno odgovornost<\/strong>, pred nadaljevanjem pa vam priporo\u010dam, da naredite varnostno kopijo datotek, ki jih potrebujete. Sam sem EPG uspe\u0161no in brez te\u017eav namestil, zato spodnji postopek smatram kot delujo\u010d.<\/p>\n<p><strong>1.<\/strong> Najprej na ra\u010dunalnik ali stre\u017enik potrebujemo prenesti program, ki podpira pridobivanje podatkov za spored iz razli\u010dnih spletnih strani. <a href=\"http:\/\/webgrabplus.com\/\" target=\"_blank\">WebGrab+ Plus<\/a> nam ravno to omogo\u010da, saj lahko iz razli\u010dnih spletnih strani izdelamo datoteko v kateri se nahaja celoten spored za dolo\u010deno \u0161tevilo dni. Najprej prenesemo temeljno razli\u010dico iz <a href=\"http:\/\/webgrabplus.com\/sites\/default\/files\/download\/SW\/V1.1.1\/WebGrabPlusV1.1.1LINUX.rar\" target=\"_blank\">tukaj<\/a>, nato pa \u0161e posodobitev iz <a href=\"http:\/\/webgrabplus.com\/sites\/default\/files\/download\/sw\/V1.1.1\/upgrade\/patchexe_52.zip\" target=\"_blank\">tukaj<\/a>. V kolikor postopek izvajate na stre\u017eniku brez grafi\u010dnega na\u010dina, potem si lahko pomagate z ukazom wget:<\/p>\n<pre>$ sudo apt-get install wget\r\n$ wget http:\/\/webgrabplus.com\/sites\/default\/files\/download\/SW\/V1.1.1\/WebGrabPlusV1.1.1LINUX.rar\r\n$ wget http:\/\/webgrabplus.com\/sites\/default\/files\/download\/sw\/V1.1.1\/upgrade\/patchexe_52.zip<\/pre>\n<p>Ko paketa prejmemo iz spleta, sledi ustvarjanje mape imenovane wg++ in raz\u0161iritev obeh paketov iz katerih skopiramo dolo\u010dene datoteke.<\/p>\n<pre>$ mkdir wg++\r\n$ sudo apt-get install unzip unrar\r\n$ unrar WebGrabPlusV1.1.1LINUX.rar\r\n$ unzip patchexe_52.zip\r\n$ cp patchexe_52\/WebGrab+Plus.exe wg++\/\r\n$ cp WebGrab+PlusV1.1.1LINUX\/WebGrab++.config.xml wg++\/\r\n$ cp -r WebGrab+PlusV1.1.1LINUX\/MDB\/ wg++\/mdb\r\n$ cp -r WebGrab+PlusV1.1.1LINUX\/REX\/ wg++\/rex<\/pre>\n<p>Na <a href=\"http:\/\/webgrabplus.com\/epg-channels\" target=\"_blank\">podstrani programa WebGrab+ Plus<\/a> si sedaj ogledamo imena spletnih strani iz katerih lahko prena\u0161amo podatke za EPG. Ko se odlo\u010dite za dolo\u010denega ponudnika, se z mi\u0161kinim kazalcem premaknite nad ikono, ki prikazuje prenos datoteke in po\u010dakajte, da se vam izpi\u0161e katere datoteke vsebuje. \u010ce je datum izgradnje datotek izbranega ponudnika mlaj\u0161i od avgusta 2012, potem skopirajte naslov do strani in prenesite paket ter ga razpakirajte po zgoraj opisanem postopku. V kolikor je datum starej\u0161i od avgusta 2012, potem lahko skopirate datoteko iz prej\u0161njega paketa, vendar z dr\u017eanjem mi\u0161kinega kazalca nad ikono preverite ime konfiguracijske datoteke izbrane spletne strani. Datoteko prekopiramo v prej ustvarjeno mapo wg++ (* nadomestite z imenom konfiguracijske datoteke):<\/p>\n<pre>$ cp WebGrab+PlusV1.1.1LINUX\/*.ini wg++\/<\/pre>\n<p>Osnova je sedaj pripravljena, namestiti pa potrebujemo \u0161e orodje Mono, ki omogo\u010da zagon programa WebGrab+ Plus. V kolikor uporabljate Ubuntu, morate v sistem dodati \u0161e repozitorij, ki vklju\u010duje zadnjo razli\u010dico projekta Mono. Postopek namestitve najdete v <a href=\"http:\/\/jodlajodla.si\/blog\/c-programi-na-linuxu\/\" target=\"_blank\">prej\u0161njem prispevku<\/a>.<\/p>\n<p><strong>2.<\/strong> 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:<\/p>\n<pre>$ wget https:\/\/github.com\/jodlajodla\/IPTV_EPG_Scripts\/archive\/master.zip\r\n$ unzip master.zip<\/pre>\n<p>Od vseh \u0161tirih skript, potrebujemo le dve, zato ju skopiramo v mapo wg++ in namestimo zahtevano knji\u017enico.<\/p>\n<pre>$ cp IPTV_EPG_Scripts-master\/generate_config.py wg++\/\r\n$ cp IPTV_EPG_Scripts-master\/parse.sh wg++\/\r\n$ sudo apt-get install python-beautifulsoup<\/pre>\n<p>Najprej uredimo skripto <em>generate_config.py<\/em>, kateri moramo podati naslov spletne strani iz kjer prena\u0161amo podatke ter vnesti regularen izraz za pridobitev vseh imen ter identifikacijskih nizov kanalov. Nato uredimo \u0161e datoteko <em>parse.sh<\/em>, v katero moramo vnesti pravilno pot do mape, kjer se nahaja program WebGrab+ Plus. Za urejanje priporo\u010dam program nano. Ko sta datoteki uspe\u0161no urejeni ju zaporedoma za\u017eenemo. Prva je datoteka <em>generate_config.py<\/em>, kateri lahko podamo dodatne argumente (te si lahko ogledate s stikalom -h), druga pa datoteka <em>parse.sh<\/em>, ki za\u017eene WebGrab+ Plus. Ta se lahko izvaja dlje \u010dasa, odvisno od nastavitev, ki ste jih podali v konfiguracijsko datoteko in \u0161tevila kanalov za katere prena\u0161ate spored.<\/p>\n<pre>$ python wg++\/generate_config.py\r\n$ bash wg++\/parse.sh<\/pre>\n<p>Po uspe\u0161no pridobljenem sporedu lahko nadaljujete. V kolikor uporabljate stre\u017enik in je ta dostopen v va\u0161em omre\u017eju, vam priporo\u010dam, da nekaj prostora namenite sporedu in ga postavite v mapo, ki je dostopna preko spleta. Tako boste v omre\u017eju lahko iz vseh naprav dostopali do sporeda preko spleta. V nasprotnem primeru, \u010de uporabljate ra\u010dunalnik, pa boste datoteko na nek na\u010din morali prenesti do naprave na kateri je name\u0161\u010den OpenELEC.<\/p>\n<p><strong>3.<\/strong> Da ne bomo po nepotrebnem izgubljali \u010dasa in vsak dan znova zaganjali omenjeni skripti, ju dodamo v sistem cron. Ta nam omogo\u010da poganjanje ukazov ob dolo\u010denem \u010dasu ali intervalu, vendar ima nekoliko zapletenej\u0161o zgradbo ukaza s katerim to dose\u017eemo. Tabelo cron ukazov uredimo z ukazom:<\/p>\n<pre>$ crontab -e<\/pre>\n<p>V primeru, da \u0161e nikoli niste urejali datoteke izberite vam najljub\u0161i urejevalnik kode ter na konec datoteke prilepite ukaza, katera uredite po svojih \u017eeljah (user obvezno zamenjajte z va\u0161im uporabni\u0161kim imenom):<\/p>\n<pre>0 0 *\/15 * * python \/home\/user\/wg++\/generate_config.py\r\n5 0 *\/2 * * bash \/home\/user\/wg++\/parse.sh &gt;\/dev\/null 2&gt;&amp;1<\/pre>\n<p>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\u0161im potrebam. S tem zaklju\u010dujemo konfiguriranje ra\u010dunalnika ali stre\u017enika za pridobivanje podatkov sporeda za kanale in nadaljujemo z urejanjem identifikacijskih nizov kanalov in nastavitvijo OpenELEC.<\/p>\n<p><strong>4.<\/strong> Na ra\u010dunalnik s katerim ste delali ali upravljali stre\u017enik prenesite prej omenjene <a href=\"https:\/\/github.com\/jodlajodla\/IPTV_EPG_Scripts\/archive\/master.zip\" target=\"_blank\">skripte<\/a>. Odpakirajte jih in uredite datoteko <em>update_playlist.py<\/em>, ki zahteva enake podatke za pridobitev naslovov kanalov in identifikacijskih nizov, kot v prej\u0161njem koraku <em>generate_config.py<\/em>. Za posodobitev seznama kanalov morate imeti \u017ee 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.<\/p>\n<pre>$ python update_playlist.py seznam-kanalov.m3u -o posodobljeni-kanali.m3u<\/pre>\n<p>Sedaj za\u017eenemo program IPTV Playlist Editor, ki mora biti razli\u010dice vsaj 1.1, ter uvozimo ravnokar ustvarjen seznam <em>posodobljeni-kanali.m3u<\/em>. Za izvoz kanalov s programom IPTV Playlist Editor in uvoz v TVHeadEnd, sledite <a title=\"Uvoz IPTV programov v TVHeadEnd na OpenELEC - jodlajodla.si\" href=\"http:\/\/jodlajodla.si\/blog\/uvoz-iptv-programov-v-tvheadend-na-openelec\/\">temu vodi\u010du<\/a>. Poleg nalaganja vseh izvo\u017eenih map v mapo TVHeadEnd na OpenELEC, potrebujemo \u0161e datoteko <em>tv_grab_sl<\/em>, ki smo jo prejeli v paketu skript. To morate urediti glede na to, kje se datoteka nahaja &#8211; na spletu ali na disku. Ko to dokon\u010date, jo je potrebno nalo\u017eiti v <strong>\/storage\/.xbmc\/addons\/service.multimedia.tvheadend\/bin\/<\/strong>. Predlagam da sedaj ponovno za\u017eenete napravo na kateri je OpenELEC, saj se zna zgoditi, da vam zaradi preobremenjenosti uvoza podatkov v TVHeadEnd vse skupaj zamrzne.<\/p>\n<p><strong>5.<\/strong> \u010caka nas le \u0161e uvoz sporeda v TVHeadEnd. Na ra\u010dunalniku odpremo spletni vmesnik TVHeadEnd, ki se nahaja na naslovu http:\/\/IP-naslov:9981 in odidemo v <strong>Configuration<\/strong> (Konfiguracija) &#8211; <strong>Channel\/EPG<\/strong> (Kanal\/EPG) &#8211; <strong>EPG Grabber<\/strong> (EPG pobiralnik). V nastavitvah izberemo modul XMLTV: Slovenia, interval pobiranja pa nastavite glede na nastavitev konfiguracijske datoteke za WebGrab+ Plus. Kliknemo le \u0161e na gumb <strong>Save configuration<\/strong> (Shrani konfiguracijo) in ponovno za\u017eenemo TVHeadEnd.<\/p>\n<pre>$ cd \/usr\/bin\/\r\n$ tvheadend.stop\r\n$ tvheadend.start<\/pre>\n<p>Sedaj bi EPG moral pri\u010deti delovati, predlagam pa, da si ogledate vse kanale v <strong>Configuration<\/strong> &#8211; <strong>Channel\/EPG<\/strong> &#8211; <strong>Channels<\/strong> (Kanali) in jim po mo\u017enosti ustrezno nastavite izvor EPG prejema oziroma XMLTV identifikacijski niz (to velja v primeru, da kak\u0161en kanal nima nastavljenega niza ali pa ga \u017eelite spremeniti).<\/p>\n<p>S postopkom smo uspe\u0161no zaklju\u010dili. Z EPG smo vklju\u010dili \u0161e eno odli\u010dno funkcijo, ki omogo\u010da snemanje programov glede na spored ali pa poljubno nastavimo od kdaj do kdaj \u017eelimo, da TVHeadEnd snema video pretok. Upam, da vam je uspelo urediti EPG po va\u0161ih \u017eeljah, verjamem pa, da je ta vodi\u010d nekoliko zahtevnej\u0161i, zato me v primeru te\u017eav lahko karkoli vpra\u0161ate pod komentarji. Sedaj pa \u010dimbolje izkoristite EPG, hkrati pa vam \u017eelim prijeten ogled IPTV kanalov!<\/p>\n<p><a href=\"http:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/tvheadend-snemanje-programov.jpg\" rel=\"lightbox[1874]\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1880\" alt=\"Snemanje programov s TVHeadEnd - jodlajodla.si\" src=\"http:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/tvheadend-snemanje-programov_mini.jpg\" width=\"600\" height=\"100\" srcset=\"https:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/tvheadend-snemanje-programov_mini.jpg 600w, https:\/\/jodlajodla.si\/blog\/wp-content\/uploads\/2014\/03\/tvheadend-snemanje-programov_mini-430x71.jpg 430w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u017eimo v ustrezno mapo na sistemu. Glede na to, da kdaj pri\u017egem televizijo v upanju, da bom brez [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[450,17,361,10,275],"tags":[1179,1182,1189,688,1181,1188,1184,1185,1186,971,1180,1178,1183,111,1187],"_links":{"self":[{"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/posts\/1874"}],"collection":[{"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/comments?post=1874"}],"version-history":[{"count":5,"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/posts\/1874\/revisions"}],"predecessor-version":[{"id":1884,"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/posts\/1874\/revisions\/1884"}],"wp:attachment":[{"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/media?parent=1874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/categories?post=1874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jodlajodla.si\/blog\/wp-json\/wp\/v2\/tags?post=1874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}