Software Engineering

EOS – Swisscom’s Android AOSP TV Middleware

Swisscom a été l'une des premières entreprises de télécommunications au monde à utiliser Android pour ses décodeurs. Le middleware TV "EOS" développé en interne, qui alimente tous les décodeurs de Swisscom TV 2.0, est maintenant disponible en tant que logiciel open source. Nous publions le framework complet pour développer un middleware IPTV sur mesure.

Introduction

Le système d'exploitation (OS) Android a été lancé il y a de nombreuses années par Google pour les appareils à écran tactile - smartphones et tablettes. Dans le projet Android Open Source Project (AOSP), le code source était disponible pour tout le monde avec une licence permissive. C'est pourquoi différentes entreprises ont commencé à l'utiliser sur des appareils "inhabituels". Un exemple était le portage d'Android sur les décodeurs TV (STB).

Début 2012, Swisscom a commencé à étudier la possibilité d'utiliser Android comme plateforme pour sa nouvelle génération de décodeurs STB. Il y avait un besoin d'intégrer un middleware TV (MW) nativement dans le framework Android. Swisscom a licencié l'une des rares solutions MW disponibles auprès de fournisseurs tiers et Swisscom TV 2.0 a été lancée en 2014 (sur le STB IP1200).

La MW est essentielle pour un produit TV réussi. Les solutions de tiers ont été conçues pour fonctionner sur une multitude d'appareils qui supportent une multitude de normes. Cela les rendait inefficaces dans un environnement beaucoup plus simple comme le réseau géré IPTV de Swisscom. Cela a conduit au développement de la propre MW TV de Swisscom appelée "EOS".

Lors du lancement de la Swisscom IP1400 (UHD) STB en 2016, EOS a été utilisé comme MW ; peu après, il a été rapatrié sur l'ancienne IP1200 (HD) STB.

Architecture

EOS MW se base sur les principes de conception suivants:

  • Simplicité - EOS n'est pas une TV-MW à part entière. Il n'a pas l'intention d'inclure toutes les fioritures d'un MW TV commercial général. Il se concentre uniquement sur les fonctions IPTV (par exemple, il part du principe que les données proviennent du réseau).
  • Vitesse - Le fonctionnement des flux IPTV doit être aussi rapide que possible.
  • Contrôle des données - Le contrôle des données est essentiel pour une lecture optimale du flux IPTV. La récupération, l'alimentation et le flux corrects des données du flux sont indispensables.
  • Portabilité - il devrait être possible de passer à un autre SoC STB sans trop d'efforts.
  • Extensibilité - Il prend en charge les fonctions requises par Swisscom TV, mais peut être facilement étendu si nécessaire.

Architecture générale

EOS est divisé en quatre couches (image 1):

  • Système - une série de fonctions pour le portage de systèmes d'exploitation et quelques utilitaires généraux utilisés dans EOS.
  • Streaming - modules pour l'alimentation, le traitement et la lecture des flux.
  • Core - modules qui fournissent des fonctions de base.
  • API - Définition de l'API native et des fonctionnalités et API liées à Java.

Système

La couche système crée un environnement de base pour le reste du MW. L'interface OS (OSI) et les utilitaires sont des membres de la couche système.

EOS vise le système d'exploitation Android, mais peut en principe être porté sur d'autres systèmes d'exploitation. Pour des raisons de simplicité, EOS n'utilise qu'un petit sous-ensemble des fonctions du système d'exploitation:

  • Gestion de la mémoire
  • Thèmes
  • Semaphores
  • Mutexes
  • Primitives temporelles

Pour chaque fonction, il existe un module spécifique et une implémentation POSIX (compatible avec Android bionic libc). En plus de l'interface du système d'exploitation, il existe différents utilitaires qui sont utilisés via EOS.

En voici quelques exemples:

  • Logging
  • Message queue
  • Message queue
  • Ring buffer

Streaming

Le traitement des données du flux se fait dans la couche du flux.

EOS connaît trois types de modules de traitement de flux:

  • Sources - Responsables de la reconnaissance des médias et de la récupération des données. Dans la pratique, ils implémentent le soutien pour les protocoles IPTV nécessaires (par exemple RTP, HLS, ...).
  • Processeurs - traitent les données (par exemple, enregistrement, remixage, ...).
  • Sinks - Responsable de la lecture des médias et du contrôle de la lecture.

Les trois types de modules de gestion de flux ont deux types de fonctions:

  • Requis - Fonctions définies qu'un module doit avoir (par exemple, démarrage, arrêt, ...).
  • Capacités - fonctionnalités qui peuvent être implémentées en fonction du type de module (par exemple, trick play, sélection de titres, ...).

Les sources et les processeurs devraient être indépendants de la plateforme (mais ce n'est pas obligatoire). Les puits, par contre, sont par nature liés à la plateforme. Pour utiliser la plateforme de manière optimale, EOS a un type particulier de puits - le lecteur Cron. Ce puits doit implémenter des "API basées sur le temps". Ces API sont conçues pour maximiser les performances de lecture en se concentrant sur les caractéristiques du flux liées au temps.

Noyau

La gestion du streaming, des métadonnées du streaming et du contrôle de la lecture se fait dans la couche centrale.

EOS peut avoir une ou plusieurs sessions de streaming. Chaque session est appelée "chaîne". Une chaîne se compose d'une source, de zéro ou plusieurs processeurs et d'un puits. Le module responsable de la création, du recyclage et de la destruction de la chaîne s'appelle le gestionnaire de chaîne.

Le gestionnaire de chaîne vérifie les sources disponibles pour une URL donnée. Ensuite, selon le type de sortie de la source et les capacités supportées, tous les éléments de processeur nécessaires sont connectés et à la fin, le puits est connecté.

Chaque chaîne a un contrôleur de lecture attribué et un gestionnaire de données. Le contrôleur de lecture s'occupe de la lecture (par exemple Play, Stop, Trick-Play, ...), tandis que le gestionnaire de données gère les métadonnées du flux (par exemple télétexte, sous-titres, ...). Le gestionnaire de données gère une série de modules centraux, les moteurs. Les moteurs sont des analyseurs de métadonnées de flux indépendants de la plate-forme et des agrégateurs. Ils sont ajoutés à la chaîne si de telles métadonnées sont présentes dans le flux.

API

La couche API se compose de deux parties:

  • API native - Enveloppe simple autour de la couche centrale qui rend les fonctions EOS accessibles.
  • API Java - Une série de classes Java qui fournissent des fonctions EOS à l'application Java.

Les API Java sont basées sur l'interface JNI, qui utilise les API EOS natives.

Points d'extension

Les fonctions principales de EOS sont déterminées par les exigences de Swisscom TV. Comme il ne s'agit pas d'un nombre limité d'exigences, il était très important d'avoir une architecture qui offre la possibilité d'étendre facilement les fonctions supportées.Les points d'extension évidents se trouvent dans la couche streaming. Si un nouveau protocole de streaming doit être pris en charge, une nouvelle source doit être créée ou une source existante doit être étendue. Il en va de même pour le traitement du streaming et les modules du processeur.

Dans la couche centrale, deux services sont extensibles : le contrôle de lecture et les moteurs. Le contrôle de lecture peut être adapté pour répondre à de nouvelles exigences. Par exemple, si un service d'enregistrement doit être intégré, le contrôle de lecture doit être étendu pour supporter un tel scénario. Le contrôle de lecture standard est préparé et peut être utilisé pour des scénarios de lecture généraux. De nouveaux moteurs peuvent être nécessaires si des métadonnées supplémentaires doivent être analysées. Un exemple serait d'ajouter le support "Now/Next" directement à partir des tables MPEG TS EIT.

Source code

Le code source d'EOS est accessible au public sur https://github.com/swisscom/eos(ouvre une nouvelle fenêtre).

Deux paquets externes sont livrés avec le code source d'EOS:

En raison des restrictions de licence logicielle, nous n'avons pu publier que les modules de streaming de base : la source de fichiers et le puits du lecteur Cron basé sur PC/Linux. Avec cela, tu devrais avoir assez d'informations pour implémenter les sources/protocoles dont tu as besoin et porter le Cron Player sur ta plateforme cible. Le code source est publié sous la licence BSD 3-Clause.

Nous espérons que tu trouveras EOS utile dans ton environnement.

Lukas Hohl

Lukas Hohl

Leader for Teams Development

Plus d’articles getIT

Prêts pour Swisscom

Trouve le Job ou l’univers professionnel qui te convient. Où tu veux co-créer et évoluer.

Ce qui nous définit, c’est toi.

Vers les univers professionnels

Vers les postes vacants cybersécurité