TV Input Framework

Android TV-HAL-Symbol

Das Android TV Input Framework (TIF) vereinfacht die Bereitstellung von Liveinhalten für Android TV. Das Android TIF bietet Herstellern eine Standard-API zum Erstellen von Eingabemodulen für die Steuerung von Android TV. Außerdem ermöglicht es die Suche nach Live-TV und Empfehlungen über Metadaten, die vom TV-Eingang veröffentlicht werden.

Das Framework soll keine TV-Standards oder regionalen Anforderungen implementieren, sondern es Geräteherstellern erleichtern, regionale digitale TV-Übertragungsstandards ohne erneute Implementierung zu erfüllen. Die Dokumentation in diesem Abschnitt kann auch für Drittanbieter-App-Entwickler nützlich sein, die benutzerdefinierte TV-Eingänge erstellen möchten.

Komponenten

Die Implementierung des Android TV Input Framework umfasst einen TV Input Manager. Das 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-Eingangsmodulen, die vom Gerätehersteller oder anderen Parteien bereitgestellt werden.

Das TV Input Framework besteht aus:

  • TV-Anbieter (com.android.providers.tv.TvProvider): eine Datenbank mit Kanälen, Programmen und zugehörigen Berechtigungen
  • TV-App (com.android.tv.TvActivity): Die App, die die Nutzerinteraktion verarbeitet
  • TV Input Manager (android.media.tv.TvInputManager): Ermöglicht die Kommunikation zwischen den TV-Eingängen und der TV-App.
  • TV-Eingang: Eine App, die physische oder virtuelle Tuner und Eingabeports darstellt
  • TV Input HAL (tv_input-Modul): eine Hardwaredefinition, die es System-TV-Eingängen ermöglicht, auf TV-spezifische Hardware zuzugreifen, wenn sie implementiert ist
  • Jugendschutzeinstellungen: Technologie zum Blockieren von Kanälen und Programmen
  • HDMI-CEC: Technologie zur Fernsteuerung verschiedener Geräte über HDMI
  • Tuner Framework: Ein Framework für den TV-Eingang des integrierten Tuners
  • MediaCas: Ein Framework für den bedingten Zugriff
  • Tuner Resource Manager: ein Dienst zur Verwaltung der Hardwareressource für TV-Eingabe, MediaCas und Built-in-Tuner-Eingabe

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

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

Flow

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. In der TV-App werden die AV-Inhalte vom TV-Eingang angezeigt.
  3. Die TV-App kann nicht direkt mit den TV-Eingängen kommunizieren. Der TV Input Manager ermittelt den Status von TV‑Eingängen für die TV‑App. Weitere Informationen zu diesen Einschränkungen finden Sie unten im Abschnitt TV Input Manager.

Berechtigungen

  • Nur signatureOrSystem-TV-Eingänge und die TV-App haben vollen Zugriff auf die Datenbank des TV-Anbieters und können KeyEvents empfangen.
  • Nur System-TV-Eingänge können über den TV Input Manager-Dienst auf das TV Input HAL zugreifen. Auf TV-Eingänge wird über TV Input Manager-Sitzungen zugegriffen.
  • Drittanbieter-TV-Eingänge haben paketbezogenen Zugriff auf die Datenbank des TV-Anbieters und können nur in übereinstimmende Paketzeilen lesen und schreiben.
  • Auf TV-Eingängen von Drittanbietern können entweder eigene Inhalte oder Inhalte von Passthrough-TV-Eingängen des Geräteherstellers wie HDMI1 angezeigt werden. Sie können keine Inhalte von TV-Eingängen ohne Passthrough-Funktion wie einem integrierten oder IPTV-Tuner anzeigen.
  • Die Berechtigung TV_INPUT_HARDWARE für eine Hardware-TV-Eingabe-App signalisiert dem TV Input Manager Service, dass er den TV-Eingabedienst beim Start benachrichtigen soll, um den TV Input Manager Service aufzurufen und seine TV-Eingaben hinzuzufügen. Mit dieser Berechtigung kann eine Hardware-TV-Eingabe-App mehrere TV-Eingaben pro TV-Eingabedienst unterstützen und die unterstützten TV-Eingaben dynamisch hinzufügen und entfernen.

TV-Anbieter

In der TV-Anbieter-Datenbank werden die Kanäle und Programme von TV-Eingängen gespeichert. Der TV-Anbieter veröffentlicht und verwaltet auch die zugehörigen Berechtigungen, damit TV-Eingänge nur ihre eigenen Datensätze sehen können. Ein bestimmter TV-Eingang kann 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 „Broadcast-Genre“ intern dem „kanonischen Genre“ zu. TV-Eingaben sind dafür verantwortlich, dass das Feld „broadcast genre“ (Genre der Übertragung) mit dem Wert im zugrunde liegenden Übertragungsstandard gefüllt wird. Das Feld „canonical genre“ (kanonisches Genre) wird automatisch mit dem richtigen zugehörigen Genre aus android.provider.TvContract.Genres gefüllt. Bei ATSC A/65-Broadcast-Standard und einem Programm mit dem Genre 0x25 („Sport“) wird beispielsweise im TV-Eingang das Feld „broadcast genre“ mit dem String „Sports“ gefüllt und der TV-Anbieter füllt das Feld „canonical genre“ mit dem zugeordneten Wert android.provider.TvContract.Genres.SPORTS.

Im Diagramm unten sehen Sie 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 TV-Anbieter-Datenbank auch ein BLOB-Feld vom Typ COLUMN_INTERNAL_PROVIDER_DATA in jeder Tabelle, in dem TV-Eingänge beliebige Daten speichern können. Diese BLOB-Daten können benutzerdefinierte Informationen wie die Häufigkeit des zugehörigen Tuners enthalten und in einem Protokollpuffer oder einer anderen Form bereitgestellt werden. Mit dem Feld „Durchsuchbar“ können bestimmte Channels in der Suche deaktiviert werden, z. B. um länderspezifische Anforderungen für den Schutz von Inhalten zu erfüllen.

Beispiele für Datenbankfelder

Der TV-Anbieter unterstützt strukturierte Daten in den Tabellen für Sender (android.provider.TvContract.Channels) und Sendungen (android.provider.TvContract.Programs). Diese Tabellen werden von TV‑Eingängen und System-Apps wie der TV‑App gefüllt und auf sie wird zugegriffen. Sie enthalten vier Arten von Feldern:

  • Anzeige : Anzeigefelder enthalten Informationen, die Apps dem Nutzer möglicherweise anzeigen möchten, z. B. den Namen (COLUMN_DISPLAY_NAME) oder die Nummer (COLUMN_DISPLAY_NUMBER) eines Kanals oder den Titel der gerade angesehenen Sendung.
  • Metadaten:Es gibt drei Felder zur Identifizierung von Inhalten gemäß den relevanten Standards, z. B. die Transportstream-ID eines Kanals (COLUMN_TRANSPORT_STREAM_ID), die ursprüngliche Netzwerk-ID (COLUMN_ORIGINAL_NETWORK_ID) und die Dienst-ID (COLUMN_SERVICE_ID).
  • Interne Daten: Felder, die für die benutzerdefinierte Verwendung von TV-Eingaben vorgesehen sind.
    Einige Felder wie COLUMN_INTERNAL_PROVIDER_DATA sind anpassbare BLOB-Felder, in denen ein TV-Eingang beliebige Metadaten zu seinem Kanal oder Programm speichern kann.
  • Flag : Flag-Felder geben an, ob ein Kanal in der Suche, beim Browsen oder bei der Wiedergabe eingeschränkt werden soll. Diese Einstellung kann nur auf Kanalebene festgelegt werden. Alle Programme richten sich nach der Einstellung des jeweiligen Channels.
    • COLUMN_SEARCHABLE: In bestimmten Regionen kann es erforderlich sein, die Suche über einige 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 Anwendungen den Kanal durchsuchen können. COLUMN_BROWSABLE = 0 bedeutet, dass der Kanal nicht in der Kanalliste enthalten sein sollte.
    • COLUMN_LOCKED: Nur für Systemanwendungen sichtbar. Einschränken, dass der Kanal von ungültigen Konten angesehen werden kann, ohne dass eine PIN eingegeben werden muss. COLUMN_LOCKED = 1 bedeutet, dass der Kanal durch Jugendschutzeinstellungen geschützt werden sollte.

Eine ausführlichere Liste der Felder finden Sie unter android/frameworks/base/media/java/android/media/tv/TvContract.java.

Berechtigungen und Zugriffssteuerung

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

  • Jede Zeile hat PACKAGE_NAME, das Paket (die App), zu dem diese Zeile gehört. Sie wird bei Abfragen, Einfügungen und Aktualisierungen über TvProvider.java geprüft. Ein TV-Eingang kann nur auf die von ihm geschriebenen Informationen zugreifen und ist von den Informationen anderer TV-Eingänge abgeschottet.
  • LESE- und SCHREIBberechtigungen ü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 für den Zugriff auf die gesamte Datenbank erhalten.

TV Input Manager

Der TV Input Manager bietet eine zentrale System-API für das gesamte Android TV Input Framework. Sie vermittelt die Interaktion zwischen Apps und TV-Eingängen und bietet Funktionen zur Kindersicherung. TV Input Manager-Sitzungen müssen eins zu eins mit TV-Eingängen erstellt werden. Der TV Input Manager ermöglicht den Zugriff auf installierte TV-Eingänge, sodass Apps Folgendes tun können:

  • TV-Eingänge auflisten und 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 sie der TV-Provider-Datenbank hinzugefügt hat. Ausgenommen sind Passthrough-TV-Eingänge, die mit TvContract.buildChannelUriForPassthroughInput() eingestellt werden können. Für einen TV-Eingang kann auch die Lautstärke eingestellt werden. 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 TV-Anbieterdatenbank. Dieser Zugriff kann verwendet werden, um Apps zu erstellen, mit denen alle verfügbaren Fernsehkanäle und ‑programme durchsucht werden können.

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

Der TV Input Manager abstrahiert die Kommunikation zwischen der TV-App und den TV-Eingängen. Die Standardschnittstelle von TV Input Manager und TV Input ermöglicht es mehreren Geräteherstellern, eigene TV-Apps zu erstellen. Gleichzeitig können alle TV-Eingänge von Drittanbietern in allen TV-Apps verwendet werden.

TV-Eingänge

TV-Eingänge sind Android-Apps, da sie eine AndroidManifest.xml-Datei haben und über Play, vorinstalliert oder per Sideload installiert werden. Android TV unterstützt vorinstallierte System-Apps, Apps, die vom Gerätehersteller signiert wurden, und TV-Eingänge 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, Place-Shifting und externe STBs, können von Drittanbietern als APKs im Google Play Store bereitgestellt werden. Nach dem Herunterladen und Installieren kann der neue Eingang in der TV-App ausgewählt werden.

Beispiel für Passthrough-Eingabe

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. Als Passthrough-TV-Eingang werden keine Kanäle oder Programme beim TV-Anbieter registriert. Verwenden Sie die Hilfsmethode buildChannelUriForPassthroughInput(String inputId), um den URI abzurufen, der zum Verweisen auf die Passthrough-Eingabe verwendet wird.android.media.tv.TvContract Die TV-App kommuniziert mit dem TV Input Manager, um den HDMI-TV-Eingang zu erreichen.

Beispiel für einen eingebauten Tuner

Eingang für integrierten Tuner von Android TV
Abbildung 4: Eingang für integrierten Tuner von Android TV

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

Beispiel für Eingaben von Drittanbietern

Android TV-Eingabe von Drittanbietern
Abbildung 5. Eingabe von Drittanbietern für Android TV

In diesem Beispiel wird der externe STB-TV-Eingang von einem Drittanbieter bereitgestellt. Da über diesen TV-Eingang nicht direkt auf den eingehenden HDMI-Videofeed zugegriffen werden kann, muss er über den TV Input Manager und den vom Gerätehersteller bereitgestellten HDMI-TV-Eingang erfolgen.

Über den TV Input Manager kann der externe STB-TV-Eingang mit dem HDMI-TV-Eingang kommunizieren und ihn bitten, das Video auf HDMI1 anzuzeigen. Der STB-TV-Eingang kann also den Fernseher steuern, während der vom Hersteller bereitgestellte HDMI-TV-Eingang das Video rendert.

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

Android TV-KeyEvents
Abbildung 6. Android TV-KeyEvents

Das Diagramm oben zeigt, wie Tasten auf einer Fernbedienung an einen bestimmten TV-Eingang für die Bild-im-Bild-Anzeige (BiB) weitergeleitet werden. Diese Tastendrücke werden vom Hardwaretreiber des Geräteherstellers interpretiert, der Hardware-Scancodes in Android-Tastencodes umwandelt und sie als KeyEvents an die standardmäßige Android-Eingabepipeline InputReader und InputDispatcher übergibt. 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, welche InputEvents verarbeitet werden, und sollte der TV-App erlauben, die Tasten zu verarbeiten, die sie nicht benötigt.

Die TV-App muss wissen, welcher System-TV-Eingang aktiv ist, d. h. vom Nutzer ausgewählt wurde, und eingehende KeyEvents disambiguieren und an die richtige TV Input Manager-Sitzung weiterleiten. Dazu muss dispatchInputEvent() aufgerufen werden, um das Ereignis an den zugehörigen TV-Eingang zu übergeben.

Beispiel für MHEG-5-Eingabe

Das folgende Diagramm zeigt eine detailliertere Ansicht der Weiterleitung von KeyEvents über das Android TIF.

Beispiel für die rote Taste auf Android TV
Abbildung 7. Beispiel für die rote Taste auf Android TV

Es wird der Ablauf einer App mit roter Taste dargestellt, 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 Broadcast-Apps interagieren. Mit diesen Broadcast-Apps können Sie beispielsweise auf zugehörige Webseiten oder Sportergebnisse zugreifen.

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

In diesem Beispiel gilt Folgendes:

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

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

HAL für TV-Eingang

Das TV-Eingabe-HAL unterstützt die Entwicklung von TV-Eingaben für den Zugriff auf TV-spezifische Hardware. Wie bei anderen Android-HALs ist die TV-Eingabe-HAL (tv_input) im AOSP-Quellcodebaum verfügbar und der Anbieter entwickelt die Implementierung.

Hinweis: Ab Android 14 wird die TV-Eingabe-HAL-Schnittstelle mit AIDL definiert.

TV-App

In der System-TV-App werden dem Nutzer Live-TV-Inhalte präsentiert. Zusammen mit 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 Open-Source-Projekt für Android verfügbar. Informationen zu den ersten Schritten finden Sie im Artikel Referenz-TV-App.

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

Die System-TV-App muss mindestens die folgenden Aufgaben ausführen:

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 aufrufen
  • Auf die Informationsleiste für TV-Programme zugreifen
  • Daten der elektronischen Programmübersicht (EPG) anzeigen
  • Unterstützung mehrerer Audio- und Untertitel-Tracks
  • PIN für Jugendschutzeinstellungen angeben
  • TV-Eingabe-UI-Overlay für TV-Standard (HbbTV usw.) zulassen
  • Suchergebnisse für TV-Kanäle und ‑Programme anzeigen
  • Karten für App-Verknüpfungen anzeigen
  • Unterstützung von Timeshift-APIs
  • DVR-Funktion verarbeiten und TV-Aufzeichnungs-APIs unterstützen

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

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

Android TV bietet Entwickler-APIs für TV-Eingänge von Drittanbietern, mit denen installierte Apps Softwarekanäle für Live-TV bereitstellen können. Damit ein kompatibles Android-Gerät implementiert werden kann, hat die System-TV-App einige Aufgaben in Bezug auf die Darstellung von TV-Eingängen und ‑Kanälen von Drittanbietern für den Nutzer. Die Referenz-App für Live-TV bietet eine kompatible Implementierung. Wenn Gerätehersteller die System-TV-App ersetzen, müssen sie dafür sorgen, dass ihre eigenen Apps eine ähnliche Kompatibilität bieten, um die Erwartungen von Entwicklern auf allen Android TV-Geräten zu erfüllen.

In der System-TV-App müssen Drittanbietereingaben neben dem standardmäßigen Live-TV-Dienst des Geräts angezeigt werden. 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 und Drittanbieterkanälen ist gemäß dem Abschnitt „TV App“ des Android CDD zulässig.

In den folgenden Abschnitten wird beschrieben, wie die Live-TV-App die CDD-Anforderungen erfüllt.

Neuen Channel einrichten

Das Hinzufügen neuer Drittanbieter-Eingänge/‑Kanäle beginnt damit, dass der Nutzer einen TV-Eingang in einem App-Store wie Google Play findet und installiert.

Bei einigen TV-Eingängen von Drittanbietern werden automatisch Kanäle zur TvProvider-Datenbank hinzugefügt. Die meisten bieten jedoch eine Einrichtungsaktivität, mit der der Nutzer seine Channels einrichten, Anmeldedaten angeben und andere Aktionen ausführen kann. In der System-TV-App muss der Nutzer diese Einrichtungsaktivität aktivieren können. Daher müssen gemäß CDD Eingaben von Drittanbietern nur wenige Navigationsaktionen von der Haupt-TV-App entfernt sein.

Die Referenz-App für Live-TV bietet das Menü „Kanalquellen“ für den Zugriff auf Eingänge.

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

Zu den Channelquellen in den Einstellungen
Abbildung 9. Gehe in den Einstellungen zu Channels.

Wählen Sie Ihre Quelle aus der Liste aus.
Abbildung 10. Wählen Sie Ihre Quelle aus der Liste aus.

Kanäle aus deiner Quelle hinzufügen
Abbildung 11. Fügen Sie Kanäle aus Ihrer Quelle hinzu.

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

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

Wenn der Nutzer über die Benachrichtigung aktiv wird, kann er seine Quellen wie in Abbildung 10 gezeigt einrichten.

Weitere 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 ihre eigenen EPGs verwalten können. Live-TV bietet diese Funktion.

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

Kanalliste anpassen
Abbildung 14: Kanalliste anpassen

EPG

Drittanbieter-Entwickler von Eingabe-Apps müssen darauf vertrauen können, dass Nutzer während der allgemeinen Nutzung auf allen kompatiblen Android TV-Geräten problemlos zu ihren Kanälen navigieren können.

Kanäle von Drittanbietereingängen müssen als Teil des EPG für das standardmäßige Live-TV-Erlebnis des Geräts präsentiert werden. Es können visuelle Trennungen oder separate Kategorien für Drittanbieterkanäle verwendet werden (siehe den Abschnitt „TV App“ des Android CDD). Wichtig ist, dass Nutzer die von ihnen installierten Kanäle finden können.

Hersteller müssen die TV-App so implementieren, dass sie Suchergebnisse für globale Suchanfragen enthält, um Nutzern die bestmögliche Nutzerfreundlichkeit zu bieten. Live-TV bietet eine Implementierung (siehe ), die Ergebnisse aus Drittanbietereingaben (erforderlich für die Plattformkompatibilität) sowie integrierte Eingaben liefert.

Zeitverschiebung

Auf Geräten mit Android 6.0 und höher muss die TV-App das Android-Framework APIs für die Zeitversetzung unterstützen. Außerdem müssen Hersteller in der TV-App Wiedergabesteuerelemente implementieren, mit denen Nutzer die Wiedergabe pausieren, fortsetzen, zurückspulen und vorspulen können.

Bei TV-Eingängen, die Time-Shifting unterstützen, müssen in der TV-App Wiedergabesteuerelemente angezeigt werden.

Wiedergabesteuerung
Abbildung 15. Wiedergabesteuerung

DVR

Auf Geräten mit Android 7.0 und höher muss die TV-App das Android-Framework TV-Aufnahme-APIs unterstützen, damit aufgezeichnete Programme unterstützt, aufgelistet und wiedergegeben werden können.

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 TV-Gerät erheblich reduzieren. Außerdem können Drittanbieter DVR-Systeme für den Nachrüstmarkt anbieten, die an ein Android TV-Gerät angeschlossen werden können.

Neben der Aufzeichnung von Live-Inhalten werden in der TV-App auch Ressourcenkonflikte behandelt. Wenn das Gerät beispielsweise zwei Tuner hat, kann es zwei Programme gleichzeitig aufzeichnen. Wenn der Nutzer drei Aufnahmen anfordert, muss die TV-App den Konflikt beheben und entweder eine Benachrichtigung anzeigen oder den Nutzer auffordern, eine Priorität für diese Anfragen festzulegen.

TV-Apps können auch komplexere Logik implementieren, z. B. einen Nutzer fragen, ob er alle zukünftigen Folgen einer Serie aufzeichnen möchte, wenn er die Aufzeichnung einer Folge anfordert.

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

Digitale Videoaufzeichnung auf Android TV
Abbildung 16. Digitale Videoaufzeichnung in Android TV

  1. Der TV Input Service teilt der TV-App mit, wie viele Tuner verfügbar sind, damit die TV-App mögliche Ressourcenkonflikte beheben kann.
  2. Die TV-App erhält eine vom Nutzer initiierte Anfrage zum Aufzeichnen einer TV-Sendung.
  3. Die TV-App speichert den Aufzeichnungsplan in ihrer internen Datenbank.
  4. Wenn es Zeit für die Aufnahme ist, übergibt die TV-App eine Anfrage zum Abstimmen auf den Kanal, der mit der Aufnahme verknüpft ist.
  5. Der TV Input Service empfängt diese Anfrage, antwortet, ob entsprechende Ressourcen vorhanden sind, und schaltet auf den Kanal um.
  6. Anschließend übergibt die TV-App eine Anfrage zum Starten der Aufnahme an den TV Input Manager.
  7. Der TV Input Service empfängt diese Anfrage und startet die Aufnahme.
  8. Der TV Input Service speichert die eigentlichen Videodaten in seinem Speicher, der ein externer Speicher oder ein Cloud-Speicher sein kann.
  9. Wenn die Aufnahme beendet werden soll, übergibt die TV-App die Anfrage zum Beenden der Aufnahme an den TV Input Manager.
  10. Sobald der TV Input Service die Anfrage erhält, beendet er die Aufnahme und fügt die zugehörigen Metadaten dem TV-Anbieter hinzu, damit die TV-App die Aufnahme bei Bedarf für Nutzer anzeigen kann.

Weitere Informationen zur Implementierung von Aufnahmefunktionen in Ihrem TV-Eingabedienst finden Sie in diesem Artikel zur TV-Aufnahme.

Nützliches Infomaterial

  • Das Android-CDD und die dokumentierten Entwickler-APIs sind die maßgeblichen Referenzen.
  • CTS Verifier nutzt die APIs im Rahmen des Kompatibilitätstests. Wenn Sie diesen Test für Live TV ausführen, können Sie das EPG, die Suche, die Jugendschutzeinstellungen und andere Anforderungen im Kontext von Drittanbietereingaben sehen.
  • Weitere Informationen zu den Erwartungen an Entwickler in diesem Bereich finden Sie unter TV-Eingabedienst definieren.

Jugendschutzeinstellungen

Mit der Jugendschutzfunktion können Nutzer unerwünschte Kanäle und Programme blockieren, die Blockierung aber durch Eingabe einer PIN umgehen.

Die Verantwortung für die Jugendschutzeinstellungen wird zwischen der TV-App, dem TV Input Manager-Dienst, dem TV-Anbieter und dem TV-Eingang aufgeteilt.

Die Jugendschutzeinstellungen sind obligatorisch und werden von CTS Verifier abgedeckt.

In einer Reihe von Ländern gibt es definierte Altersfreigabesysteme, die TV-Eingänge über die TVContentRating API verwenden können. Außerdem können TV-Eingänge eigene benutzerdefinierte Altersfreigabesysteme registrieren, wie im CTS Verifier-Test gezeigt wird, in dem eine „falsche“ Altersfreigabe eingeführt wird. In Ländern, in denen ein Standard-Altersfreigabesystem vorhanden ist, werden Gerätehersteller aufgefordert, die Jugendschutzeinstellungen des TV Input Framework mit anderen Mechanismen zu kombinieren, die sie möglicherweise einbauen.

TV-Anbieter

Jede Kanalzeile hat ein COLUMN_LOCKED-Feld, mit dem bestimmte Kanäle gesperrt werden können, sodass sie nur mit einem PIN-Code angesehen werden können. Das Programmfeld COLUMN_CONTENT_RATING ist für die Anzeige vorgesehen und wird nicht zur Durchsetzung der Jugendschutzeinstellungen verwendet.

TV Input Manager

Der TV Input Manager speichert alle blockierten TvContentRating und reagiert auf isRatingBlocked(), um mitzuteilen, ob Inhalte mit der angegebenen Altersfreigabe blockiert werden sollen.

TV-Eingang

Der TV-Eingang prüft, ob die aktuellen Inhalte blockiert werden sollen, indem isRatingBlocked() im TV Input Manager aufgerufen wird, wenn sich die Altersfreigabe der angezeigten Inhalte geändert hat (bei Programm- oder Kanalwechsel) oder wenn 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 Audio und Video und benachrichtigt die TV-App, dass die aktuellen Inhalte blockiert sind, indem notifyContentBlocked(TvContentRating) aufgerufen wird. 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 er notifyContentAllowed() aufruft.

TV-App

Damit die APIs zur Elternaufsicht berücksichtigt und somit eine kompatible Plattform geschaffen werden kann, muss die System-TV-App Nutzern die Möglichkeit bieten, die Elternaufsicht zu verwalten, auch für benutzerdefinierte Altersfreigaben, die von bestimmten Apps registriert wurden.

In der TV-App wird eine Benutzeroberfläche mit einem PIN-Code angezeigt, wenn sie von einem TV-Eingang darüber informiert wird, dass die aktuellen Inhalte blockiert sind, oder wenn der Nutzer versucht, einen blockierten Kanal aufzurufen.

Die Jugendschutzeinstellungen werden nicht direkt in der TV-App gespeichert. Wenn der Nutzer die Jugendschutzeinstellungen ändert, wird jedes blockierte TvContentRating vom TV Input Manager gespeichert und blockierte Sender werden vom TV-Anbieter gespeichert.

Die TV-App muss die Berechtigung android.permission.MODIFY_PARENTAL_CONTROLS deklarieren, um die Jugendschutzeinstellungen zu ändern.

Gerätehersteller werden gebeten,

  • Führen Sie den CTS Verifier-Test für die Elternaufsicht für die Referenz-Live-TV-Anwendung aus, um die Kompatibilitätsanforderungen zu demonstrieren.
  • Verwende die Live-TV-App als Referenz für deine eigene TV-App, insbesondere die Quellen ContentRatingsManager und RatingSystemsFragment und wie dort benutzerdefinierte Altersfreigaben behandelt werden.

HDMI-CEC

Mit HDMI-CEC kann ein Gerät ein anderes steuern. So kann eine einzige Fernbedienung mehrere Geräte in einem Heimkino steuern. Sie 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 kann sie beispielsweise Eingänge umschalten oder Geräte ein- und ausschalten.

Das Android TIF implementiert HDMI-CEC als HDMI Control Service, sodass Gerätehersteller lediglich Low-Level-Treiber entwickeln müssen, die mit dem einfachen Android TV HAL interagieren. Komplexere Geschäftslogik ist nicht erforderlich. Mit einer Standardimplementierung soll die Kompatibilität von Android verbessert werden, indem fragmentierte Implementierungen und selektive Feature-Unterstützung reduziert werden. Der HDMI Control Service verwendet die vorhandenen Android-Dienste, einschließlich Eingabe und Stromversorgung.

Das bedeutet, dass vorhandene HDMI-CEC-Implementierungen neu konzipiert werden müssen, um mit dem Android TIF zusammenzuarbeiten. Wir empfehlen, dass die Hardwareplattform einen Mikroprozessor enthält, um CEC-Ein- und andere Befehle zu empfangen.

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

  1. Der CEC-Bus empfängt einen Befehl von der aktuell aktiven Quelle, zu einer anderen Quelle zu wechseln.
  2. Der Treiber übergibt den Befehl an die HDMI-CEC HAL.
  3. Das HAL benachrichtigt alle ActiveSourceChangeListeners.
  4. Der HDMI Control Service wird über ActiveSourceChangeListener über die Änderung der Quelle benachrichtigt.
  5. Der TV Input Manager-Dienst generiert eine Intention für die TV-App, um die Quelle zu wechseln.
  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 leitet diese Informationen an den HDMI-TV-Eingang weiter.
  8. Der HDMI-TV-Eingang fordert an, die Sideband-Oberfläche festzulegen.
  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 für die Übertragung hat (MHEG, Teletext, HbbTV usw.), 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 wird von Geräteherstellern erwartet, dass sie Systemintegratoren oder die Android-Lösungen für regionale TV-Stacks verwenden, die Oberfläche an TV-Software-Stacks übergeben oder den erforderlichen Tastencode übergeben, um mit Legacy-Stacks zu interagieren.

So interagieren die Broadcast-App und die TV-App:

  1. Die TV-App ist im Fokus und empfängt alle Tasten.
  2. Die TV-App leitet Tasten (z.B. die rote Taste) an das TV-Eingabegerät weiter.
  3. Das TV-Eingabegerät wird intern in den alten TV-Stack integriert.
  4. Wenn das TV-Eingabegerät einen Aktivierungscode (z.B. die rote Taste) empfängt, werden Broadcast-Apps aktiviert.
  5. Eine Broadcast-App wird in der TV-App in den Fokus gerückt und verarbeitet Nutzeraktionen.

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