• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 2 Hlas(ů) - 3.5 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Návod - Jak sledovat plnou O2 TV na síti
#1
Lightbulb 
Multicast, Unicast, Wireshark, UDP Proxy aneb chytáme O2 TV na PC

Úvod
Tenhle návod jsem již sepisoval na jedno fórum, ale říkal jsem si, když je to moje práce, proč to nehodit i sem, třeba se někdo něco přiučí. V tomto návodu se naučíme jak použít Wireshark pro odchycení streamu, který se přehrává v síti, rozdíl mezi TCP a UDP, jak přemostit Multicast vysílání na Unicast. Dozvíte se tedy, odkud se berou adresy typu http://10.0.0.1:8000/udp/239.232.6.24:8624 a co tedy znamenají. 

Cílem je pochopení co se vlastně děje na pozadí a poté tyto nástroje prakticky uplatníme pro sledování O2 TV (pro uživatele pevného O2 internetu a O2 TV, nikoliv O2 TV Air/Go) v síti na počítačích s Kodi, VLC.. 

Takže sedím u O2 TV, která je připojená do modemu/routeru a chtěl bych se na ty samé programy dívat i jinde, ovšem ve stejné kvalitě (1080i) a ne v té uškrcené 720p verzi co nabízí O2 TV Go.

Teorie
K zákazníkovi IPTV se může stream doručit dvěma způsoby. Buď pomocí Unicastu(TCP) anebo Multicastu(UDP).

Unicast je tzv. jednosměrné vysílání a setkáte se s ním kdykoliv když se kouknete na nějaké internetové video, nebo stahujete nějaký soubor, nebo i webovou stránku. Klient náváže spojení se serverem a ten mu pošle požadované soubory. Pokud budeme takto přenášet televizní stream, znamená to, že pokud se na můj server připojí 5 klientů a budou se chtít dívat na Eurosport o datovém toku 10Mbps, budu potřebovat 50Mbps upload. S narůstajícím počtem klientů výrazně narůstá i zátěž. (Takže např. klasický stream z iVysílání, nebo klasicky stahované video z uloz.to, nebo veškeré streamy co jste našli odjinud)

Multicast je vícesměrové vysílání. Jedná se o efektivní zasílání dat v jedné síti k více příjemcům najednou SOUČASNĚ. Můžete vysílat jakákoliv data, ale nejvíce se to hodí pro lineární televizní vysílání, protože pokud otevřu toto vysílání, nezačne se mi dané video přehrávat od začátku, ale všem klientům v jeden čas proudí ta samá data. Pro živé vysílání to nepředstavuje žádný problém. Zátěž nevzrůstá s narůstajícím počtem klientů, v síti stále proudí samá data pro všechny a klient se na ně jen napojí. Toto vícesměrové vysílání jde realizovat pouze v lokální síti. Nemůžete takto vysílat do "Internetu". Ideálně se to tedy hodí pro menší poskytovatele internetu, kteří mohou do své sítě pro všechny klienty pustit i IPTV. Ano, sice máte doma svůj router a to zatím je už "Internet", ale můžete být stále ještě v jedné menší síti, kde na konci je poskytovatel a až za tím je Internet -> veřejná IP.

V případě O2 se toto řeší dvěma linkami. Mám zapojený modem od O2 k telefonní zásuvce a do něj proudí 2 sítě. Jedna už je přímo "Internet", takže můj router už dostává přímo veřejnou IP adresu. A poté je tam i druhá vnitřní síť, ve které můj router bude mít adresu typu 192.168.. nebo 10.0.0..., v podstatě na konci není "Internet" ale další router, který v tomto případě pomocí Multicastu distribuuje IPTV. Na modemu od O2 je to poznat na jednotlivých ethernetových portech vzadu. Ve webové konfiguraci si můžete nastavit, zda-li všechny porty budou odkazovat na internet nebo jestli budou sloužit nějaké pro O2 TV. Zapojíte li do těchto portů počítač, nepřipojíte se k internetu ale do sítě O2 TV.

Pro multicastové vysílání v lokálních sítí je vyhrazen blok IP adres 224.0.0.0-239.255.255.255. Samozřejmě si to poskytovatel může posílat kam chce, ale to by se pak neřídil dle IPv4 specifikace. S tímto blokem adres se určitě setkáváte při hledání streamů :) Pokud bychom byli tedy ve stejné síti kde je multicast vysílání, ve VLC bychom otevřeli stream s adresou např.: udp://239.232.0.1:4000. (Všimněte si , nezačíná na http:// - tedy TCP protokol ale na UDP - Multicast)

Chytáme telku
Takže nyní v mém případě O2 vím, kde se dané vysílání nachází a v nastavení routeru nastavuji porty 2 a 3 pro O2 TV síť. Do jednoho zapojím O2 TV a do druhého zapojím klasický notebook. V síťovém nastavení O2 TV set-top boxu se kouknu jaké nastavení IP adres tento box dostává a nastavím to stejně i na notebooku. (ano stejnou IP adresu budou mít 2 přístroje. V případě multicastu tahle kolize nevadí. Jinou IP adresu v tomto případě nastavit nemohu, protože mi O2 přidělilo jednu na jeden set-top-box)

   
Obrázek centrum nastavení síťových připojení pro síť O2 TV. V tomto případě nevadilo, že jsem nastavil IP adresu identickou s tou, kterou má zrovna set-top box. Pro sledování sítě to nijak nevadilo.

Ve vašem případě může váš poskytovatel provozovat IPTV v jedné síti, takže váš počítač už bude rovnou připojený do sítě, kde je multicast vysílání. Mám teď 2 možnosti. Buď ten vyhrazený UDP blok IP adres proskenuji např. IPTV Scannerem, což ale s s počtem možných portů může trvat dlouho. Anebo v tomto návodu použijeme Wireshark a pokusíme se dané IP adresy jednotlivých kanálů zjistit sami :)

Wireshark je software, který sleduje síťový provoz ve vaší síti a díky němu můžete zjistit co vše ve vaší síti proudí za data. Ideálně tedy uvidíme, jaké IP adresy a porty otvírá náš O2 TV set-top box. 

Nainstalujte si tedy Wireshark a po spuštění vidíme následující okno:
   

Vlevo pod textovým polem vyberete na jakém síťovém adaptéru chcete sledovat komunikaci (Je to Wifi karta, Ethernet,..). Já tedy vybírám můj USB Ethernet dongle. Nahoře můžete rovnou zadat filtr, který bude vypisovat pouze komunikaci, o kterou máte zájem. Nám tedy bude bohatě stačit vepsat udp. A můžeme začít sledovat.

   
Jak přepínám programy na O2 TV, zde na wiresharku vidíme pakety, které přenáší MPEG-TS. MPEG-TS je video stream, což je tedy přesně to co hledáme. Klikneme li na jeden z těchto paketů, vidíme další informace. Nás zajímá z jaké IP adresy a portu tento paket vychází. Vidíme, že jde z IP adresy 239.232.10.1 a portu 11001. Ve VLC by tedy stačilo napsat udp://239.232.10.1:11001 a už můžete sledovat :)

Telka na síti, most mezi UDP a TCP
V případě tohoto O2 řešení, jsem měl na počítači 2 síťové karty a VLC nevěděl, z jaké má přehrávat. Co v tomto případě, ale hlavně co když chcete vysílání sledovat na jiných zařízeních v síti?

K tomu slouží takzvané UDP to HTTP(TCP) mosty. Software, který vytvoří HTTP server a díky němu přemostí Multicast vysílání(UDP) na Unicast vysílání(TCP). Příkladem může být skvělé linuxové řešení udpxy(UDP Proxy). Protože většina z Vás používá okna, existuje i port programu pro Windows. Jak můžete vidět níže v okně programu vyberete adaptér, kde je zdroj vysílání (Multicast interface) a v HTTP-Server Interface vyberete adaptér, na kterém chcete spustit HTTP server. Vyberete port na kterém má program bežet a tlačítkem start server pustíme. Vidíte i výpis logu. Pokud vše funguje, můžete i tento program nainstalovat jako službu (bude běžet na pozadí a nebudete muset zapínat toto grafické rozhraní). 

Poznámka mimo: Pokud máte např. linuxový server, na kterém běží Tvheadend, můžete na něj rovnou nainstalovat udpxy a protože tyto streamy jsou přímo .ts, nemusíte řešit žádnou ffmpeg pipeline, a postupujte podle mého návodu Základní konfigurace Tvheadendu pro IPTV .Výsledkem bude O2 TV, nebo IPTV od vašeho poskytovatele, kterou si budete moct nahrávat na svůj vlastní disk, a budete mít také možnost timeshiftu.

No a pak už stačí ve VLC tedy zadat adresu a port tohoto HTTP serveru a požadavek (UDP adresu), který chcete přemostit. Tedy např. http://localhost:8000/udp/239.232.10.1:11001 -> Server se připojí na Multicast vysílání a začne ho přeposílat pomocí Unicastu(HTTP protokol, TCP) k vám (jako když stahujete z internetu nějaký soubor). Takže nyní vidíte, proč mají některé adresy streamů tento formát. Připojujete se na most, který pro vám předá vysílání z lokální sítě a pošle vám ho přes internet.

Zde vidíme 2 příklady:

   
Na jednom mám ethernetový kabel od modemu z O2 TV sítě zapojený do notebooku a na něm běží UDP-HTTP most a VLC přehrávač.

   
Na druhém mám ethernetový kabel zapojený do serveru, který má 2 síťové karty -> V jedné je tedy O2 TV a v druhé je klasická domácí síť. Na obrázku vidíme vzdálenou plochu serveru a VLC na počítači v síti.

Most na Linuxu
Pokud máte linuxový server, nebo malinu s další usb síťovkou, můžete udělat most i tam pomocí původního programu udpxy. Stačí ho nainstalovat z linuxového repozitáře a upravit spouštěcí službu.
Tedy například nano /usr/lib/systemd/system/udpxy.service a ExecStart parameter:
Kód:
ExecStart=/usr/bin/udpxy -T -S -p 4022 -B 256kb -m enp3s0 -a enp1s0
-p je port na kterým udpxy poběží
-m je označení pro adaptér, na kterém běží multicast síť
-a je označení adaptéru, kam je připojena vaše domácí LAN síť

Pozor při nastavování samotného adaptéru! Když má linux 2 síťovky, chce vědět, jaké požadavky má směřovat kam. Takže například moje konfigurace, používám systemd-networkd:
Kód:
[Match]
Name=enp3s0

[Network]
Address=10.XXX.XXX.XXX/22

[Route]
Gateway=10.XXX.XXX.XXX
Destination=224.0.0.0/4

Hlavní je parametr Destination - ten udává, že když systém vytočí multicast adresy (tedy rozsah IP 224.0.0.0-239.255.255.255) bude se požadavek posílat na druhou síťovou kartu. A jakékoliv jiné požadavky půjdou na tu původní.

A pokud UDP komunikace stále neproudí, je třeba upravit parametry v kernelu, které povolují všechnu komunikaci.
stačí vytvořit soubor ve složce /etc/sysctl.d/nazev.conf a vložit do něj jeden parametr:
Kód:
nano /etc/sysctl.d/iptv.conf

net.ipv4.conf.all.rp_filter = 0
- to vypne filter a umožní přijímat i Multicast vysílání

Linux doporučuji více než Windows, protože u mě nikdy linux neřešil konflikt IP adresy O2 set-top-boxu a počítače. Takže to fungovalo vždy.

Tvheadend varianta
Pokud máte na jednom počítači UDP proxy a na druhém provozujete Tvheadend server, nastavte si v Tvheadend jednoduše IPTV síť podle návodu Základní konfigurace Tvheadendu pro IPTV . IPTV streamy budou typu http://IPUDPSERVER:8000/udp/239.232.10.1:11001

Pokud ovšem máte na stejném počítači Tvheadend server a zároveň dvě síťové karty s UDP sítí, nemusíte UDP proxy most používat vůbec!

V Tvheadend nastavte IPTV síť a službám dávejte rovnou UDP IP adresu, tedy například udp://239.232.10.1:11001
A v nastavení jednotlivých Muxů(tedy co mux to IPTV kanál) definujte síťovou kartu, do které máte připojenou UDP síť. viz. obrázek
   
Díky za nápad @Client a @koperfield!

Případně můžete mějte nastavenou Route(cestu) na síťové kartě, kde je UDP síť. Tedy aby operační systém automaticky směroval požadavky na multicast IP adresy rovnou na správnou kartu.  

   
Ukázka správného nastavení síťové karty v linuxu a systemd-networkd. Klasický internet poběží přes enp1s0 a jakékoliv požadavky na multicast přes enp3s0. To dělá parametr Destination v záložce [Route]

Varianta bez potřeby neustále zapojeného modemu (@ptesarik)
Pokud se modem jednou za 24 hodin nepřihlásí do O2 multicast sítě, tak pak dojde k odstřižení linky a není možné sledovat programy dokud se modem zase neohlásí. @ptesarik přišel na to, že na straně O2 je software (možná ActiveMQ Artemis), který se rozhoduje podle aktuálně připojených MAC adres.

Pokud vaše síťová karta umožňuje změnu MAC adresy (jedná se o identifikační číslo každého síťového zařízení) tak to lze obejít.  Nastavte síťové kartě, kterou používáte pro příjem O2 TV stejnou MAC adesu, jakou má váš set-top-box (buď je napsaná na spodní straně set-top boxu, případně se můžete kouknout do webového rozhraní vašeho routeru, jaké jsou připojené zařízení a jejich mac adresy, nebo to můžete udělat při používání wiresharku).

Software na straně O2 si bude myslet, že je modem stále připojen a nikdy Vás od sítě neodpojí. Ověřeno 19.9.2020. Na den jsem vypnul set-top-box. Vysílání přestalo fungovat, změnil jsem mac adresu, připojil se do sítě a vše funguje. Dokonce již nemusíte síťové kartě ani nastavovat pevnou IP adresu, přidělí ji dle MAC adresy DHCP server, který tam běží.

Závěr
Takže nyní víte rozdíl mezi Unicastem a Multicastem, umíte vytvořit most mezi nimi(UDP Proxy) a dokonce umíte zachytit a prozkoumat pakety v síti pomocí Wiresharku.

Důvodem tohoto zbytečně komplikovaného řešení byla moje obrovská nespokojenost s O2 TV set-top boxem. Pokud to někdo čte od O2, tak doufám, že tuhle cestu nezablokují, nebo ať to udělají, ale až opraví ten svůj set-top box. Zvuk se tam rozchází s obrazem, deinterlacing tam není, GUI má tak 15fps, šíleně se to laguje, byla to fakt hrůza. Po použití Kodi i na relativně pomalém Raspberry Pi 3 to byl obrovský rozdíl směrem kupředu v celkovém komfortu sledování (lineárního vysílání). Kdyby ještě měli nějaké verze programů jako Super HD, kde by byly programy streamovány ve vyšším, ideálně plném datovém toku, bylo by to ideální, ale na těch 6mbps se nedalo dívat a proto jsem nakonec od tohoto řešení upustil. Nicméně, určitě se to třeba bude někomu hodit, anebo to uplatní u jiného poskytovatele s podobným, jednodušším technickým řešením :)

A menší tip, který nebudu dále rozepisovat - v případě O2 TV k vám proudí XL, ikdyž máte třeba L ;)


Wireshark je k dispozici na https://www.wireshark.org/download.html

UDPXY se nachází na webu http://www.udpxy.com/index-en.html. Je k dispozici ve většině distribucích v repozitářích (Debian, Ubuntu, Arch Linux) -> Tuto linuxovou verzi vidíte, když najdete nějaký stream, co má tu UDPXY Status page, kde vidíte další piráty jak sosají někomu z domova stream :) Kdyby měl někdo problém s nastavení linuxové verze, ať se zeptá klidně v komentářích, ale každá distribuce zachází trochu jinak např. s firewallem, tak jsem to nechtěl řešit.

Port UDPXY pro Windows - UdpProxy je na stránce http://borpas.info/utils. Je to sice ruské, ale sám jsem to zkoušel a je to ten program na těch screenech, je v angličtině a je to čistý port pro Windows s GUI ovládáním.


A předem upozorňuji, už mě moc nebaví odepisovat na PM zprávy, já vím, že se stydíte sem třeba psát, ale tak, ani se neznáme, tak je to celkem jedno. Je lepší položit dotaz rovnou sem, protože tak z toho mohou těžit i ostatní, co mají třeba podobnou otázku. A nejlepší je, že už asi 2x jak idiot píšu odpověď, kde něco vysvětluji a při odeslání mi to napíše, že uživatel má vypnuté soukromé zprávy.... Takže už na PM, které budou s tímto souviset odpovídat nebudu.
A neexistuje blbá otázka, ale jen blbá odpověď :)
SZ nepoužívejte na dotazy, které se hodí pro všechny. Pouze pokud chcete abych něco někde doplnil, opravil.
_____
i3 Haswell + Arch Linux + Docker (Tvheadend + WG + Home-Assistant + Deconz + LetsEncrypt ) + Samba Share
Apple TV (Infuse, TvhClient), Apollo Lake Mini PC (Kodi 18.4)
 
Citovat
  


Příspěvků v tématu
Návod - Jak sledovat plnou O2 TV na síti - od marhycz - 05.9.2017, 21:52

Přejít na fórum:


Prochází: 1 host(ů)