Loading...
IPTV z EPG – Jak Skonfigurować Przewodnik TV 2026

IPTV z EPG – Jak Skonfigurować Przewodnik TV 2026

Masz działające IPTV, kanały lecą, obraz ostry — ale włączasz przewodnik programowy i widzisz pustkę. Żadnych nazw programów, żadnych godzin, nic. Klasyka. Konfiguracja IPTV z EPG to jeden z tych kroków, które każdy pomija przy pierwszym setupie, a potem się dziwi dlaczego odtwarzacz wygląda jak lista kanałów z lat 90.

EPG, czyli Electronic Program Guide, to osobna warstwa danych nałożona na Twoją playlistę M3U. Nie jest częścią strumienia wideo. To oddzielny plik XML, który odtwarzacz pobiera, parsuje i przypisuje do kanałów. I właśnie na tym etapie — przypisywaniu — większość ludzi się wykłada. Ten poradnik przeprowadzi Cię przez całą konfigurację IPTV z EPG krok po kroku, od podstaw po zaawansowane triki z cronem i merge'owaniem źródeł.

Co to jest EPG i dlaczego jest niezbędne w IPTV

Jak działa Electronic Program Guide

EPG to w gruncie rzeczy baza danych z rozkładem jazdy telewizji. Zawiera nazwę programu, opis, czas rozpoczęcia i zakończenia, kategorię, a czasem nawet okładkę. Twój odtwarzacz IPTV pobiera te dane z podanego URL-a i nakłada je na listę kanałów.

Cały mechanizm opiera się na jednym kluczowym połączeniu: identyfikator kanału w pliku EPG musi pasować do identyfikatora w Twojej playliście M3U. Jeśli playlist mówi tvg-id="TVP1.pl", to plik EPG musi mieć wpis <channel id="TVP1.pl">. Gdy te dwa się zgadzają — masz program TV. Gdy nie — masz pustą kratkę.

Format XMLTV — standard EPG

XMLTV to otwarty format pliku, który stał się de facto standardem dla danych EPG. Plik ma rozszerzenie .xml lub skompresowane .xml.gz i zawiera dwie sekcje: definicje kanałów (<channel>) i programy (<programme>). Typowy plik XMLTV dla 500 kanałów z danymi na 7 dni waży 30-80 MB nieskompresowany.

Struktura jest prosta. Każdy kanał ma unikalne id i nazwę wyświetlaną. Każdy program ma start, stop, channel (odnoszący się do id kanału) i title. Atrybuty czasowe zawierają offset strefy czasowej, np. 20260317200000 +0100. I to właśnie ten offset będzie Ci sprawiał problemy — ale o tym za chwilę.

Różnica między EPG wbudowanym a zewnętrznym

Są dwa sposoby dostarczania EPG. Pierwszy: Twój dostawca IPTV wbudowuje URL EPG bezpośrednio w nagłówku pliku M3U, w atrybucie url-tvg. Odtwarzacz automatycznie pobiera dane i nie musisz nic konfigurować. Drugi: dodajesz zewnętrzne źródło EPG ręcznie w ustawieniach odtwarzacza.

Wbudowane EPG jest wygodne, ale masz zerową kontrolę. Jeśli dostawca zmieni URL lub jego EPG nie pokrywa wszystkich kanałów — zostajesz z niczym. Zewnętrzne źródło daje Ci pełną kontrolę: wybierasz dostawcę danych, ustawiasz interwał odświeżania, możesz nawet łączyć kilka źródeł. W praktyce najlepiej mieć jedno i drugie.

Jak dodać EPG do odtwarzacza IPTV — krok po kroku

Konfiguracja EPG w TiviMate

TiviMate to moim zdaniem najlepszy odtwarzacz IPTV na Androida, i konfiguracja EPG tutaj jest bezbolesna. Otwierasz aplikację, idziesz do Settings → EPG → Add source. Wklejasz URL do pliku XMLTV. Format akceptowany: http:// lub https:// link do .xml lub .xml.gz.

Po dodaniu źródła TiviMate zaczyna pobieranie. Dla pliku 50 MB na łączu 100 Mbps to kilkanaście sekund. W Settings → EPG → Update interval ustaw 12 lub 24 godziny — nie rób co godzinę, bo dostawca EPG może Ci zablokować IP. TiviMate pozwala dodać kilka źródeł EPG jednocześnie, co jest złotem jeśli masz kanały z różnych krajów.

Ważny detal: po dodaniu EPG musisz poczekać aż dane się załadują, potem wejść w Settings → EPG → Assign EPG source i upewnić się, że kanały mają przypisane prawidłowe programy. TiviMate robi auto-matching po nazwie kanału, ale nie zawsze trafia.

EPG w Perfect Player

Perfect Player to klasyk na Android TV. Idziesz do Settings (ikona koła zębatego) → General → EPG URL. Wklejasz link do pliku XMLTV i zatwierdzasz. Program pobierze dane i spróbuje automatycznie zmapować kanały.

Jeden problem z Perfect Player: nie radzi sobie dobrze z dużymi plikami EPG. Przy plikach powyżej 30 MB na urządzeniach z 1-2 GB RAM aplikacja potrafi się zawieszać lub ładować dane przez kilka minut. Rozwiązanie: użyj skompresowanego pliku .xml.gz zamiast czystego XML. Perfect Player obsługuje gzip. Jeśli to nie pomaga — potrzebujesz mniejszego źródła EPG z mniejszą liczbą kanałów.

EPG w Kodi (PVR IPTV Simple Client)

Kodi wymaga addonu PVR IPTV Simple Client. Instalujesz go z repozytorium Kodi (Add-ons → Install from repository → PVR clients → PVR IPTV Simple Client). Po instalacji wchodzisz w Configure → EPG Settings.

Tu masz dwie opcje: XMLTV URL (link do zdalnego pliku) lub Local path (plik na dysku). Dla zdalnego URL wklejasz link i ustawiasz EPG update interval na 720 minut (12h). Dla lokalnego pliku podajesz ścieżkę, np. /storage/epg.xml.gz na LibreELEC. Po zapisaniu restartuj Kodi — EPG załaduje się przy starcie PVR.

W Kodi 21 (Omega) i nowszym możesz też ustawić EPG timeshift bezpośrednio w ustawieniach Simple Client — przydatne gdy czasy programów są przesunięte o godzinę czy dwie.

EPG w VLC i GSE Smart IPTV

VLC sam z siebie nie obsługuje EPG z XMLTV. Możesz otworzyć playlistę M3U i oglądać kanały, ale przewodnika programowego nie zobaczysz. Jeśli Twoja playlist M3U ma wbudowane EPG w strumieniu (format EIT w transport stream), VLC wyświetli aktualne informacje o programie — ale to zależy od dostawcy.

GSE Smart IPTV na iOS/Android: Settings → EPG/Programme → Add EPG source → Remote EPG → URL. Wklejasz link XMLTV. Odświeżanie ustawiasz w Auto-update EPG. GSE ma limit — obsługuje jedno źródło EPG na raz, więc jeśli potrzebujesz danych z kilku źródeł, musisz je wcześniej zmerge'ować w jeden plik.

EPG na Smart TV (Samsung, LG)

Na Samsung Tizen używasz najczęściej Duplex IPTV lub IPTV Smarters Pro. W Duplex: Settings → EPG URL — wklejasz link. W Smarters: EPG ładuje się automatycznie z Xtream Codes API, więc jeśli dostawca ma Xtream — nie musisz nic robić.

Na LG webOS opcje to Smart IPTV (siptv.eu) albo IPTV Smarters. W Smart IPTV ustawiasz EPG przez panel webowy na siptv.eu/mylist — tam wklejasz URL do XMLTV. Ograniczenie: Smart IPTV pobiera EPG raz przy uruchomieniu i nie odświeża automatycznie. Musisz zrestartować aplikację żeby pobrać nowe dane.

Źródła EPG — skąd pobrać dane programu TV

EPG od dostawcy IPTV (wbudowane w playlistę M3U)

Otwórz swoją playlistę M3U w edytorze tekstu i sprawdź pierwszą linię. Szukasz atrybutu url-tvg:

#EXTM3U url-tvg="http://example.com/epg.xml.gz" refresh="3600"

Jeśli ten atrybut jest — Twój dostawca dostarcza EPG. Skopiuj ten URL i otwórz w przeglądarce. Powinien pobrać się plik XML lub XML.GZ. Jeśli zwraca błąd 403 lub 404 — URL prawdopodobnie wygasł i musisz poprosić dostawcę o aktualny link. Wiele odtwarzaczy automatycznie korzysta z tego URL, ale warto go też dodać ręcznie jako backup.

Darmowe publiczne źródła XMLTV

Repozytorium iptv-org/epg na GitHubie to największe community-driven źródło EPG na świecie. Obsługuje kanały z ponad 60 krajów, w tym Polskę. Dane generowane są automatycznie z oficjalnych stron TV i aktualizowane codziennie. URL do pliku EPG dla konkretnego kraju znajdziesz w ich dokumentacji — zazwyczaj wygląda jak https://iptv-org.github.io/epg/guides/pl/....

Jakość darmowych źródeł jest zmienna. Niektóre kanały mają pełne dane na 7 dni do przodu, inne tylko na 2-3 dni. Kanały premium (np. Canal+, HBO) często nie są pokryte, bo ich strony wymagają logowania. Ale dla kanałów otwartych — TVP, Polsat, TVN i podobnych — pokrycie jest przyzwoite.

Generowanie własnego EPG z WebGrab+Plus

WebGrab+Plus to darmowe narzędzie, które scrapuje programy TV bezpośrednio ze stron internetowych nadawców. Instalujesz na Windows, Linux lub w Dockerze. Konfigurujesz plik WebGrab++.config.xml z listą kanałów i stron-źródeł. Odpalasz — i masz świeży plik XMLTV.

Dla polskich kanałów WebGrab+Plus obsługuje źródła takie jak telemagazyn.pl i programtv.onet.pl. Konfiguracja jest trochę żmudna — musisz ręcznie dobrać site-ini (pliki z definicjami scrapowania) do każdego kanału. Ale efekt jest tego wart: masz EPG dokładnie dla tych kanałów, które oglądasz, bez zbędnego balastu. Czas generowania dla 50 kanałów to około 10-15 minut.

EPG dla polskich kanałów — dostępne opcje

Polskie kanały telewizyjne mają kilka dedykowanych źródeł EPG. Community na GitHubie utrzymuje repozytoria specjalnie dla polskiego rynku — szukaj frazą "epg poland xmltv". Pokrycie obejmuje zazwyczaj TVP 1/2/3, TVP Info, TVP Sport, Polsat i kanały tematyczne, TVN i rodzinę, TV Puls, TV4/TV6, Eska TV, Nowa TV.

Kanały kodowane (Canal+, Polsat Sport Premium, HBO) są trudniejsze — dane programowe wymagają parsowania zamkniętych API. Niektóre community-driven skrypty to robią, ale linki się zmieniają. Jeśli Twoja konfiguracja IPTV z EPG musi pokrywać kanały premium, najlepszym rozwiązaniem jest łączenie kilku źródeł — jedno publiczne dla kanałów FTA, drugie od dostawcy IPTV dla kanałów premium.

Mapowanie kanałów — klucz do działającego EPG

Czym jest tvg-id i tvg-name w pliku M3U

Każda linia kanału w pliku M3U wygląda mniej więcej tak:

#EXTINF:-1 tvg-id="TVP1.pl" tvg-name="TVP 1" tvg-logo="http://logo.url/tvp1.png" group-title="Polskie",TVP 1
http://stream.url/tvp1

Atrybut tvg-id to klucz do mapowania EPG. Odtwarzacz bierze tę wartość, szuka w pliku XMLTV wpisu <channel id="TVP1.pl"> i jeśli znajdzie — przypisuje programy do tego kanału. Atrybut tvg-name to fallback — niektóre odtwarzacze próbują matchować po nazwie gdy tvg-id nie pasuje.

I tu jest pułapka. Nie ma jednego standardu nazewnictwa. Jedno źródło EPG używa TVP1.pl, inne TVP1, jeszcze inne tvp-1-poland. Twoja playlista może mieć tvg-id="TVP.1". Żadne z nich do siebie nie pasuje. I dlatego EPG nie działa.

Jak ręcznie przypisać EPG do kanału

Pobierz plik XMLTV i otwórz go w edytorze tekstu (VSCode, Notepad++ — nie w Wordzie). Szukaj sekcji <channel> na początku pliku. Znajdziesz listę jak ta:

<channel id="TVP1.pl"> <display-name>TVP 1</display-name>
</channel>
<channel id="Polsat.pl"> <display-name>Polsat</display-name>
</channel>

Teraz otwierasz swoją playlistę M3U i poprawiasz atrybuty tvg-id żeby pasowały do tych identyfikatorów. Jeśli w XMLTV jest id="TVP1.pl", to w M3U musisz mieć tvg-id="TVP1.pl". Dokładnie. Wielkość liter ma znaczenie.

Narzędzia do automatycznego mapowania EPG

Ręczna edycja 500 kanałów to koszmar. Na szczęście istnieją narzędzia. m3u4u.com to webowy edytor playlist M3U, który pozwala importować playlistę, dodać źródło EPG i automatycznie matchować kanały po nazwie. Ma bazę znanych tvg-id i robi to sensownie dla popularnych kanałów.

Xtream Editor (xtream-editor.com) robi to samo, ale dla Xtream Codes API — importujesz dane logowania i edytujesz mapowanie w przeglądarce. TiviMate na Androidzie ma wbudowane ręczne przypisywanie: przytrzymujesz kanał → EPG Source → Select EPG channel → wybierasz z listy dostępnych kanałów EPG. Żmudne ale skuteczne.

Edycja pliku M3U — dodawanie atrybutów EPG

Jeśli Twoja playlista nie ma atrybutów tvg-id, musisz je dodać ręcznie. Otwierasz plik M3U i do każdej linii #EXTINF dopisujesz odpowiednie atrybuty. Przed edycją zrób kopię zapasową pliku.

Dodajesz też nagłówek z URL-em EPG na samą górę pliku:

#EXTM3U url-tvg="http://twoj-url-epg.com/epg.xml.gz"

Jeśli masz kilkaset kanałów, użyj skryptu. Prosty Python albo nawet sed w bashu wystarczy żeby zrobić bulk replace. Np. sed -i 's/tvg-id=""/tvg-id="TVP1.pl"/' playlist.m3u dla jednego kanału. Dla wielu — przygotuj plik CSV z mapowaniem (stara_nazwa → tvg-id) i napisz skrypt.

Rozwiązywanie problemów z EPG w IPTV

EPG się nie ładuje — najczęstsze przyczyny

Punkt pierwszy: sprawdź czy URL EPG w ogóle działa. Otwórz terminal i odpal:

curl -I "http://twoj-url-epg.com/epg.xml.gz"

Szukasz HTTP/1.1 200 OK i Content-Type zawierającego xml lub application/gzip. Jeśli dostajesz 403 — serwer blokuje Twoje IP (za częste requesty?). Jeśli 404 — URL jest nieaktualny. Jeśli timeout — serwer EPG leży.

Punkt drugi: rozmiar pliku. Sprawdź nagłówek Content-Length w odpowiedzi curl. Jeśli plik waży ponad 100 MB, a masz wolne łącze lub urządzenie z 1 GB RAM — odtwarzacz może się wykładać przy parsowaniu. Rozwiązanie: znajdź mniejsze źródło EPG albo przefiltruj plik żeby zostawić tylko potrzebne kanały.

EPG pokazuje złe programy na kanałach

To problem mapowania. Kanał "TVP 1 HD" w Twojej playliście dostał przypisane EPG z "TVP 1 International" bo tvg-id się nie zgadzają. Otwórz plik XMLTV, znajdź prawidłowe ID dla kanału, popraw w pliku M3U lub w ustawieniach mapowania w odtwarzaczu.

Inny przypadek: kanały HD i SD mają ten sam program ale różne tvg-id. Np. TVP1HD.pl vs TVP1.pl. W pliku XMLTV może być wpis tylko dla jednego z nich. Rozwiązanie: przypisz oba kanały (HD i SD) do tego samego tvg-id w playliście. EPG będzie identyczne, ale przynajmniej będzie.

EPG przestaje się aktualizować

Najczęściej: dostawca zmienił URL EPG bez powiadomienia. Sprawdź stary URL curlem. Jeśli nie działa — musisz pozyskać nowy. Dobrą praktyką jest ustawienie prostego monitoringu. Na Linuxie możesz dodać do crona:

0 6 * * * curl -sf "http://twoj-url-epg.com/epg.xml.gz" -o /dev/null || echo "EPG URL broken" | mail -s "EPG Alert" [email protected]

Drugie: cache odtwarzacza. TiviMate i Kodi trzymają lokalną kopię EPG. Jeśli dane się nie odświeżają mimo działającego URL — wyczyść cache EPG. W TiviMate: Settings → EPG → Clear EPG cache. W Kodi: usuń plik epg.db z katalogu addonu PVR.

Przesunięcie czasowe w EPG — jak naprawić timezone

Widzisz programy przesunięte o godzinę lub dwie? Klasyczny problem timezone. Polska jest w strefie CET (UTC+1) zimą i CEST (UTC+2) latem. Jeśli źródło EPG podaje czasy w UTC bez offsetu, a Twój odtwarzacz nie kompensuje — programy będą przesunięte.

Rozwiązanie: w odtwarzaczu szukaj opcji EPG timeshift lub EPG time offset. Ustaw +1 zimą, +2 latem (dla Polski). W TiviMate: Settings → EPG → EPG timeshift. W Kodi PVR Simple Client: Configure → EPG Settings → EPG time shift. Zmiana czasu letni/zimowy oznacza, że musisz to ręcznie poprawić dwa razy w roku — chyba że źródło EPG poprawnie używa offsetu w znacznikach czasowych.

Weryfikacja: otwórz plik XMLTV i sprawdź atrybut start w dowolnym programie. Powinien wyglądać jak 20260317200000 +0100. Jeśli nie ma offsetu (np. 20260317200000) — źródło podaje czas w UTC i odtwarzacz musi sam dodać offset.

EPG działa tylko na części kanałów

To znaczy że mapowanie działa dla niektórych kanałów, a dla innych — nie. Powody: 1) źródło EPG nie pokrywa wszystkich Twoich kanałów, 2) tvg-id nie pasuje dla brakujących kanałów, 3) masz kanały z różnych krajów i jedno źródło EPG nie wystarczy.

Diagnostyka: wyeksportuj listę kanałów bez EPG (TiviMate pokazuje to wizualnie — kanały bez programu mają pustą kratkę). Porównaj ich tvg-id z zawartością pliku XMLTV. Jeśli kanału w ogóle nie ma w XMLTV — potrzebujesz dodatkowego źródła EPG. Jeśli jest ale tvg-id się różni — popraw mapowanie. Konfiguracja IPTV z EPG z wielu źródeł jednocześnie rozwiązuje większość takich przypadków.

Zaawansowana konfiguracja EPG

Łączenie wielu źródeł EPG

Masz kanały polskie, niemieckie i angielskie? Jedno źródło EPG nie pokryje wszystkich. Potrzebujesz merge'u. Są dwa podejścia: odtwarzacz to robi sam (TiviMate pozwala dodać kilka źródeł i sam je łączy) albo merge'ujesz pliki XMLTV przed załadowaniem.

Do merge'owania XMLTV na Linuxie używasz narzędzia tv_merge z pakietu xmltv-utils:

tv_merge -i epg_polska.xml -m epg_deutschland.xml -o merged_epg.xml

Alternatywa: skrypt Pythona z biblioteką lxml, który łączy sekcje <channel> i <programme> z wielu plików. Przy merge'u uważaj na duplikaty kanałów — jeśli dwa źródła mają ten sam channel id, programy się nałożą.

EPG w Xtream Codes API vs XMLTV

Jeśli Twój dostawca IPTV daje dane logowania Xtream Codes (serwer, username, password), to EPG przychodzi automatycznie przez API. Odtwarzacz odpytuje endpoint /xmltv.php?username=X&password=Y i dostaje gotowy plik XMLTV z mapowaniem dopasowanym do playlisty. Zero konfiguracji.

Różnica: w Xtream Codes API mapowanie jest już zrobione po stronie serwera. Twoja playlista i EPG są zsynchronizowane, bo pochodzą z tego samego systemu. Przy ręcznym XMLTV musisz sam dopasowywać tvg-id. Dlatego IPTV z EPG przez Xtream Codes jest prostsze — ale też bardziej zależne od dostawcy. Jeśli jego serwer EPG padnie, nie masz planu B. Z ręcznym XMLTV masz pełną kontrolę i możesz podmienić źródło w minutę.

Automatyzacja aktualizacji EPG przez cron

Na Linuxie (Raspberry Pi, VPS, NAS) możesz ustawić automatyczne pobieranie EPG przez cron. Dodaj do crontab (crontab -e):

0 4 * * * wget -q -O /home/user/epg/epg.xml.gz "http://url-do-epg/epg.xml.gz" 2>/dev/null

To pobiera nowy plik EPG codziennie o 4:00 rano. Dodaj timeout żeby nie wisieć na martwym URL-u:

0 4 * * * wget -q --timeout=120 -O /tmp/epg_new.xml.gz "URL" && mv /tmp/epg_new.xml.gz /home/user/epg/epg.xml.gz

Trik z /tmp i mv jest kluczowy: jeśli pobieranie się nie powiedzie, stary plik EPG zostaje nienaruszony. Bez tego mógłbyś nadpisać dobry plik pusty lub uszkodzonym. Odtwarzacz (np. Kodi z lokalną ścieżką do EPG) automatycznie załaduje nowy plik przy kolejnym odświeżeniu.

Kompresja i optymalizacja plików XMLTV

Duże pliki XMLTV (100+ MB) to problem na urządzeniach z małą ilością RAM. Android TV Box z 1 GB RAM potrafi crashować przy parsowaniu takiego pliku. Rozwiązanie: kompresja gzip i filtrowanie.

Kompresja:

gzip -9 epg.xml

Plik 80 MB po kompresji schodzi do 8-12 MB. Większość odtwarzaczy obsługuje format .xml.gz natywnie.

Filtrowanie — usuwasz kanały, których nie oglądasz. Skrypt z xmltv-utils:

tv_grep --channel-id "TVP1.pl" --channel-id "Polsat.pl" --channel-id "TVN.pl" full_epg.xml > filtered_epg.xml

Z 500 kanałów zostawiasz 50 — plik z 80 MB schodzi do 8 MB. Parsowanie trwa sekundy zamiast minut. I Twój tani Android box przestaje się dławić.

FAQ — Najczęściej zadawane pytania o EPG w IPTV

Czy EPG jest darmowe?

Sam format XMLTV jest otwarty i darmowy. Na GitHubie znajdziesz community-driven repozytoria z EPG dla dziesiątek krajów — zero kosztów. Wielu dostawców IPTV dołącza EPG w cenie usługi. WebGrab+Plus pozwala generować własne EPG za darmo, scrapując dane z oficjalnych stron nadawców. Jedyne płatne opcje to premium źródła EPG z rozszerzonym pokryciem kanałów kodowanych.

Jak często należy aktualizować EPG?

Optymalnie co 12-24 godziny. Większość źródeł EPG dostarcza dane na 3-7 dni do przodu, więc codzienne odświeżanie w zupełności wystarczy. Nie ustawiaj interwału na co godzinę — obciążasz serwer źródłowy niepotrzebnie i ryzykujesz blokadę IP. Jeśli używasz crona, jedno pobranie dziennie o 4:00 rano to standard.

Dlaczego EPG pokazuje programy z innego dnia?

W 99% przypadków to problem ze strefą czasową. Sprawdź ustawienia timezone w odtwarzaczu i użyj opcji EPG timeshift. Dla Polski ustaw +1 (CET zimą) lub +2 (CEST latem). W pliku XMLTV weryfikuj atrybut start — powinien kończyć się offsetem, np. +0100. Jeśli offsetu brak, źródło podaje czas UTC i odtwarzacz musi sam przeliczać.

Czy mogę używać EPG bez pliku M3U?

Nie w praktyce. EPG to dane o programach — nazwy, czasy, opisy. Ale bez playlisty (M3U lub Xtream Codes) odtwarzacz nie wie, na które kanały te dane nałożyć. EPG potrzebuje playlisty jako bazy do mapowania. Sam plik XMLTV bez playlisty to po prostu rozkład jazdy bez telewizora.

Jak sprawdzić czy mój URL EPG działa?

Najszybciej: otwórz URL w przeglądarce — powinien zacząć pobierać plik .xml lub .xml.gz. Dokładniej: w terminalu wpisz curl -I "URL_EPG" i sprawdź czy odpowiedź to 200 OK. Jeśli dostajesz 403 — serwer blokuje dostęp. Jeśli 404 — URL jest nieaktualny. Możesz też pobrać plik: curl -o test_epg.xml.gz "URL_EPG" i otworzyć go w edytorze żeby sprawdzić czy zawiera poprawny XML.

EPG działa w TiviMate ale nie w Perfect Player — dlaczego?

Różne odtwarzacze różnie parsują XMLTV. Perfect Player ma problemy z dużymi plikami — powyżej 30 MB potrafi zawieszać się na urządzeniach z małą ilością RAM. Spróbuj użyć skompresowanego formatu .xml.gz zamiast czystego .xml. Sprawdź też czy oba odtwarzacze mają ustawiony ten sam tvg-id do mapowania — TiviMate potrafi matchować po nazwie kanału, Perfect Player jest bardziej rygorystyczny.

Jak dodać EPG dla kanałów zagranicznych?

Użyj kilku źródeł EPG. W TiviMate wchodzisz w Settings → EPG → Add source i dodajesz osobne URL-e dla każdego regionu. Repozytorium iptv-org/epg na GitHubie obsługuje kanały z ponad 60 krajów. Jeśli Twój odtwarzacz nie obsługuje wielu źródeł — zmerge'uj pliki XMLTV w jeden za pomocą tv_merge i podaj odtwarzaczowi jeden połączony plik.