Wednesday, September 12, 2012

MaxTV - svi dosadašnji neuspjesi

Prije nekoliko godina roditelji su dobili MaxTV i tada sam pokušao otkriti način kako bi mogao gledati program na laptopu i to putem WLAN-a! I ne samo to, već sam želio paralelno gledati dva kanala!

I tako, nešto sam kopao, saznao, i potom stao iz raznih razloga. S obzirom da mi je MaxTV opet pri ruci, odlučio sam se vratiti na ovu temu. Dosadno mi je doma pa rekoh ajd' da vidim jel' se ovdje u međuvremenu što promijenilo. Na žalost, ovaj puta nemam dvije mrežne kartice s kojima bi se mogao ubaciti između prijemnika i mreže pa sam "na slijepo" pokušao vidjeti što se dešava. O tome ću pred kraj. Ako vas ne zanima kako sam došao do informacija koje znam, skočite odmah na odjeljak Kako gledati MaxTV na laptopu. Taj odjeljak specifičan je za Linux, ali pretpostavljam da će ga netko preraditi i za Windowse.

Snifanje prometa s prijemnika

Ok, prva stvar je da sam laptop priključio s prijemnikom i počeo sniffati mrežu. Prijemnik je za to vrijeme bio u stand by modu, tj. nije bio uključen TV program. Na temelju prvog prometa sam vidio da prijemnik ima statički postavljenu IP adresu, budući da su stalno dolazili upiti sljedećeg oblika:
2:13:54.250380 ARP, Request who-has 10.70.160.1 tell 10.70.181.106, length 46
Na temelju toga, vrlo je vjerojatno da je IP adresa prijemnika 10.70.181.106, a adresa usmjernika 10.70.160.1. Kada sam svom laptopu dao adresu koju prijemnik traži (nagađao sam mrežnu masku 16 zbog razlike u IP adresama), prvo je Avahi (ili nešto slično) s mog laptopa napravilo gužvu na mreži. To je ta moderna plug&play tehnika. Al' dobro, brzo se je smirilo, no od prijemnika nakon toga ni traga ni glasa.

No, kada sam ga uključio onda je počeo pričati, a za to vrijeme na TV-u je pisalo da zbog poteškoća u prijenosu signala kanal je nedostupan. Dvije stvari je bilo vrlo jednostavno uočiti, prvo, DNS poslužitelj je na adresi 172.27.130.4, a NTP poslužitelj je na adresi 172.27.130.24. Dodatno, prijemnik je tražio sljedeća imena od DNS poslužitelja:
  • webapp.nat.myrio.net.
  • webapp.nat.myrio.net.nat.myrio.net.
U biti, radio se samo o prvoj adresi. Druga je posljedica pokušaja s dodanom domenom koja već je dodana.

Za pristup kanalima koristi se IGMP, te sam primjetio nekoliko aktivnosti. Prvo, sljedeća poruka služi da se priključi na kanal čija adresa je 224.1.2.81:
10.70.181.106 > 224.1.2.81: igmp v2 report 224.1.2.81
Zatim, bilo je pokušaja napuštanja tog kanala:
10.70.181.106 > 224.0.0.2: igmp leave 224.1.2.81
I toliko o prijemniku. S obzirom da nisam mogao emulirati na laptopu T-Com, bar ne bez značajnog truda, odlučio sam se da ću dalje gledati što se dešava na strani T-Com-a.

Snifanje prometa s T-Coma

Nakon što sam se priključio na T-Com, vidio sam da se javlja 10.70.160.1 s IGMPv2 porukama s kojima se raspituje za članove grupe. Što i nije baš korisno, trebalo je na neki način potaknuti nekakve događaje.

Način na koji IPTV funkcionira je da se prijemnik "učlani" u neku difuznu (engl. multicast) grupu i od tog trenutka video poslužitelj (172.x.y.z) počinje slati TV podatke korištenjem RTP protokola. Prema tome, trebalo se učlaniti u odgovarajuću grupu, primati TV podatke, dekodirati ih i prikazivati. Kandidati za takve aplikacije su VLC, mplayer, ffplay. U biti, kada je H264 u pitanju, svi oni koriste ffmpeg za dekodiranje komprimiranih video podataka.

Malo petljanja, eksperimentiranja, uz obavezno korištenje programa tcpdump (bez njega mogu eksperimentirati do besvjesti bez ikakvih rezultata) i skužih da jedan program mogu gledati korištenjem sljedeće naredbe:
cvlc rtp://@224.1.2.81:3081
Međutim, problem koji sam ovdje imao je da su paketi stizali (to sam vidio zahvaljujući tcpdump programu, a zahvaljujući njemu sam saznao i port koji trebam koristiti!), ali ih aplikacija nije primala. Nakon dosta guglanja naišao sam na SO da se izgleda problem javlja kada ima više aktivnih sučelja, i doista, nakon što sam isključio WLAN, aplikacija je počela primati podatkovni problem. No, sada je problem bio u tome da nije bio dobar codec. VLC je stavlja smeće, mplayer-u je trebalo vremena da se sinkronizira pa je i on počeo prikazivati smeće, a ni ffplay nije bio bolji. Svi oni prihvaćali su URL rtp://224.1.2.81:3081. I tako, u trenutku očaja, odlučio sam da ću se kasnije pozabaviti s tim i reko' da vidim kojim sve kanalima mogu pristupiti i probah:
cvlc rtp://@224.1.1.81:3081
I na moje neizmjerno čuđenje: RADI!!! Dobijam čistu TV sliku. S obzirom da se radilo o nekom lijevom TV kanalu, zanimalo me da pronađem neki korisniji program. Sljedeće sam kanale uspio naći (izlistani su oni samo koji se mogu gledati):
  • HTV1 (224.1.1.1:3001)
  • HTV2 (224.1.1.2:3002)
  • NOVA TV (224.1.1.3:3003)
  • RTL (224.1.1.4:3004)
  • K5 (224.1.1.27:3027)
  • Osječka TV (224.1.1.53:3053)
  • CMC (224.1.1.57:3057)
  • TPortal Sport (224.1.1.67:3067)
  • TV Šibenik (224.1.1.75:3075)
  • ? (224.1.1.76:3076)
  • Z1 (224.1.1.77:3077)
  • ? (224.1.1.78:3078)
  • ? (224.1.1.79:3079)
  • Vinkovačka TV (224.1.1.80:3080)
  • VTV (224.1.1.81:3081)
  • TV NOVA (224.1.1.82:3082)
  • TV (Dalmacija 224.1.1.83:3083)
  • TV4R(?) (224.1.1.84:3084)
  • TV Istra (224.1.1.109:3109)
  • Radio? (224.1.1.128:3128)
  • Radio? (224.1.1.129:3129)
  • Radio? (224.1.1.130:3130)
  • Radio? (224.1.1.132:3132)
  • Radio? (224.1.1.133:3133)
  • Radio? (224.1.1.134:3134)
  • Radio? (224.1.1.137:3137)
  • SB TV (224.1.1.142:3142)
  • SPTV (224.1.1.157:3157)
  • RI2 (224.1.1.187:3187)
  • MaxTV (224.1.1.201:3201)
  • DuTV (224.1.2.31:3031)
  • Radio? (224.1.2.45:3045)
  • TV? (224.1.2.49:3049)
  • TV+ (224.1.2.50:3050)
  • TV? (224.1.2.55:3055)
  • Radio? (224.1.3.11:3011)
  • TV? (224.1.3.15:3015)
  • Radio? (224.1.3.32:3032)
Primjetite vezu između zadnjeg dijela IP adrese i porta! Iako, ima par iznimki koje ovdje nisu navedena jer na njima nisam uspio detektirati što se nalazi!

Inače, način na koji se otkriva port je jednostavan. Stavite neki slučajni broj kada pokrećete cvlc i pratite što će tcpdump početi ispisivati. Naime, on će ispisivati na koji port stižu paketi. Prekinite cvlc (ili što već koristite) i pokrenite ga s ispravnim portom.

Nakon ovoga odlučio sam stati sa skeniranjem i uključiti ponovo WLAN kako bi provjerio ima li što na Internetu u vezi pogrešaka s dekodiranjem. I tako, kako sam petljao odjednom sam shvatio zašto ne radi multicast s više sučelja. Naime, paketi koji dolaze na multicast adresu su, primjerice:
15:38:34.978781 IP 172.27.128.34.49152 > 224.1.1.1.3001: UDP, length 1328
Primjetio sam da ne radi streamanje bez obzira što sam isključio WLAN, ali sve ostale postavke su bile OK. Onda sam dodao podrazumijevanu (engl. default) rutu i proradilo je. Konačno, shvatio sam da Linux filtrira pakete koji dolaze s "nepredviđenog" sučelja. U gornjem primjeru, IP paketi dolaze s adrese 172.27.128.34 koja bi trebala dolaziti preko WLAN-a, a ne Etherneta i zbog toga ju je Linux jezgra odbacivala. Dvije su mogućnosti kako se to može riješiti, isključiti rp filtriranje ili postaviti rute. Ja sam postavio rute i sve je odmah proradilo!

Kako gledati MaxTV na laptopu

Ok, ovdje je kuharica što treba učiniti na Linuxu. Prvo i osnovno morate doći do IP adrese svog prijemnika. To se možda može u postavkama, ali moje su bile zaštićene PIN-om te sam to saznao snifanjem prometa. To možete i vi, spojite žicom SetTopBox i svoj laptop, aktivirajte mrežno sučelje i tcpdump-om (ili Wiresharkom) pratite promet. Brzo bi vam trebalo biti jasno koja je IP adresa uređaja - ako nije potpuno isključen iz struje, onda ćete se načekati dok saznate tu informaciju. :)

Ok, potom napravite sljedeće:
  1. Priključite svoj laptop/računalo na MaxTV mrežni priključak umjesto vašeg prijemnika.
  2. Postavite si IP adresu koju ste otkrili da koristi vaš prijemnik. Koristite 16 bita za mrežnu adresu.
  3. Postavite rutu za mrežu 224.0.0.0/4 na sučelje (ip addr <net> dev <if>)!
  4. Dodajte rutu za IP adresu 10.70.160.1 da je direktno na sučelju na koji je priključen MaxTV.
  5. Dodajte rutu za mrežu 172.16.0.0/12 preko adrese 10.70.160.1.
Umjesto koraka 4 i 5 možete samo isključiti RP filtriranje na sučelju (/proc/sys/net/ipv4/conf/...).

Pokušajte pratiti HTV1:
cvlc rtp://@224.1.1.1:3001
Što dalje...

Ostao je veliki problem da ne mogu gledati najzanimljivije kanale, ali pretpostavljam da bi mogao oktriti u čemu je problem ako se ubacim između T-Coma i prijemnika. Naime, sigurno prijemnik dohvati popis programa zajedno sa svim parametrima i mogao bi dohvatiti to ako bi bio između njih (i ako ne koriste SSL/TLS, onda je malo složeniji problem).

Iduća stvar koju bi trebalo napraviti je prebaciti na bežičnu mrežu MaxTV "signal". Ideja koju imam je da bi uzeo preklopnik (switch) s WLAN sučeljem i na njega spojio i MaxTV i Internet priključak od T-Coma). Na taj način sam "kratko spojio" mreže za MaxTV i Internet. E sad, preko WLAN-a se inače ne prenose multicast promet. Vjerojatno neki preklopnici omogućavaju da se to promijeni, a alternativno, može se koristiti program udpxy koji može prebaciti multicast promet u standardni HTTP.

Možete također pogledati i novi post o MaxTV-u koji sam naknadno napisao, a nakon njega i ovaj.

Stari pokušaji

U nastavku slijedi stari tekst koji sam odlučio zadržati čisto informacije radi. Primjetite da je došlo do promjena IP adresa, a možda i pokojeg detalja.

Već neko vrijeme petljam po MaxTV-u kako bi mogao gledati TV na laptopu. Otežavajuća okolnost mog petljanja je činjenica kako pristup MaxTV-u imam svega nekoliko puta mjesečno na nekoliko sati (u najboljem slučaju). Krajnja želja je da mogu gledati televiziju putem bežičnog Etherneta i da za to vrijeme mogu normalno surfati po Internetu. No, do toga ću se izgleda malo načekati. Ovo je prvi post u kojemu ću opisati ono što do sada znam o cijeloj stvari. Moj post više je vezan uz Linux, iako vjerujem da se uz nešto petljanja dosta stvari opisanih ovdje može obaviti i na Windowsima.

Ako potražite malo po Internetu otkrit ćete da su ljudi već dosta o tome raspravljali. Nadalje, za gledanje programa na računalu (bilo Windows, bilo Linux) najčešće se spominje VLC. Međutim, na Linuxu se može koristiti i mplayer (koji također radi na Windowsima) te MythTV koji mi se čini posebno zanimljiv. U nastavku ću se više baviti VLC-om, dok ću korištenje ostalih opisati u posebnom tekstu. Dakle, VLC zahtijeva upisivanje protokola, IP adrese te pristupa. Protokol se najčešće u postovima ne spominje pa ću jasno reći kako morate odabrati RTP (ne UDP ili slično). IP adrese i portovi se spominju. Recimo, za HTV1 IP adresa koju treba upisati je 224.1.4.1 dok je port 3001. U postovima se spominju još neke stvari. Recimo, da morate računalu dodijeliti IP i Ethernet/MAC adresu STB-a (Set Top Box - onaj uređaj koji vam je HT dao). No, dok za IP adresu mogu vjerovati da treba (iako ću to još provjeriti) za MAC adresu sam već manje siguran. U postovima se također spominje kako ne možete koristiti Internet za vrijeme dok gledate TV, ali mislim da je to vezano uz podrazumijevanu (default) stazu koja je potrebna zbog nekih IP adresa koje MaxTV koristi za distribuciju video materijala te da se i to može riješiti uz nešto malo žongliranja s rutama i adreama.

Međutim, uz sav trud do sada mi još nije uspjelo gledanje TV-a na laptopu, bar ne na način na koji bi to želio. U nastavku slijedi opis što sam do sada isprobao i s kakvim rezultatima.

Prvi pokušaj je bio najjednostavniji i čisto informativan. Spojio sam kabl na laptop i snifao mrežu. Ono što se moglo vidjeti su obavijesti usmjernika 10.140.160.1 o različitim grupama. Osim toga, ničeg više nije bilo.

Drugi, ozbiljniji, pokušaj je bio staviti IP i MAC adrese STB-a sučelju u koje sam uštekao kabl za MaxTV te još rutu za mrežu 224.0.0.0/4 koja direktno pokazuje na to sučelje. Zatim sam pokrenuo VLC i upisao adresu TV kanala kojega sam želio pratiti. Međutim, ćorak! Računalo se priključilo na navedenu grupu, vidim korištenjem Wiresharka da je IGMP paket otišao, ali od TV-a ništa. Stream ne dolazi.

Ok, ovo je čudno i očito nešto nedostaje. Jedini način na koji sam to mogao vidjeti je tako da pratim promet što ga razmjenjuje STB s ostatkom mreže. Problem je bio samo u tome što na laptopu nemam dvije mrežne kartice. Zbog toga sam prvo probao spojiti laptopu paralelni port na HT-ovom ruteru. Međutim, ništa značajnije se nije dešavalo što je uostalom bilo i očekivano s obzirom kako funkcionira mreža i uređaj. U drugom pokušaju sam složio od dva Internet porta na HT-ovom ruteru preklopnik (switch) dok sam preko bežične mreže pristupao s laptopom. Ni to nije radilo. Konačno, kupio sam dodatnu PCMCIA karticu i složio preklopnik od laptopa.

3 comments:

Ivica said...

Dodao sam jos jednu lan karticu u PC i nju dodjelio za MaxTV snimanja, dakle to sve lipo sljaka i na Windozama. Naravno, trebalo bi jos srediti one malo zanimljivije programe. VLC istovremeno moze uzimati stram od Maxa i dalje ga broadcastati po mrezi... ali to mi zanimljivo jedino ako se probiju 'zanimljivi' programi jer hrt i slicne imamo i u dvb-t

Zoran Božičević said...

Da li ovo još uvijek radi?
Što je sa snimalicom? Ako se ne varam, ona nije multicast?

Stjepan Groš (sgros) said...

Ne znam jel' ovo jos uvijek aktualno. Vec neko dulje vrijeme se s tim nisam bavio. Sto se tice snimalice, moze i ne mora snimati 'multicast' promet. Kako tocno radi, ovisi prvenstveno o tome sto snima i koje su mogucnosti. Ali, nisam osobno nikada koristio snimalicu i ne mogu tu puno vise dodati.

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive