Professione: Sviluppatore Web & Mobile
È un esperimento: il sito come sarebbe stato negli anni '90. Per vedere quello vero, premi il pulsante in fondo alla pagina.
Ruolo: Ideazione e sviluppo. Anno: 2022.
Sito: tvit.leicaflorianrobert.dev
Un progetto personale nato da un'esigenza mia: una lista IPTV con i canali TV italiani in chiaro, letti dalle fonti delle emittenti, e la guida TV. Da guardare con qualsiasi player o direttamente nel browser.
Stai vedendo questo case study con il motore Legacy. Per vederlo come è stato progettato, attiva il rendering nativo qui sotto.
Tutto è cominciato in salotto. Guardavo la TV con una Nvidia Shield TV, un box Android, e con un'app IPTV: mi serviva solo una lista dei canali italiani che funzionasse. Quelle che trovavo smettevano di andare dopo pochi giorni, o non andavano affatto.
Non trovandone una affidabile, ho deciso di scriverla io.
Nessun contenuto privato: solo i canali che le emittenti trasmettono già pubblicamente sui loro siti.
La prima versione, nel 2019, si chiamava hometv ed era scritta in TypeScript. Faceva il suo lavoro, ma con il tempo i casi particolari si moltiplicavano: canali che cambiavano indirizzo, sorgenti che rispondevano in modo diverso, controlli da ripetere ogni notte.
Nel 2022 l'ho riscritta da zero in Laravel: più veloce, e con code, pianificazione dei lavori, client HTTP e test già pronti, proprio quello che serviva per gestire bene ogni eccezione. È nata così TvIt.
All'inizio non sapevo nulla di come funzionasse lo streaming di una diretta TV. Per capirlo ho fatto un po' di reverse engineering: ho aperto i siti delle emittenti con gli strumenti per sviluppatori del browser e ho seguito, una per una, le richieste dei loro player.
Ho scoperto che nella pagina l'indirizzo del video non c'è. Il player chiede prima a un servizio dell'emittente dove si trova la diretta, e ottiene un indirizzo temporaneo, con un token che scade dopo poco, verso la CDN che distribuisce il video. Il video stesso non è un file unico, ma una playlist .m3u8 di piccoli segmenti di pochi secondi, che il player scarica uno dopo l'altro (HLS).
Una volta capito il meccanismo, l'ho replicato. Nella lista ogni canale punta a TvIt; quando un player lo apre, TvIt fa la stessa richiesta che farebbe il player dell'emittente e lo rimanda all'indirizzo appena ottenuto. Il video arriva direttamente dalla CDN dell'emittente, senza passare dal mio server.
C'è un vantaggio in più: siccome la lista punta a TvIt e non alle emittenti, quando un'emittente cambia qualcosa basta correggere TvIt, e la lista salvata nei player continua a funzionare.
L'idea iniziale era solo la lista. Poi ho voluto un sito per guardare i canali dal browser, con la guida TV accanto, ed è lì che sono arrivati i problemi veri.
Li ho risolti uno alla volta, con passione e pazienza, e mi sono divertito a farlo.
La guida dei programmi (EPG) non arriva da un'API: si legge dalle pagine dei palinsesti, canale per canale, ogni notte alle 3. Lo scraper l'ho scritto a mano, senza AI, studiando il codice delle pagine e decidendo cosa prendere: orari, titolo, categoria, descrizione e immagine.
Le pagine dei palinsesti cambiano struttura ogni tanto. Per questo, se lo scraper non trova più nessun programma, si ferma e lo segnala, invece di lasciare la guida vuota senza che nessuno se ne accorga.
TvIt è un side project, e lo è sempre stato. Eppure mi ha dato grandi soddisfazioni: il risultato più grande non sono le stelle, ma essermi divertito a costruirlo, aver scoperto come funziona davvero lo streaming e aver superato, uno dopo l'altro, ostacoli che all'inizio non sapevo nemmeno di avere davanti.
Ottimizzato per Netscape Navigator 4.0 — 800×600