Software Engineering

EOS – Swisscom’s Android AOSP TV Middleware

Swisscom war eines der ersten Telekommunikationsunternehmen der Welt, das Android für seine Set-Top-Boxen verwendete. Die intern entwickelte TV-Middleware "EOS", die alle Set-Top-Boxen von Swisscom TV 2.0 antreibt, ist jetzt als Open-Source-Software verfügbar. Wir veröffentlichen das komplette Framework, um eine maßgeschneiderte IPTV-Middleware zu entwickeln.

Einführung

Das Android-Betriebssystem (OS) wurde vor vielen Jahren von Google für Touchscreen-Geräte - Smartphones und Tablets - eingeführt. Im Android Open Source Project (AOSP) war der Quellcode für jeden mit einer freizügigen Lizenz verfügbar. Deshalb begannen verschiedene Unternehmen, ihn auf "ungewöhnlichen" Geräten zu verwenden. Ein Beispiel war die Portierung von Android auf TV-Set-Top-Boxen (STB).

Anfang 2012 begann die Swisscom, die Möglichkeit zu untersuchen, Android als Plattform für ihre neue Generation von STBs zu nutzen. Es bestand die Notwendigkeit, eine TV-Middleware (MW) nativ in das Android-Framework zu integrieren. Swisscom lizenzierte eine der wenigen verfügbaren MW-Lösungen von Drittanbietern und Swisscom TV 2.0 wurde 2014 (auf der IP1200 STB) eingeführt.

Der MW ist entscheidend für ein erfolgreiches TV-Produkt. Die Lösungen von Drittanbietern wurden entwickelt, um auf einer Vielzahl von Geräten zu laufen, die eine Vielzahl von Standards unterstützen. Das machte sie in einer viel einfacheren Umgebung wie dem IPTV Managed Network von Swisscom ineffizient. Dies führte zur Entwicklung von Swisscoms eigenem TV MW namens "EOS".

Bei der Einführung der Swisscom IP1400 (UHD) STB im Jahr 2016 wurde EOS als MW verwendet; kurz darauf wurde es auf die ältere IP1200 (HD) STB zurückportiert.

Architektur

EOS MW basiert auf den folgenden Gestaltungsprinzipien:

  • Einfachheit - EOS ist kein vollwertiger TV-MW. Es hat nicht die Absicht, den ganzen Schnickschnack eines allgemeinen kommerziellen TV-MWs zu enthalten. Er konzentriert sich nur auf IPTV-Funktionen (z. B. geht er davon aus, dass die Daten aus dem Netz kommen).
  • Geschwindigkeit - Der Betrieb von IPTV-Streams sollte so schnell wie möglich sein.
  • Datenkontrolle - Die Datenkontrolle ist entscheidend für eine optimale IPTV-Streamwiedergabe. Das korrekte Abrufen, Einspeisen und Flushen der Streamdaten ist ein Muss.
  • Portabilität - Es sollte möglich sein, ohne großen Aufwand auf ein anderes STB-SoC umzusteigen.
  • Erweiterbarkeit - Es unterstützt die von Swisscom TV benötigten Funktionen, kann aber bei Bedarf leicht erweitert werden.

Allgemeine Architektur

EOS ist in vier Schichten unterteilt (Abbildung 1):

  • System - Eine Reihe von Funktionen für die Portierung von Betriebssystemen und einige allgemeine Dienstprogramme, die in EOS verwendet werden.
  • Streaming - Module für die Zuführung, Verarbeitung und Wiedergabe von Streams.
  • Core - Module, die Kernfunktionen bereitstellen.
  • API - Native API-Definition und Java-bezogene Funktionalitäten und APIs.

System

Die Systemschicht schafft eine Basisumgebung für den Rest des MW. OS Interface (OSI) und Dienstprogramme sind Mitglieder der Systemschicht.

EOS zielt auf das Android-Betriebssystem ab, kann aber grundsätzlich auch auf andere Betriebssysteme portiert werden. Der Einfachheit halber nutzt EOS nur eine kleine Teilmenge der Betriebssystemfunktionen:

  • Speicherverwaltung
  • Themen
  • Semaphores
  • Mutexes
  • Time primitives

Für jede Funktion gibt es ein eigenes Modul und eine POSIX-Implementierung (kompatibel mit Android bionic libc). Zusätzlich zur Betriebssystemschnittstelle gibt es verschiedene Dienstprogramme, die über EOS genutzt werden.

Beispiele dafür sind:

  • Logging
  • Message queue
  • Message queue
  • Ring buffer

Streaming

Die Verarbeitung der Stream-Daten erfolgt in der Stream-Schicht.

EOS kennt drei Arten von Stream-Handling-Modulen:

  • Quellen - Verantwortlich für die Medienerkennung und das Abrufen von Daten. In der Praxis implementieren sie Unterstützung für die benötigten IPTV-Protokolle (z.B. RTP, HLS, ...).
  • Prozessoren - Verarbeiten die Daten (z. B. Aufnehmen, Remuxen, ...).
  • Sinks - Verantwortlich für die Medienwiedergabe und die Wiedergabesteuerung.

Alle drei Arten von Stream-Handling-Modulen haben zwei Arten von Funktionen:

  • Erforderlich - Definierte Funktionen, die ein Modul haben muss (z. B. Start, Stopp, ...).
  • Fähigkeiten - Funktionalitäten, die je nach Art des Moduls implementiert werden können (z. B. Trick-Play, Titelauswahl, ...).

Quellen und Prozessoren sollten plattformunabhängig sein (müssen es aber nicht). Senken hingegen sind von Natur aus an die Plattform gebunden. Um die Plattform optimal zu nutzen, gibt es bei EOS eine besondere Art von Senke - den Cron-Player. Diese Senke muss "zeitbasierte APIs" implementieren. Diese APIs sind so konzipiert, dass sie die Wiedergabeleistung maximieren, indem sie sich auf die zeitbezogenen Merkmale des Streams konzentrieren.

Kern

Die Verwaltung des Streamings, der Stream-Metadaten und der Wiedergabesteuerung erfolgt in der Kernschicht.

EOS kann eine oder mehrere Streaming-Sitzungen haben. Jede Sitzung wird als "Kette" bezeichnet. Eine Kette besteht aus einer Quelle, null oder mehr Prozessoren und einer Senke. Das Modul, das für die Erstellung, das Recycling und die Zerstörung der Kette verantwortlich ist, heißt Kettenmanager.

Der Kettenmanager prüft die verfügbaren Quellen für eine bestimmte URL. Anschließend werden je nach Ausgangsart der Quelle und den unterstützten Fähigkeiten alle notwendigen Prozessorelemente angeschlossen und am Ende wird die Senke angeschlossen.

Jede Kette hat einen zugewiesenen Playback Controller und einen Datenmanager. Der Playback Controller kümmert sich um die Wiedergabe (z. B. Play, Stop, Trick-Play, ...), während der Datenmanager die Metadaten des Streams verwaltet (z. B. Videotext, Untertitel, ...). Der Datenmanager verwaltet eine Reihe von Kernmodulen, die Engines. Engines sind plattformunabhängige Stream-Metadaten-Parser und Aggregatoren. Sie werden an die Kette angehängt, wenn solche Metadaten im Stream vorhanden sind.

API

Die API-Schicht besteht aus zwei Teilen:

  • Native API - Einfacher Wrapper um die Kernschicht, der die EOS-Funktionen zugänglich macht.
  • Java API - Eine Reihe von Java-Klassen, die EOS-Funktionen für die Java-Anwendung bereitstellen.

Die Java-APIs basieren auf der JNI-Schnittstelle, die die nativen EOS-APIs verwendet.

Erweiterungspunkte

Die Hauptfunktionen von EOS werden durch die Anforderungen von Swisscom TV bestimmt. Da es sich dabei nicht um eine begrenzte Anzahl von Anforderungen handelt, war es sehr wichtig, eine Architektur zu haben, die die Möglichkeit bietet, die unterstützten Funktionen einfach zu erweitern.Offensichtliche Erweiterungspunkte befinden sich in der Streaming-Schicht. Wenn ein neues Streaming-Protokoll unterstützt werden soll, muss eine neue Quelle erstellt oder eine bestehende erweitert werden. Das Gleiche gilt für die Streaming-Verarbeitung und die Prozessormodule.

In der Kernschicht sind zwei Dienste erweiterbar: die Wiedergabesteuerung und die Engines. Die Wiedergabesteuerung kann angepasst werden, um neue Anforderungen zu erfüllen. Wenn zum Beispiel ein Aufzeichnungsdienst eingebunden werden soll, muss die Wiedergabesteuerung erweitert werden, um ein solches Szenario zu unterstützen. Die Standard-Wiedergabesteuerung ist vorbereitet und kann für allgemeine Wiedergabeszenarien verwendet werden. Neue Engines können erforderlich sein, wenn zusätzliche Metadaten geparst werden müssen. Ein Beispiel dafür wäre das Hinzufügen von "Now/Next"-Unterstützung direkt aus MPEG TS EIT-Tabellen.

Source code

Der Quellcode von EOS ist auf https://github.com/swisscom/eos(öffnet ein neues Fenster) öffentlich zugänglich.

Zwei externe Pakete werden mit dem EOS-Quellcode ausgeliefert:

Aufgrund der Softwarelizenzbeschränkungen konnten wir nur die grundlegenden Streaming-Module veröffentlichen: die Dateiquelle und die PC/Linux-basierte Cron-Player-Senke. Damit solltest du genug Informationen haben, um die von dir benötigten Quellen/Protokolle zu implementieren und den Cron Player auf deine Zielplattform zu portieren. Der Quellcode wird unter der BSD 3-Clause License veröffentlicht.

Wir hoffen, dass du EOS in deiner Umgebung nützlich findest.

Lukas Hohl

Lukas Hohl

Leader for Teams Development

Mehr getIT-Beiträge

Bereit für Swisscom

Finde deinen Job oder die Karrierewelt, die zu dir passt. In der du mitgestalten und dich weiterentwickeln willst.

Was du draus machst, ist was uns ausmacht.

Zu den Karrierewelten

Zu den offenen Security Stellen