Leica Florian Robert

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.


<< Torna ai progetti

TvIt — case study

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.

Una lista che non c'era

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.

Da hometv a TvIt

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.

Come fanno le emittenti

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.

Dalla lista al sito

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.

  • CORS. Alcuni servizi delle emittenti non permettono al browser di leggere le loro risposte da un altro sito. TvIt fa la richiesta al posto del browser e gli passa solo l'indirizzo finale della CDN, che il browser può aprire.
  • Il server è fuori dall'Italia. Alcune emittenti bloccano le richieste dall'estero, e il mio server non è in Italia. Per questo TvIt quasi sempre non scarica il video ma rimanda il player all'emittente, che lo serve a chi guarda; i canali disponibili solo in Italia sono segnati sul sito con una bandierina.
  • Indirizzi che scadono. Per alcuni canali l'indirizzo dura pochi minuti: TvIt lo chiede di nuovo a ogni avvio, invece di scriverlo una volta per tutte.
  • Emittenti che cambiano. CDN, indirizzi e pagine cambiano senza preavviso. Ogni volta si torna agli strumenti per sviluppatori, si ritrova la richiesta giusta e si aggiorna TvIt.

La guida, scritta a mano

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.

Usata anche da altri

  • 65 stelle e 4 fork su GitHub: il mio repository più seguito, segno che la lista la usano in molti.
  • Più stabile di altre liste: quando un canale smette di andare, lo si corregge in un punto solo, e tutti i player tornano a vederlo.
  • Il player web, comodo quando si è in viaggio e non si ha il proprio player a portata di mano.
  • Lista e guida si aggiornano da sole, senza interventi a mano.

Cosa mi ha lasciato

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

Privacy Policy