EOS – Swisscom’s Android AOSP TV Middleware

Software Engineering

EOS – Swisscom’s Android AOSP TV Middleware

Swisscom è stata una delle prime aziende di telecomunicazioni al mondo a utilizzare Android per i suoi set-top box. Il middleware TV "EOS", sviluppato internamente, che alimenta tutti gli Swisscom TV 2.0, è ora disponibile come software open source. Stiamo rilasciando il framework completo per sviluppare un middleware IPTV personalizzato.

Introduzione

Il sistema operativo (OS) Android è stato introdotto molti anni fa da Google per i dispositivi touchscreen - smartphone e tablet. Nell'Android Open Source Project (AOSP), il codice sorgente era disponibile per chiunque avesse una licenza permissiva. Di conseguenza, diverse aziende hanno iniziato a utilizzarlo su dispositivi "insoliti". Un esempio è stato il porting di Android sui TV-Box.

All'inizio del 2012, Swisscom ha iniziato a studiare la possibilità di utilizzare Android come piattaforma per la sua nuova generazione di STB. Era necessario integrare un middleware TV (MW) in modo nativo nel framework Android. Swisscom ha concesso in licenza una delle poche soluzioni MW di terze parti disponibili e Swisscom TV 2.0 è stata lanciata nel 2014 (sull'STB IP1200).

L'MW è fondamentale per il successo di un prodotto televisivo. Le soluzioni di terze parti sono state progettate per funzionare su una serie di dispositivi che supportano diversi standard. Questo le rendeva inefficienti in un ambiente molto più semplice come la rete IPTV Managed Network di Swisscom. Questo ha portato allo sviluppo del MW TV di Swisscom chiamato "EOS".

Quando nel 2016 è stato lanciato l'STB IP1400 (UHD) di Swisscom, EOS è stato utilizzato come MW; poco dopo è stato riportato sul vecchio STB IP1200 (HD).

Architettura

EOS MW si basa sui seguenti principi di progettazione:

  • Semplicità - EOS non è un vero e proprio TV-MW. Non intende includere tutte le caratteristiche di un normale MW TV commerciale. Si concentra solo sulle funzioni IPTV (ad esempio, presuppone che i dati provengano dalla rete).
  • Velocità - Il funzionamento dei flussi IPTV deve essere il più veloce possibile.
  • Controllo dei dati - Il controllo dei dati è fondamentale per ottimizzare la riproduzione dei flussi IPTV. Il corretto recupero, l'alimentazione e il flusso dei dati del flusso è un must.
  • Portabilità - Deve essere possibile passare a un altro SoC STB senza grandi sforzi.
  • Espandibilità - Supporta le funzioni richieste da Swisscom TV, ma può essere facilmente ampliato se necessario.

Architettura generale

L'EOS è suddiviso in quattro strati (Figura 1):

  • System - Un insieme di funzioni per il porting dei sistemi operativi e alcune utilità generali utilizzate in EOS.
  • Streaming - Moduli per la fornitura, l'elaborazione e la riproduzione di flussi.
  • Core - Moduli che forniscono le funzioni principali.
  • API - Definizione di API native e funzionalità e API legate a Java.

Sistema

Il livello di sistema crea un ambiente di base per il resto del MW. L'Interfaccia OS (OSI) e le utility sono membri del livello di sistema.

EOS si rivolge al sistema operativo Android, ma in linea di principio può essere portato anche su altri sistemi operativi. Per semplicità, EOS utilizza solo un piccolo sottoinsieme delle funzioni del sistema operativo:

  • Gestione della memoria
  • Temi
  • Semaphores
  • Mutexes
  • Time primitives

Esiste un modulo separato per ogni funzione e un'implementazione POSIX (compatibile con Android bionic libc). Oltre all'interfaccia del sistema operativo, ci sono diverse utility che vengono utilizzate tramite EOS.

Esempi di questo tipo sono:

  • Logging
  • Message queue
  • Message queue
  • Ring buffer

Streaming

I dati dello stream vengono elaborati nel livello stream.

EOS riconosce tre tipi di moduli per la gestione dei flussi:

  • Sorgenti - Responsabili del rilevamento dei media e del recupero dei dati. In pratica, implementano il supporto per i protocolli IPTV richiesti (ad esempio RTP, HLS, ...).
  • Processori - Elaborano i dati (ad es. registrazione, remuxing, ...).
  • Lavelli - Responsabili della riproduzione dei media e del controllo della riproduzione.

Tutti e tre i tipi di moduli di gestione dei flussi hanno due tipi di funzioni:

  • Richiesto - Funzioni definite che un modulo deve avere (ad esempio, start, stop, ...).
  • Capacità - funzionalità che possono essere implementate a seconda del tipo di modulo (ad esempio, gioco di prestigio, selezione del titolo, ...).

Le fonti e i processori dovrebbero essere indipendenti dalla piattaforma (ma non è necessario che lo siano). I sink, invece, sono intrinsecamente legati alla piattaforma. Per sfruttare al meglio la piattaforma, EOS prevede un tipo speciale di sink: il cron player. Questo sink deve implementare "API basate sul tempo". Queste API sono progettate per massimizzare le prestazioni di riproduzione concentrandosi sulle caratteristiche temporali del flusso.

Nucleo

La gestione dello streaming, dei metadati del flusso e del controllo della riproduzione avviene nel livello centrale.

EOS può avere una o più sessioni di streaming. Ogni sessione viene definita "catena". Una catena è composta da una sorgente, zero o più processori e un sink. Il modulo responsabile della creazione, del riciclo e della distruzione della catena è chiamato chain manager.

Il chain manager controlla le fonti disponibili per uno specifico URL. Poi, a seconda del tipo di uscita della sorgente e delle funzionalità supportate, vengono collegati tutti i processori necessari e alla fine viene collegato il lavandino.

Ogni catena ha un controller di riproduzione e un gestore di dati assegnati. Il controller di riproduzione si occupa della riproduzione (ad esempio play, stop, trick play, ...), mentre il gestore dei dati gestisce i metadati del flusso (ad esempio televideo, sottotitoli, ...). Il gestore dei dati gestisce una serie di moduli principali, i motori. I motori sono parser e aggregatori di metadati del flusso indipendenti dalla piattaforma. Vengono collegati alla catena se tali metadati sono disponibili nel flusso.

API

Il livello API è composto da due parti:

  • API nativa - Semplice involucro attorno al livello centrale che rende accessibili le funzioni di EOS.
  • API Java - Un insieme di classi Java che forniscono funzioni EOS per l'applicazione Java.

Le API Java si basano sull'interfaccia JNI, che utilizza le API native di EOS.

Punti di estensione

Le funzioni principali di EOS sono determinate dai requisiti di Swisscom TV. Poiché non si tratta di una serie limitata di requisiti, era molto importante avere un'architettura che offrisse la possibilità di estendere facilmente le funzionalità supportate. Se si vuole supportare un nuovo protocollo di streaming, è necessario creare una nuova sorgente o estendere quella esistente. Lo stesso vale per i moduli di elaborazione e processore dello streaming.

Due servizi possono essere estesi nel livello centrale: il controllo della riproduzione e i motori. Il controllo della riproduzione può essere adattato per soddisfare nuovi requisiti. Ad esempio, se si vuole integrare un servizio di registrazione, il controllo di riproduzione deve essere esteso per supportare questo scenario. Il controllo di riproduzione standard è pronto e può essere utilizzato per scenari di riproduzione generali. Potrebbero essere necessari nuovi motori se è necessario analizzare ulteriori metadati. Un esempio potrebbe essere l'aggiunta del supporto "Now/Next" direttamente dalle tabelle EIT di MPEG TS.

Source code

Il codice sorgente di EOS è pubblicamente accessibile all'indirizzo https://github.com/swisscom/eos(apre una nuova finestra).

Con il codice sorgente di EOS vengono forniti due pacchetti esterni:

A causa di restrizioni sulle licenze software, abbiamo potuto pubblicare solo i moduli di base dello streaming: la sorgente del file e il sink del Cron Player basato su PC/Linux. Questo dovrebbe fornirti informazioni sufficienti per implementare i sorgenti/protocolli di cui hai bisogno e portare il cron player sulla tua piattaforma di destinazione. Il codice sorgente è pubblicato con licenza BSD 3-Clause.

Speriamo che EOS ti sia utile nel tuo ambiente.

Lukas Hohl

Lukas Hohl

Leader for Teams Development

Altri articoli getIT

Pronti per Swisscom

Trova il posto di lavoro o il percorso di carriera che fa per te. Dove dare il tuo contributo e crescere professionalmente.

Ciò che tu fai, è ciò che siamo.

Vai ai percorsi di carriera

Vai alle posizioni vacanti cibersicurezza