Jeśli twój dostawca IPTV przysłał ci login Xtream (serwer, nazwa użytkownika, hasło), a odtwarzacz, którego próbujesz użyć, przyjmuje tylko pojedynczy URL M3U — albo na odwrót — to nie jesteś w martwym punkcie. To są dwie wersje tego samego. Pod spodem login Xtream to po prostu uporządkowany sposób zapisania wszystkiego, co URL M3U i tak już zawiera.

Ten przewodnik tłumaczy konwersję w obie strony, na co zwracać uwagę i jak ją zrobić bez wpisywania swoich danych w miejscu, gdzie obcy może je odczytać. Konwerter Xtream ↔ M3U na tej stronie wykonuje konwersję w całości w przeglądarce — pod tą stroną nie ma żadnego serwerowego endpointa.

Trzy podpisane etykiety — serwer, nazwa użytkownika, hasło — na górze, z kolorowymi pulsami spływającymi do odpowiadających części wzoru URL get.php na dole.

URL M3U to stały szablon; login Xtream to po prostu trzy dane wstawione w jego miejsca.

Dlaczego ta konwersja w ogóle pojawia się jako temat

Ten sam dostawca prawie zawsze obsługuje obie formy, ale odtwarzacz, który akurat zainstalujesz, poprosi tylko o jedną z nich. Aplikacje nie zgadzają się w paru konkretnych punktach:

  • Starej szkoły odtwarzacze tylko-M3U (VLC, podstawowe aplikacje smart TV, dedykowane dekodery IPTV) przyjmują pojedynczy URL. Nie wiedzą o endpointach API Xtream; ściągają płaski plik listy i odtwarzają strumienie z niego.
  • Odtwarzacze świadome Xtreama (większość nowoczesnych aplikacji IPTV, w tym Klipa) wolą trójkę danych logowania. Używają jej, by pobrać listę kanałów na żywo, bibliotekę VOD, katalog seriali i EPG jako osobne dokumenty — ładniejsza kategoryzacja, dynamiczne odświeżanie, sekcje na żądanie, których eksport M3U nie reprezentuje.

Jeśli dostawca dał ci jedno, a odtwarzacz chce drugiego, konwersja to operacja na 30 sekund. Nie musisz prosić dostawcy o „drugi format” — i tak daje ci obie wersje, tylko w jednym kształcie.

Wzór z Xtream na M3U

Każdy dostawca Xtream używa tego samego szablonu URL. Gdy go znasz, możesz zbudować URL M3U z danych logowania ręcznie:

http://<server>:<port>/get.php?username=<USERNAME>&password=<PASSWORD>&type=m3u_plus&output=mpegts

Trzy konkretne przykłady przy danych server: http://server.example:8080, username: ABC, password: XYZ:

M3U:        http://server.example:8080/get.php?username=ABC&password=XYZ&type=m3u_plus&output=mpegts
EPG:        http://server.example:8080/xmltv.php?username=ABC&password=XYZ
player_api: http://server.example:8080/player_api.php?username=ABC&password=XYZ

Poszczególne części:

  • get.php to endpoint listy. Zawsze nazywany get.php — nie ma tu konwencji nazewniczych specyficznych dla dostawcy.
  • type=m3u_plus prosi o rozszerzony format M3U, który zawiera logo kanałów i tytuły grup. Zwykłe type=m3u też zadziała, ale daje uboższą listę; prawie zawsze chcesz m3u_plus.
  • output=mpegts prosi o strumienie w surowym MPEG-TS. Druga częsta opcja to output=hls, która daje URL-e HLS (.m3u8) — przydatne w przeglądarkach i na niektórych urządzeniach Apple, gorzej wspierane na dekoderach TV. Jeśli twój odtwarzacz grymasi, zmiana output to pierwsza rzecz do sprawdzenia.
  • xmltv.php to endpoint EPG. Te same dane logowania, osobny dokument. Większość odtwarzaczy przyjmuje ten URL w innym polu („URL EPG” lub „URL XMLTV”).
  • player_api.php to API JSON-owe. Odtwarzacze „mówiące Xtreamem natywnie” używają go, by pobrać drzewa live/VOD/seriali i logo kanałów.

Odwrotnie: wyciąganie danych z URL M3U

Mając URL M3U wyglądający jak we wzorze powyżej, możesz wyłuskać z niego trzy pola Xtream:

http://server.example:8080/get.php?username=ABC&password=XYZ&type=m3u_plus
                                            └────┘          └────┘
                                          username        password
  • Serwer to wszystko przed pierwszym ukośnikiem po hoście: http://server.example:8080. Obetnij /get.php i wszystko, co po nim następuje.
  • Nazwa użytkownika to wartość parametru username.
  • Hasło to wartość parametru password.

Jeśli któregoś parametru brak, URL nie jest w standardowym formacie Xtream. Niektórzy dostawcy dostarczają zwykłe URL-e M3U, które w ogóle nie mają w sobie danych logowania — zwykle statyczne lub tokenowe listy, w których sekretem jest sam URL. Z tych nie ma czego wyciągać; po prostu używasz URL-a tak jak jest w każdym odtwarzaczu obsługującym M3U.

Częste pułapki

Kilka detali regularnie podstawia ludziom nogę.

Kodowanie URL znaków specjalnych

Jeśli twoje hasło zawiera znaki w stylu &, =, +, #, % albo /, muszą być one zakodowane procentowo wewnątrz URL-a. Dosłowny & w środku hasła łamie parsowanie URL-a — odtwarzacz potraktuje wszystko po nim jako osobny parametr.

Większość paneli klienta robi to za ciebie. Jeśli składasz URL ręcznie, a hasło ma w sobie coś dziwnego, najpierw przepuść je przez dowolne narzędzie „URL encode”. Albo pomiń to w ogóle i zostaw robotę konwerterowi w przeglądarce.

Port

Dostawcy Xtream bardzo rzadko stoją na domyślnych portach 80 lub 443. Częste są 8080, 25461, 8000 albo jakiś losowy wysoki port. Port jest częścią URL-a serwera, nieopcjonalną. Jeśli widzisz http://server.example/get.php?… bez portu, to albo używa portu 80 (rzadkie), albo dostawca ma z przodu reverse proxy (też rzadkie). Najczęściej port jest po prostu zgubiony, bo ktoś przepisał URL ręcznie.

http kontra https

Większość dostawców Xtream serwuje po HTTP, nie po HTTPS. Forma https:// często zwraca błąd certyfikatu albo 404, bo serwer w ogóle nie podpina TLS-a. Jeśli dostałeś URL serwera z https://, a nie działa, spróbuj zwykłego http://. Skutek uboczny: twoje hasło leci wtedy bez szyfrowania; niestety taka jest norma u dostawców IPTV.

Własna ścieżka w URL-u M3U

Niektórzy dostawcy dostosowują routing — zamiast /get.php zobaczysz /playlist.m3u, /m3u.php, a nawet /index.php?type=m3u. Dane logowania w tych URL-ach dalej są tym, czego oczekuje API Xtream, więc konwerter wyciągnie je poprawnie, ale URL listy, którego używa dostawca, nie jest standardowy. Jeśli zbudujesz własny URL M3U ze standardową ścieżką /get.php, dostawca może go odrzucić. W takich przypadkach zostaw oryginalny URL, który dostałeś od dostawcy — nie próbuj go „naprawiać”.

Białe znaki na końcu danych logowania

Wklejanie z maila albo z postu na forum regularnie wciąga niewidoczną końcową spację, znak nowej linii albo twardą spację do nazwy użytkownika. API Xtream traktuje ABC i ABC jako różne nazwy użytkownika; dostaniesz odpowiedź „auth failed”, która wygląda identycznie jak złe hasło. Konwerter automatycznie obcina białe znaki z nazwy użytkownika i ostrzega, gdy musiał to zrobić. Jeśli składasz URL ręcznie, wklej każde pole najpierw do zwykłego edytora tekstu i wzrokowo sprawdź koniec.

Jak zrobić tę konwersję bezpiecznie

Kilka stron oferuje tę konwersję online. Większość jest w porządku; niektóre podejrzane. Ryzyko jest proste — dane logowania wklejone w formularz obcej osoby mogą zostać zalogowane, zebrane lub odtworzone później. Nawet uczciwy operator bez złych intencji ma logi dostępu.

Konwerter na tej stronie jest zbudowany tak, że nie może mieć logów dotyczących twoich danych, bo nie stoi za nim żaden serwerowy endpoint. Konwersja działa w całości w przeglądarce, w JavaScripcie. Dane logowania żyją w polach formularza DOM aż do zamknięcia strony; nie są w pasku adresu, nie są w localStorage i nigdzie nie są wysyłane. Jeśli otworzysz zakładkę „Sieć” w narzędziach przeglądarki podczas konwersji, zobaczysz dokładnie zero wychodzących żądań niosących dane logowania.

Takiego standardu powinieneś oczekiwać od każdego narzędzia, które prosi cię o dane do IPTV. Jeśli interfejs konwertera wysyła żądanie sieciowe po kliknięciu „konwertuj”, to z definicji przesłał twoje dane gdzieś dalej.

Po konwersji: zweryfikuj przed importem

Pomyślnie zbudowany URL nie oznacza działającego URL-a. Obie strony konwersji to deterministyczne transformacje tekstu — są poprawne jako transformacje, ale nie powiedzą ci, czy dane są ważne, czy subskrypcja jest aktualna i czy serwer jest osiągalny.

Dwa tanie sprawdzenia, zanim zdecydujesz się importować:

  • Dla URL-i M3U wklej wynik do testera listy M3U. Pobiera listę, parsuje ją i sprawdza pierwsze 100 strumieni. Cokolwiek zielonego oznacza, że URL jest dobry; cokolwiek czerwonego mówi, jaki konkretnie tryb awarii (odpowiedź HTML, 404, martwe strumienie).
  • Dla danych Xtream wklej trójkę do weryfikatora danych Xtream. Woła API po stronie serwera, zwraca status uwierzytelnienia, datę wygaśnięcia, limity połączeń i liczby kanałów. Odróżnia „złe hasło” od „wygasłej subskrypcji” i od „serwera nieosiągalnego”.

Uruchomienie jednego z nich przed zainstalowaniem odtwarzacza oszczędza jakieś dwadzieścia minut debugowania, gdy coś jest nie tak z samymi danymi.

Gdy URL M3U nie zawiera danych logowania

Niewielka część URL-i M3U, na które trafisz, w ogóle nie jest formatem Xtream. To płaskie listy hostowane na statycznym serwerze albo URL-e z tokenem, w których sekret zaszyto w ścieżce, a nie w parametrach:

https://server.example/playlists/9c1f4a8b3e/stream.m3u8

Nie ma czego wyciągać — sam URL jest danymi. Działa to w odtwarzaczach obsługujących M3U dokładnie tak, jak jest. Te URL-e nie mają reprezentacji w Xtream, bo nie wygenerował ich panel Xtream Codes; pochodzą z innego (starszego) stacka IPTV. Jeśli dostawca dał ci tylko to, a twój odtwarzacz upiera się przy danych Xtream, to dostawca po prostu nie ma loginu Xtream, który mógłby ci dać. Zapytaj go albo wybierz odtwarzacz, który przyjmuje URL-e M3U.

Jak to wygląda w Klipa

Klipa przyjmuje obie formy w tej samej bibliotece, obok siebie. Możesz dodać URL M3U i login Xtream od tego samego dostawcy jako osobne źródła; aplikacja używa tego, które akurat działa. Jeśli eksport M3U pewnego dnia zacznie zwracać HTML, wywołanie API Xtream utrzyma twoją listę kanałów przy życiu aż do następnego odświeżenia — i na odwrót.

To prosta odpowiedź na pytanie „którego formatu powinienem użyć” — obu. Jeśli wybierasz tylko jeden, porównanie Xtream z M3U omawia, kiedy postawić na który.