TV-Eingabe-Framework

Android TV HAL-Symbol

Das Android TV Input Framework (TIF) vereinfacht die Bereitstellung von Liveinhalten auf Android TV. Der Android TIF bietet eine Standard-API für Hersteller, um Eingabemodule zur Steuerung von Android TV zu erstellen. Außerdem ermöglicht er die Suche und Empfehlungen für Live-TV über Metadaten, die vom TV-Eingabegerät veröffentlicht werden.

Das Framework soll keine TV-Standards oder regionalen Anforderungen implementieren, sondern es Geräteherstellern erleichtern, regionale Standards für digitale TV-Übertragungen ohne Neuimplementierung einzuhalten. Die Dokumentation in diesem Abschnitt kann auch für Entwickler von Drittanbieter-Apps nützlich sein, die benutzerdefinierte TV-Eingänge erstellen möchten.

Komponenten

Die Implementierung des Android TV-Eingabe-Frameworks umfasst einen TV-Eingabemanager. Der TIF funktioniert mit der TV App, einer System-App, die nicht durch eine Drittanbieter-App ersetzt werden kann, um auf integrierte und IP-Tuner-Kanäle zuzugreifen. Die TV-App kommuniziert über den TV Input Manager mit TV-Eingabemodulen, die vom Gerätehersteller oder von anderen Anbietern stammen.

Das TV Input Framework besteht aus:

  • TV-Anbieter (com.android.providers.tv.TvProvider): Datenbank mit Kanälen, Programmen und zugehörigen Berechtigungen
  • TV-App (com.android.tv.TvActivity): Die App, die die Interaktion der Nutzer verarbeitet.
  • TV Input Manager (android.media.tv.TvInputManager): Ermöglicht die Kommunikation der TV-Eingänge mit der TV-App.
  • TV-Eingang: Eine App, die physische oder virtuelle Tuner und Eingangsporten darstellt
  • HAL für TV-Eingabe (tv_input-Modul): Eine Hardwaredefinition, die es den TV-Eingängen des Systems ermöglicht, bei Implementierung auf TV-spezifische Hardware zuzugreifen.
  • Jugendschutzeinstellungen: Technologie, mit der Kanäle und Programme blockiert werden können
  • HDMI-CEC: Technologie zur Fernsteuerung verschiedener Geräte über HDMI
  • Tuner Framework: ein Framework für den TV-Eingang mit integriertem Tuner
  • MediaCas: ein Framework für den bedingten Zugriff
  • Tuner Resource Manager: Dienst zum Verwalten der Hardwareressourcen für TV-Eingabe, MediaCas und integrierten Tuner

Diese Komponenten werden unten ausführlich beschrieben. Das folgende Diagramm zeigt eine detaillierte Ansicht der Architektur des Android TV-Eingabe-Frameworks.

Übersicht über die Android-TIF-Architektur
Abbildung 1. Architektur des Android TV-Eingabe-Frameworks (TIF)

Fließen

So wird die Architektur genutzt:

  1. Der Nutzer sieht und interagiert mit der TV App, einer System-App, die nicht durch eine Drittanbieter-App ersetzt werden kann.
  2. Die TV App zeigt die AV-Inhalte vom TV-Eingang an.
  3. Die TV App kann nicht direkt mit den TV-Eingängen kommunizieren. Der TV-Eingabemanager identifiziert den Status der TV-Eingänge für die TV-App. Weitere Informationen zu diesen Einschränkungen finden Sie unten unter TV-Eingabemanager.

Berechtigungen

  • Nur signatureOrSystem TV-Eingänge und die TV-App haben vollen Zugriff auf die Datenbank des TV-Anbieters und können Tastenereignisse empfangen.
  • Nur System-TV-Eingänge können über den TV Input Manager-Dienst auf die TV Input HAL zugreifen. Der Zugriff auf TV-Eingänge erfolgt über TV Input Manager-Sitzungen.
  • TV-Inputs von Drittanbietern haben paketbasierten Zugriff auf die Datenbank des TV-Anbieters und können nur auf übereinstimmende Paketzeilen LESEN/SCHREIBEN.
  • Auf den TV-Eingängen von Drittanbietern können entweder eigene Inhalte oder Inhalte von Passthrough-TV-Eingängen eines Geräteherstellers wie HDMI 1 angezeigt werden. Inhalte von TV-Eingängen ohne Passthrough, z. B. von einem integrierten oder IPTV-Tuner, können nicht angezeigt werden.
  • Die TV_INPUT_HARDWARE-Berechtigung für eine Hardware-TV-Eingabe-App signalisiert dem TV-Eingabe-Manager-Dienst, den TV-Eingabedienst beim Starten zu benachrichtigen, den TV-Eingabe-Manager-Dienst aufzurufen und seine TV-Eingaben hinzuzufügen. Mit dieser Berechtigung kann eine Hardware-TV-Eingabe-App mehrere TV-Eingänge pro TV-Eingabedienst unterstützen und die unterstützten TV-Eingänge dynamisch hinzufügen und entfernen.

TV-Anbieter

In der Datenbank des TV-Anbieters werden die Kanäle und Programme aus den TV-Eingängen gespeichert. Der TV-Anbieter veröffentlicht und verwaltet auch die zugehörigen Berechtigungen, damit TV-Inputs nur ihre eigenen Datensätze sehen können. So kann ein bestimmter TV-Eingang beispielsweise nur die von ihm bereitgestellten Kanäle und Programme sehen und darf nicht auf die Kanäle und Programme anderer TV-Eingänge zugreifen.

Der TV-Anbieter ordnet das „Genre der Ausstrahlung“ intern dem „kanonischen Genre“ zu. Über TV-Eingabedaten wird „Genre der Ausstrahlung“ mit dem Wert im zugrunde liegenden Übertragungsstandard ausgefüllt. Das Feld „Kanonisches Genre“ wird automatisch mit dem korrekten zugehörigen Genre aus android.provider.TvContract.Genres ausgefüllt. Bei einem Übertragungsstandard von ATSC A/65 und einem Programm mit dem Genre 0x25 (d. h. „Sport“) füllt der TV-Eingang das Feld „Genre der Übertragung“ mit dem String „Sport“ und der TV-Anbieter das Feld „Kanonisches Genre“ mit dem zugeordneten Wert android.provider.TvContract.Genres.SPORTS aus.

Im Diagramm unten findest du eine detaillierte Ansicht des TV-Anbieters.

Android TV-Anbieter
Abbildung 2. Android TV-Anbieter

Nur Apps in der privilegierten Systempartition können die gesamte TV-Anbieterdatenbank lesen.

Bei Passthrough-TV-Eingängen werden keine Kanäle und Programme gespeichert.

Zusätzlich zu den Standardfeldern für Kanäle und Programme bietet die Datenbank des TV-Anbieters in jeder Tabelle ein BLOB-Feld vom Typ COLUMN_INTERNAL_PROVIDER_DATA, das von TV-Eingängen zum Speichern beliebiger Daten verwendet werden kann. Diese BLOB-Daten können benutzerdefinierte Informationen wie die Frequenz des zugehörigen Tuners enthalten und in einem Protokollpuffer oder in einem anderen Format bereitgestellt werden. Mit einem Suchfeld kannst du bestimmte Kanäle in der Suche deaktivieren, z. B. um länderspezifische Anforderungen zum Schutz von Inhalten zu erfüllen.

Beispiele für Datenbankfelder

Der TV-Anbieter unterstützt strukturierte Daten in Kanaltabellen (android.provider.TvContract.Channels) und Programmtabellen (android.provider.TvContract.Programs). Diese Tabellen werden von TV-Eingängen und System-Apps wie der TV-App ausgefüllt und darauf zugegriffen. Sie enthalten vier Arten von Feldern:

  • Anzeigen : Anzeigefelder enthalten Informationen, die Apps für Nutzer sichtbar machen können, z. B. den Namen (COLUMN_DISPLAY_NAME) oder die Nummer (COLUMN_DISPLAY_NUMBER) eines Kanals oder den Titel des gerade wiedergegebenen Programms.
  • Metadaten: Es gibt drei Felder zur Identifizierung von Inhalten gemäß den relevanten Standards, z. B. die Transportstream-ID (COLUMN_TRANSPORT_STREAM_ID), die Originalnetzwerk-ID (COLUMN_ORIGINAL_NETWORK_ID) und die Dienst-ID (COLUMN_SERVICE_ID) eines Kanals.
  • Interne Daten: Felder für die benutzerdefinierte Verwendung von TV-Eingängen.
    Einige Felder wie COLUMN_INTERNAL_PROVIDER_DATA sind benutzerdefinierte BLOB-Felder, in denen ein TV-Eingang beliebige Metadaten zu seinem Kanal oder Programm speichern kann.
  • Flag : Mit Flag-Feldern wird angegeben, ob ein Kanal in der Suche, in der Übersicht oder bei der Wiedergabe eingeschränkt werden soll. Diese Einstellung kann nur auf Kanalebene festgelegt werden. Für alle Programme gilt die Einstellung auf dem Kanal.
    • COLUMN_SEARCHABLE: In bestimmten Regionen kann es erforderlich sein, die Suche über bestimmte Kanäle einzuschränken. COLUMN_SEARCHABLE = 0 bedeutet, dass der Kanal nicht in den Suchergebnissen angezeigt werden soll.
    • COLUMN_BROWSABLE: Nur für Systemanwendungen sichtbar. Einschränken, dass der Channel von Anwendungen durchsucht werden kann. COLUMN_BROWSABLE = 0 bedeutet, dass der Kanal nicht in die Kanalliste aufgenommen werden soll.
    • COLUMN_LOCKED: Nur für Systemanwendungen sichtbar. Der Kanal kann nicht mehr von ungültigen Konten ohne Eingabe einer PIN angesehen werden. COLUMN_LOCKED = 1 bedeutet, dass der Kanal durch Jugendschutzeinstellungen geschützt sein sollte.

Eine vollständige Liste der Felder finden Sie unter android/frameworks/base/media/java/android/media/tv/TvContract.java.

Berechtigungen und Zugriffssteuerung

Alle Felder sind für alle Nutzer sichtbar, die Zugriff auf die entsprechende Zeile haben. Nutzer können nicht direkt auf Felder zugreifen. Sie sehen nur, was in der TV-App, in System-Apps oder in den TV-Eingängen angezeigt wird.

  • Jede Zeile hat PACKAGE_NAME, das Paket (die App), zu dem die Zeile gehört, und wird über TvProvider.java auf Abfrage, Einfügen und Aktualisieren geprüft. Ein TV-Eingang kann nur auf die von ihm geschriebenen Informationen zugreifen und ist von den Informationen anderer TV-Eingänge getrennt.
  • LESE- und SCHREIBBENUTZERRECHTE über AndroidManifest.xml (erfordert die Einwilligung des Nutzers), um verfügbare Kanäle zu ermitteln.
  • Nur signatureOrSystem-Apps können die Berechtigung ACCESS_ALL_EPG_DATA zum Zugriff auf die gesamte Datenbank erhalten.

TV-Eingangsmanager

Der TV Input Manager stellt eine zentrale System-API für das gesamte Android TV-Eingabe-Framework bereit. Er verwaltet die Interaktion zwischen Apps und TV-Eingängen und bietet Jugendschutzfunktionen. TV Input Manager-Sitzungen müssen genau mit den TV-Eingängen übereinstimmen. Der TV-Eingabemanager ermöglicht den Zugriff auf installierte TV-Eingänge, damit Apps Folgendes tun können:

  • TV-Eingänge auflisten und ihren Status prüfen
  • Sitzungen erstellen und Zuhörer verwalten

Bei Sitzungen kann ein TV-Eingang von der TV-App nur auf URIs eingestellt werden, die der TV-Anbieterdatenbank hinzugefügt wurden. Eine Ausnahme bilden Passthrough-TV-Eingänge, die über TvContract.buildChannelUriForPassthroughInput() eingestellt werden können. Die Lautstärke eines Fernseheingangs kann auch eingestellt sein. TV-Eingänge, die vom Gerätehersteller bereitgestellt und signiert wurden (Signatur-Apps), oder andere Apps, die in der Systempartition installiert sind, haben Zugriff auf die gesamte Datenbank des TV-Anbieters. Mit diesem Zugriff können Apps erstellt werden, mit denen alle verfügbaren TV-Kanäle und -Programme durchsucht werden können.

Eine App kann eine TvInputCallback mit der android.media.tv.TvInputManager erstellen und registrieren, um bei einer Statusänderung eines TV-Eingangs oder beim Hinzufügen oder Entfernen eines TV-Eingangs zurückgerufen zu werden. So kann eine TV-App beispielsweise reagieren, wenn ein TV-Eingang getrennt ist, indem sie ihn als getrennt anzeigt und die Auswahl verhindert.

Der TV-Eingangsmanager abstrahiert die Kommunikation zwischen der TV-App und den TV-Eingängen. Die Standardoberfläche von TV Input Manager und TV Input ermöglicht es mehreren Geräteherstellern, eigene TV-Apps zu erstellen und gleichzeitig dafür zu sorgen, dass alle TV-Eingänge von Drittanbietern in allen TV-Apps funktionieren.

TV-Eingänge

TV-Eingänge sind Android-Apps, da sie eine AndroidManifest.xml-Datei haben und installiert sind (über Play, vorinstalliert oder per Sideload). Android TV unterstützt vorinstallierte System-Apps, vom Gerätehersteller signierte Apps und TV-Eingabegeräte von Drittanbietern.

Einige Eingänge, z. B. der HDMI-Eingang oder der Eingang des integrierten Tuners, können nur vom Hersteller bereitgestellt werden, da sie direkt mit der zugrunde liegenden Hardware kommunizieren. Andere, z. B. IPTV, Placeshifting und externe STBs, können von Drittanbietern als APKs im Google Play Store bereitgestellt werden. Nach dem Herunterladen und Installieren kann die neue Eingabe in der TV App ausgewählt werden.

Beispiel für eine Durchlasseingabe

Android TV-Systemeingabe
Abbildung 3: Android TV-Systemeingabe

In diesem Beispiel ist der vom Gerätehersteller bereitgestellte TV-Eingang vertrauenswürdig und hat vollen Zugriff auf den TV-Anbieter. Da es sich um einen Passthrough-TV-Eingang handelt, werden keine Kanäle oder Programme beim TV-Anbieter registriert. Um den URI abzurufen, der für die Referenzierung der Passthrough-Eingabe verwendet wird, verwende die android.media.tv.TvContractbuildChannelUriForPassthroughInput(String inputId)-Hilfsmethode. Die TV-App kommuniziert mit dem TV-Eingangsmanager, um den HDMI-Eingang des Fernsehers zu erreichen.

Beispiel für einen integrierten Tuner

Eingebauter Tuner von Android TV
Abbildung 4: Integrierter Tunereingang von Android TV

In diesem Beispiel ist der vom Gerätehersteller bereitgestellte integrierte Tuner-TV-Eingang vertrauenswürdig und hat vollen Zugriff auf den TV-Anbieter.

Beispiel für Drittanbietereingaben

Eingabe von Drittanbietern in Android TV
Abbildung 5. Eingabe von Drittanbietern in Android TV

In diesem Beispiel wird der externe STB-TV-Eingang von einem Drittanbieter bereitgestellt. Da dieser TV-Eingang nicht direkt auf den eingehenden HDMI-Videofeed zugreifen kann, muss er den TV-Eingabemanager durchlaufen und den vom Gerätehersteller bereitgestellten HDMI-TV-Eingang verwenden.

Über den TV-Eingangsmanager kann der externe STB-TV-Eingang mit dem HDMI-TV-Eingang kommunizieren und ihn bitten, das Video auf HDMI 1 anzuzeigen. So kann der STB-TV-Eingang den Fernseher steuern, während das Video vom vom Hersteller bereitgestellten HDMI-TV-Eingang gerendert wird.

Beispiel für die Funktion „Bild im Bild“ (PIP)

Android TV-Tastatur-Ereignisse
Abbildung 6: Android TV-Tastatur-Ereignisse

Das Diagramm oben zeigt, wie Tasten auf einer Fernbedienung an eine bestimmte TV-Eingabe für die PIP-Anzeige (Picture-in-Picture) übergeben werden. Diese Tastendrücke werden vom vom Gerätehersteller bereitgestellten Hardwaretreiber interpretiert, der Hardware-Scancodes in Android-Tastencodes umwandelt und sie als Tastatur-Ereignisse an die standardmäßige Android-Eingabepipeline InputReader und InputDispatcher weitergibt. Diese lösen wiederum Ereignisse in der TV App aus, wenn sie im Fokus ist.

Nur System-TV-Eingänge können InputEvents empfangen und nur, wenn sie die Systemberechtigung RECEIVE_INPUT_EVENT haben. Der TV-Eingang ist dafür verantwortlich, zu bestimmen, welche Eingabeereignisse verarbeitet werden sollen. Außerdem sollte er es der TV-App ermöglichen, die Tasten zu verarbeiten, die nicht verarbeitet werden müssen.

Die TV-App muss wissen, welcher System-TV-Eingang aktiv ist, d. h. vom Nutzer ausgewählt wurde, und eingehende KeyEvents-Nachrichten eindeutig zuordnen und an die richtige TV Input Manager-Sitzung weiterleiten. Dazu ruft sie dispatchInputEvent() auf, um das Ereignis an den zugehörigen TV-Eingang weiterzuleiten.

Beispiel für eine MHEG-5-Eingabe

Das folgende Diagramm zeigt eine detailliertere Ansicht, wie KeyEvents durch den Android-TIF geleitet werden.

Beispiel für die rote Schaltfläche von Android TV
Abbildung 7. Beispiel für die rote Schaltfläche von Android TV

Es zeigt den Ablauf einer App mit roter Taste, die in Europa häufig verwendet wird, um Nutzern den Zugriff auf interaktive Apps auf ihren Fernsehern zu ermöglichen. Eine App kann über diesen Transportstream bereitgestellt werden. Wenn Nutzer auf die Schaltfläche klicken, können sie mit diesen Übertragungs-Apps interagieren. Sie können diese Übertragungs-Apps beispielsweise verwenden, um auf zugehörige Webseiten oder Sportergebnisse zuzugreifen.

Im Abschnitt Übertragungs-App erfährst du, wie Übertragungs-Apps mit der TV App interagieren.

In diesem Beispiel:

  1. Die TV-App hat den Fokus und empfängt alle Tasten.
  2. KeyEvents (z.B. die rote Taste) wird an den aktiven Fernseher übergeben Eingabe als InputEvents.
  3. Der TV-Eingang des Systems ist in den MHEG-5-Stack eingebunden und hat die Systemberechtigung RECEIVE_INPUT_EVENT.
  4. Wenn der Aktivierungscode (z.B. die rote Taste) empfangen wird, aktiviert die TV-Eingabe die Übertragungs-App.
  5. Der TV-Eingang belegt KeyEvents als InputEvents. Die Übertragungs-App ist im Fokus und verarbeitet InputEvents, bis sie geschlossen wird.

Hinweis: TV-Eingänge von Drittanbietern erhalten nie Schlüssel.

HAL für TV-Eingang

Die HAL für TV-Eingänge unterstützt die Entwicklung von TV-Eingängen für den Zugriff auf fernseherspezifische Hardware. Wie bei anderen Android-HALs ist die TV Input HAL (tv_input) im AOSP-Quellbaum verfügbar und der Anbieter entwickelt die Implementierung.

Hinweis: Ab Android 14 wird die HAL-Schnittstelle für den Fernseher-Eingang mit AIDL definiert.

TV-App

Die TV-App des Systems bietet dem Nutzer Live-TV-Inhalte. Neben der Android-Plattform wird eine Referenz-TV-App (Live-TV) bereitgestellt, die von Geräteherstellern unverändert verwendet, angepasst, erweitert oder ersetzt werden kann. Der Quellcode ist im Android Open Source Project verfügbar. Im Artikel Referenz-TV-App finden Sie eine Anleitung zum Einstieg.

Gerätehersteller können ihre TV-Apps erweitern, um geräte- oder länderspezifische Funktionen zu implementieren. Dies fällt jedoch nicht in den Geltungsbereich der TIF oder der Referenz-TV-App.

Die TV-App des Systems muss mindestens die folgenden Aufgaben bewältigen:

Einrichtung und Konfiguration

  • TV-Eingänge automatisch erkennen
  • Kanaleinrichtung über TV-Eingänge starten
  • Jugendschutzeinstellungen verwalten
  • Kanäle bearbeiten

Aktuelle Ansicht

  • Auf alle TV-Kanäle zugreifen und sie nutzen
  • Auf die Informationsleiste für Fernsehprogramme zugreifen
  • EPG-Daten (Electronic Programming Guide) anzeigen
  • Unterstützung mehrerer Audio- und Untertiteltracks
  • PIN-Abfrage für Jugendschutzeinstellungen
  • UI-Overlay für TV-Eingang für TV-Standards (z. B. HbbTV) zulassen
  • Suchergebnisse für TV-Kanäle und -Programme füllen
  • Karten zur App-Verknüpfung anzeigen
  • Unterstützung von APIs für Zeitversetztes Ansehen
  • DVR-Funktionen verarbeiten und APIs für die TV-Aufzeichnung unterstützen

Dieser Funktionsumfang wird mit neuen Android-Versionen erweitert, in denen die TIF-APIs der Plattform erweitert werden. CTS Verifier bietet die Abdeckung der Kompatibilitätstests.

Unterstützung für TV-Eingänge von Drittanbietern

Android TV bietet Entwickler-APIs für TV-Eingabegeräte von Drittanbietern, mit denen installierte Apps Softwarekanäle in das Live-TV-Erlebnis einbinden können. Um eine kompatible Android-Geräteimplementierung zu ermöglichen, hat die TV-App des Systems einige Aufgaben im Hinblick auf die Bereitstellung von TV-Eingängen und ‑Kanälen von Drittanbietern für den Nutzer. Die Referenz-Live-TV-App bietet eine kompatible Implementierung. Wenn die System-TV-App ersetzt wird, müssen Gerätehersteller dafür sorgen, dass ihre eigenen Apps eine ähnliche Kompatibilität bieten, um die Erwartungen der Entwickler auf allen Android TV-Geräten zu erfüllen.

Die TV-App des Systems muss Eingaben von Drittanbietern neben dem Standard-Live-TV-Dienst des Geräts anzeigen. Die Entwickler-APIs sollen es Nutzern ermöglichen, Kanäle (nach der Installation) in ihrer Standard-TV-Umgebung zu finden.

Eine visuelle Unterscheidung zwischen integrierten Kanälen und Drittanbieterkanälen ist gemäß den Angaben im Abschnitt „TV-App“ der Android-CDD zulässig.

In den folgenden Abschnitten wird gezeigt, wie die Live-TV-Anwendung die Anforderungen der CDD erfüllt.

Neue Kanaleinrichtung

Das Hinzufügen neuer Eingaben/Kanäle von Drittanbietern beginnt damit, dass der Nutzer einen TV-Eingang in einem App-Shop wie Google Play findet und installiert.

Einige TV-Eingänge von Drittanbietern fügen der Datenbank „TvProvider“ automatisch Kanäle hinzu. Die meisten bieten jedoch eine Einrichtungsaktivität, mit der Nutzer ihre Kanäle einrichten, Anmeldedaten angeben und andere Aktionen ausführen können. Die TV-App des Systems muss dafür sorgen, dass der Nutzer diese Einrichtungsaktivität aktivieren kann. Deshalb müssen Eingaben von Drittanbietern gemäß der CDD nur minimale Navigationsaktionen von der Haupt-TV-App entfernt sein.

Die Referenz-Live-TV-App bietet das Menü „Kanalquellen“, über das auf Eingaben zugegriffen werden kann.

Zu den Einstellungen
Abbildung 8. Gehen Sie zu den Einstellungen.

Rufen Sie in den Einstellungen die Kanalquelle auf.
Abbildung 9. Gehen Sie in den Einstellungen zu Kanalquellen.

Wählen Sie die gewünschte Quelle aus der Liste aus.
Abbildung 10. Wählen Sie die gewünschte Quelle aus der Liste aus.

Kanäle aus der Quelle hinzufügen
Abbildung 11. Füge Kanäle aus deiner Quelle hinzu.

Außerdem wird oben im Menü der TV-App nach der Installation eines neuen TvInput eine Benachrichtigungskarte angezeigt, über die der Nutzer direkt zur Einrichtung weitergeleitet wird:

Benachrichtigung, dass neue Kanalquellen verfügbar sind
Abbildung 12. Benachrichtigung, dass neue Kanalquellen verfügbar sind

Wenn der Nutzer über die Benachrichtigung eine Aktion ausführt, kann er seine Quellen wie in Abbildung 10 gezeigt einrichten.

Informationen zu den Erwartungen an Entwickler in diesem Bereich finden Sie unter TV-Eingabedienst definieren.

Kanalliste anpassen

Gerätehersteller können eine Benutzeroberfläche bereitstellen, mit der bestimmte Kanäle ausgeblendet und Nutzer in die Lage versetzt werden, eigene EPGs zu verwalten. Diese Funktion ist auch bei Live-TV verfügbar.

Öffne die Kanalliste in den Einstellungen.
Abbildung 13. Öffne die Kanalliste in den Einstellungen.

Kanalliste anpassen
Abbildung 14. Kanalliste anpassen

EPG

Entwickler von Eingabegeräten von Drittanbietern müssen darauf vertrauen können, dass Nutzer bei der allgemeinen Nutzung auf allen kompatiblen Android TV-Geräten problemlos zu ihren Kanälen wechseln können.

Kanäle von Drittanbietern müssen im EPG des Standard-Live-TV-Dienstes des Geräts angezeigt werden. Es kann eine visuelle Trennung oder separate Kategorien für Drittanbieterkanäle verwendet werden (siehe Abschnitt „TV-App“ der Android-CDD). Wichtig ist, dass Nutzer die von ihnen installierten Kanäle finden können.

Hersteller müssen die TV-App so implementieren, dass Suchergebnisse für globale Suchanfragen enthalten sind, um die Nutzerfreundlichkeit zu optimieren. Live-TV bietet eine Implementierung (siehe ), die Ergebnisse von Drittanbietereingaben (erforderlich für die Plattformkompatibilität) sowie von integrierten Eingaben liefert.

Zeitverschiebung

Auf Geräten mit Android 6.0 und höher muss die TV-App die Time Shifting APIs des Android-Frameworks unterstützen. Außerdem müssen Hersteller Wiedergabesteuerungen in der TV-App implementieren, mit denen Nutzer die Wiedergabe pausieren, fortsetzen, zurückspulen und vorspulen können.

Bei TV-Eingängen, die Zeitverschiebung unterstützen, muss die TV-App Wiedergabesteuerungen anzeigen.

Wiedergabesteuerung
Abbildung 15. Wiedergabesteuerung

DVR

Auf Geräten mit Android 7.0 und höher muss die TV-App die Android-Framework-TV-Aufzeichnungs-APIs unterstützen, um aufgezeichnete Programme zu unterstützen, aufzulisten und abzuspielen.

So können Gerätehersteller ihre DVR-Subsysteme in TIF einbinden und den Integrationsaufwand für die Aktivierung oder Integration von DVR-Funktionen auf einem Fernseher erheblich reduzieren. Außerdem können Drittanbieter DVR-Systeme anbieten, die an ein Android TV-Gerät angeschlossen werden können.

Neben der Aufzeichnung von Live-Inhalten kümmert sich die TV App auch um Ressourcenkonflikte. Wenn das Gerät beispielsweise zwei Tuner hat, können zwei Programme gleichzeitig aufgezeichnet werden. Wenn der Nutzer drei Sendungen aufzeichnen möchte, muss die TV-App den Konflikt beheben und entweder eine Benachrichtigung anzeigen oder den Nutzer auffordern, eine Priorität für diese Aufzeichnungsanfragen festzulegen.

TV-Apps können auch eine ausgefeiltere Logik implementieren, z. B. Nutzer fragen, ob sie alle zukünftigen Folgen einer Serie aufnehmen möchten, wenn sie eine Folge aufzeichnen lassen möchten.

Das folgende Diagramm zeigt eine mögliche DVR-Implementierung in Android TV.

Digitale Videoaufzeichnung in Android TV
Abbildung 16 Digitale Videoaufzeichnung mit Android TV

  1. Der TV-Eingabedienst teilt der TV-App mit, wie viele Tuner verfügbar sind, damit die TV-App mögliche Ressourcenkonflikte bewältigen kann.
  2. Die TV-App erhält eine vom Nutzer initiierte Anfrage zum Aufzeichnen eines TV-Programms.
  3. Die TV App speichert den Aufnahmezeitplan in ihrer internen Datenbank.
  4. Wenn es an der Zeit ist, etwas aufzunehmen, sendet die TV-App eine Anfrage, um den mit der Aufnahme verknüpften Kanal zu suchen.
  5. Der TV-Eingabedienst empfängt diese Anfrage, antwortet, ob geeignete Ressourcen vorhanden sind, und wechselt zum Kanal.
  6. Die TV-App sendet dann eine Anfrage zum Starten der Aufnahme an den TV-Eingabemanager.
  7. Der TV-Eingabedienst empfängt diese Anfrage und startet die Aufzeichnung.
  8. Der TV-Eingabedienst speichert die tatsächlichen Videodaten in seinem Speicher, der ein externer Speicher oder ein Cloud-Speicher sein kann.
  9. Wenn die Aufnahme beendet werden soll, leitet die TV-App die entsprechende Anfrage an den TV-Eingabemanager weiter.
  10. Sobald der TV-Eingabedienst die Anfrage erhält, beendet er die Aufnahme und fügt dem TV-Anbieter die zugehörigen Metadaten hinzu, damit die TV-App die Aufnahme auf Anfrage Nutzern anzeigen kann.

Weitere Informationen zur Implementierung von Aufnahmefunktionen in deinem TV-Eingabedienst findest du im Artikel Aufzeichnungen von TV-Inhalten.

Nützliches Infomaterial

  • Die Android-CDD und die dokumentierten Entwickler-APIs sind die maßgeblichen Referenzen.
  • CTS Verifier testet die APIs im Rahmen des Kompatibilitätstests. Wenn Sie diese Funktion auf Live-TV anwenden, können Sie sich den EPG, die Suche, die Jugendschutzeinstellungen und andere Anforderungen im Kontext von Drittanbieter-Eingängen ansehen.
  • Informationen zu den Erwartungen an Entwickler in diesem Bereich finden Sie unter TV-Eingabedienst definieren.

Jugendschutzeinstellungen

Mit den Jugendschutzeinstellungen können Nutzer unerwünschte Kanäle und Programme blockieren, die Blockierung aber durch Eingabe einer PIN aufheben.

Die Verantwortung für die Jugendschutzeinstellungen liegt bei der TV-App, dem TV Input Manager-Dienst, dem TV-Anbieter und dem TV-Eingabegerät.

Jugendschutzeinstellungen sind obligatorisch und werden vom CTS Verifier abgedeckt.

Einige Länder haben Altersfreigabesysteme definiert, die über die TVContentRating API für TV-Eingabegeräte verwendet werden können. Außerdem können TV-Inputs ihre eigenen benutzerdefinierten Altersfreigabesysteme registrieren, wie im CTS-Verifier-Test gezeigt, bei dem eine „gefälschte“ Altersfreigabe eingeführt wird. In Ländern, in denen ein standardmäßiges Altersfreigabesystem vorhanden ist, werden Gerätehersteller dazu ermutigt, die Jugendschutzeinstellungen des TV Input Frameworks mit anderen Mechanismen zu kombinieren, die sie möglicherweise enthalten.

TV-Anbieter

Jede Kanalzeile enthält ein COLUMN_LOCKED-Feld, mit dem bestimmte Kanäle gesperrt werden können, damit sie nicht ohne Eingabe einer PIN angesehen werden können. Das Programmfeld COLUMN_CONTENT_RATING ist nur zur Anzeige vorgesehen und wird nicht zur Durchsetzung von Jugendschutzmaßnahmen verwendet.

TV-Eingangsmanager

Der TV Input Manager speichert jede blockierte TvContentRating und antwortet auf isRatingBlocked(), um anzugeben, ob Inhalte mit der angegebenen Altersfreigabe blockiert werden sollen.

TV-Eingang

Der TV-Eingang prüft, ob die aktuellen Inhalte blockiert werden sollen, indem er isRatingBlocked() auf dem TV-Eingangsmanager aufruft, wenn sich die Altersfreigabe der angezeigten Inhalte geändert hat (bei Programm- oder Kanalwechsel) oder sich die Jugendschutzeinstellungen geändert haben (bei ACTION_BLOCKED_RATINGS_CHANGED und ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED). Wenn die Inhalte blockiert werden sollen, deaktiviert der TV-Eingang die Audio- und Videowiedergabe und benachrichtigt die TV-App, dass die aktuellen Inhalte blockiert sind, indem er notifyContentBlocked(TvContentRating) aufruft. Wenn die Inhalte nicht blockiert werden sollen, aktiviert der TV-Eingang Audio und Video und benachrichtigt die TV-App, dass die aktuellen Inhalte zulässig sind, indem notifyContentAllowed() aufgerufen wird.

TV-App

Um die APIs für die Jugendschutzeinstellungen zu berücksichtigen und eine kompatible Plattform zu schaffen, muss die TV-App des Systems Nutzern die Möglichkeit bieten, die Jugendschutzeinstellungen zu verwalten, einschließlich aller benutzerdefinierten Altersfreigaben, die von bestimmten Apps registriert wurden.

Die TV App zeigt eine PIN-Eingabeoberfläche an, wenn sie von einem TV-Eingang darüber informiert wird, dass die aktuellen Inhalte blockiert sind, oder wenn der Nutzer versucht, sich einen blockierten Kanal anzusehen.

Die TV App speichert die Jugendschutzeinstellungen nicht direkt. Wenn der Nutzer die Jugendschutzeinstellungen ändert, wird jede blockierte TvContentRating vom TV Input Manager und blockierte Kanäle vom TV-Anbieter gespeichert.

Die TV-App muss die Berechtigung android.permission.MODIFY_PARENTAL_CONTROLS angeben, um die Jugendschutzeinstellungen ändern zu können.

Geräteherstellern wird empfohlen,

  • Führen Sie den CTS-Verifier-Test für die Jugendschutzeinstellungen an der Referenz-Live-TV-Anwendung aus, um die Kompatibilitätsanforderungen zu demonstrieren.
  • Verwenden Sie die Live-TV-App als Referenz für Ihre eigene TV-App. Sehen Sie sich insbesondere die Quellen ContentRatingsManager und RatingSystemsFragment an und wie dort mit benutzerdefinierten Altersfreigaben umgegangen wird.

HDMI-CEC

Mit HDMI-CEC kann ein Gerät ein anderes steuern, sodass mehrere Geräte in einem Heimkino mit einer einzigen Fernbedienung gesteuert werden können. Er wird von Android TV verwendet, um die Einrichtung zu beschleunigen und die Fernsteuerung verschiedener TV-Eingänge über die zentrale TV-App zu ermöglichen. So können Sie beispielsweise die Eingänge wechseln, Geräte ein- und ausschalten und vieles mehr.

Die Android-TIF implementiert HDMI-CEC als HDMI-Kontrolldienst, sodass Gerätehersteller nur Low-Level-Treiber entwickeln müssen, die mit der schlanken Android TV HAL interagieren. Komplexere Geschäftslogik entfällt. Mit einer Standardimplementierung möchte Android Kompatibilitätsprobleme durch reduzierte fragmentierte Implementierungen und selektive Funktionsunterstützung minimieren. Der HDMI-Kontrolldienst verwendet die vorhandenen Android-Dienste, einschließlich Eingabe und Stromversorgung.

Das bedeutet, dass vorhandene HDMI-CEC-Implementierungen neu gestaltet werden müssen, damit sie mit dem Android-TIF interagieren können. Wir empfehlen, dass die Hardwareplattform einen Mikroprozessor enthält, um CEC-Befehle zum Einschalten und andere Befehle zu empfangen.

CEC-Integration auf Android TV
Abbildung 17. CEC-Integration auf Android TV

  1. Der CEC-Bus empfängt von der aktuell aktiven Quelle einen Befehl, zu einer anderen Quelle zu wechseln.
  2. Der Treiber übergibt den Befehl an die HDMI-CEC HAL.
  3. Die HAL benachrichtigt alle ActiveSourceChangeListeners.
  4. Der HDMI-Steuerdienst wird über ActiveSourceChangeListener über die Quelländerung informiert.
  5. Der TV Input Manager-Dienst generiert eine Intent für die TV-App, um die Quelle umzuschalten.
  6. Die TV-App erstellt dann eine TV Input Manager-Sitzung für den TV-Eingang, zu dem gewechselt wird, und ruft setMain für diese Sitzung auf.
  7. Die TV Input Manager-Sitzung gibt diese Informationen an den HDMI-Fernsehereingang weiter.
  8. Der HDMI-Eingang des Fernsehers fordert die Einstellung der Sideband-Oberfläche an.
  9. Der TV Input Manager Service generiert einen entsprechenden Routing-Steuerbefehl zurück an den HDMI Control Service, wenn die Oberfläche festgelegt ist.

Richtlinien für die TV-Integration

Broadcast-App

Da jedes Land spezifische Anforderungen an die Übertragung hat (z. B. MHEG, Teletext, HbbTV), müssen Hersteller eigene Lösungen für die Übertragungs-App bereitstellen, z. B.:

  • MHEG: nativer Stack
  • Teletext: nativer Stack
  • HbbTV: HbbTV-Lösung von Vewd Software

In der Android L-Version erwarten wir von Geräteherstellern, dass sie Systemintegratoren oder die Android-Lösungen für regionale TV-Stacks verwenden, die Oberfläche an TV-Softwarestacks weitergeben oder den erforderlichen Schlüsselcode zur Interaktion mit Legacy-Stacks weitergeben.

So interagieren die Übertragungs-App und die TV-App:

  1. Die TV-App hat den Fokus und empfängt alle Tasten.
  2. Die TV-App übergibt Tasten (z.B. die rote Taste) an das TV-Eingabegerät.
  3. Das TV-Eingabegerät wird intern in den bisherigen TV-Stack eingebunden.
  4. Wenn das TV-Eingabegerät einen Aktivierungscode erhält (z.B. die rote Taste), aktiviert es Übertragungs-Apps.
  5. Eine Übertragungs-App ist in der TV App im Fokus und verarbeitet Nutzeraktionen.

Für die Sprachsuche/-empfehlung unterstützt die Übertragungs-App möglicherweise die In-App-Suche für die Sprachsuche.