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 zielt nicht darauf ab, TV-Standards oder regionale Anforderungen zu implementieren, erleichtert es Geräteherstellern, ohne Neuimplementierung die regionalen TV-Sendestandards für digitales Fernsehen zu erfüllen. 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. Das TIF arbeitet mit der TV-App zusammen, 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: die Technologie zur Fernbedienung verschiedener Geräte über HDMI
  • Tuner-Framework: ein Framework für die TV-Eingabe 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 im Folgenden ausführlich behandelt. 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 umgesetzt:

  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 Input Manager identifiziert den Status der TV-Eingänge für die TV-App. Weitere Informationen zu diesen Einschränkungen finden Sie unten unter 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 Tastenereignisse empfangen.
  • Nur System-TV-Eingänge können über den TV Input Manager-Dienst auf die TV Input HAL zugreifen. Der Zugriff auf die TV-Eingaben erfolgt mit dem TV Input Manager.
  • TV-Eingaben von Drittanbietern haben paketgebundenen Zugriff auf die Datenbank des TV-Anbieters und können nur auf übereinstimmende Paketzeilen LESEN/SCHREIBEN.
  • Über die TV-Eingänge von Drittanbietern können entweder eigene Inhalte oder Inhalte von Passthrough-TV-Eingängen eines Geräteherstellers wie HDMI1 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-Eingaben 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. Mit dem Standard-Broadcasting-Standard ATSC A/65 und einem Programm mit dem Genre „0x25“ (also „Sport“) wird beispielsweise das „Broadcast-Genre“ mit dem String „Sport“ durch die TV-Eingabe ausgefüllt. Der TV-Anbieter füllt dann 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 einer anderen Form 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 Tabellen für Kanäle (android.provider.TvContract.Channels) und Programme (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:

  • Anzeige: Anzeigefelder enthalten Informationen, die Apps für den Nutzer sichtbar machen möchten, z. B. den Namen eines Kanals (COLUMN_DISPLAY_NAME) oder die Nummer (COLUMN_DISPLAY_NUMBER) oder den Titel des aufgerufenen 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 anpassbare BLOB-Felder, in denen ein TV-Eingang beliebige Metadaten zu ihrem Kanal oder Programm speichern kann.
  • Flag : Flag-Felder geben an, ob die Suche, das Surfen oder die Anzeige eines Kanals eingeschränkt werden soll. Dies kann nur auf Kanalebene festgelegt werden. Für alle Programme gilt die Einstellung auf dem Kanal.
    • COLUMN_SEARCHABLE: In bestimmten Regionen ist es möglicherweise erforderlich, 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. Das Durchsuchen des Kanals durch Anwendungen wird eingeschränkt. COLUMN_BROWSABLE = 0 bedeutet, dass der Kanal nicht in die Kanalliste aufgenommen werden soll.
    • COLUMN_LOCKED: Nur für Systemanwendungen sichtbar. Der Kanal kann nur von gültigen Konten angesehen werden, wenn eine PIN eingegeben wird. 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-, SCHREIB-Berechtigungen über AndroidManifest.xml (Nutzereinwilligung erforderlich), 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 mit 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 erstellen und mit der android.media.tv.TvInputManager registrieren, um bei einer Statusänderung eines TV-Eingangs oder beim Hinzufügen oder Entfernen einer TV-Eingabe 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-Eingabemanager 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-Eingabegeräte von Drittanbietern mit 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-Eingaben 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 wie IPTV, Place Shifting und externe STB 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 Input vertrauenswürdig und hat uneingeschränkten 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 Weiterleitungs-Eingabe verwendet wird, verwende die android.media.tv.TvContract-Dienstmethode buildChannelUriForPassthroughInput(String inputId). Die TV-App kommuniziert mit dem TV-Eingangsmanager, um den HDMI-Eingang des Fernsehers zu erreichen.

Beispiel für einen integrierten Tuner

Eingebauter Tuner-Eingang 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 die externe TV-Eingabe für die STB von einem Drittanbieter bereitgestellt. Da dieser TV-Eingang nicht direkt auf den eingehenden HDMI-Videofeed zugreifen kann, muss er den TV Input Manager verwenden und den TV-Eingang vom Hersteller des Geräts verwenden.

Über den TV-Eingangsmanager kann der externe STB-TV-Eingang mit dem HDMI-TV-Eingang sprechen und ihn auffordern, das Video auf HDMI1 wiederzugeben. So kann der STB-TV-Eingang den Fernseher steuern, während das vom Hersteller bereitgestellte HDMI-TV-Signal das Video rendert.

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

Android TV-Schlüsselereignisse
Abbildung 6: Android TV-Tastatur-Ereignisse

Das Diagramm oben zeigt, wie Tasten einer Fernbedienung zur Bild-im-Bild-Anzeige (BiB) an einen bestimmten TV-Eingang übergeben werden. Das Drücken von Tasten wird von dem Hardwaretreiber interpretiert, der vom Gerätehersteller bereitgestellt wird. Dieser wandelt Hardware-Scancodes in Android-Keycodes um und übergibt sie an die standardmäßige Android-Eingabepipeline. InputReader und InputDispatcher funktionieren als KeyEvents. Diese lösen wiederum Ereignisse in der TV-App aus, wenn diese im Fokus ist.

InputEvents ist nur auf System-TV-Eingaben zulässig, sofern 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 das Android-TIF geleitet wird.

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 ausgeliefert werden. Wenn auf die Schaltfläche geklickt wird, können Nutzer mit diesen Übertragungsanwendungen interagieren. Beispielsweise können Sie diese Broadcast-Anwendungen verwenden, um auf ähnliche 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 der Fernseheingang 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.

TV Input HAL

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 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 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 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-Eingaben von Drittanbietern

Android TV bietet Entwickler-APIs für die Eingänge von Drittanbieter-TVs, damit installierte Apps Softwarekanäle in das Live-TV einbinden können. Um eine kompatible Android-Geräteimplementierung zu ermöglichen, hat die TV-App des Systems einige Aufgaben in Bezug 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 neben dem Standard-Live-TV-Dienst des Geräts auch Eingaben von Drittanbietern anzeigen. Die Entwickler-APIs sollen es Nutzern ermöglichen, Kanäle (nach der Installation) in ihrer Standard-TV-Umgebung zu finden.

Die optische Unterscheidung zwischen integrierten Kanälen und Drittanbieterkanälen ist zulässig, wie im Abschnitt zu TV-Apps der Android-CDD definiert.

In den folgenden Abschnitten wird erläutert, inwiefern die Live-TV App die CDD-Anforderungen erfüllt.

Einrichtung eines neuen Kanals

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 an, 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 Einstellungen.

Kanalquelle in den Einstellungen aufrufen
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. Benachrichtigungen über neue Kanalquellen sind verfügbar.

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 zum Ausblenden bestimmter Kanäle bereitstellen und Nutzern ermöglichen, ihre eigenen 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

elektronischer Programmführer

Entwickler, die Eingaben von Drittanbietern bereitstellen, müssen darauf vertrauen können, dass Nutzer ihre Kanäle während der allgemeinen Nutzung auf allen kompatiblen Android TV-Geräten einfach aufrufen können.

Kanäle von Drittanbieter-Eingängen 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 einbezogen werden, um eine optimale Nutzererfahrung zu gewährleisten. Live-TV bietet eine Implementierung (siehe ), die Ergebnisse von Drittanbietereingaben (erforderlich für die Plattformkompatibilität) sowie von integrierten Eingaben liefert.

Zeitversetzt

Auf Geräten mit Android 6.0 und höher muss die TV-App das Android-Framework für zeitversetzte APIs 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-Eingaben, die zeitversetztes Fernsehen 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 der DVR-Funktionen auf einem Fernseher erheblich reduzieren. Außerdem können Drittanbieter auf diese Weise Aftermarket-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, kann es zwei Programme gleichzeitig aufnehmen. Wenn der Nutzer die Aufzeichnung dreier Anfragen anfordert, muss die TV-App den Konflikt beheben und entweder eine Benachrichtigung anzeigen oder den Nutzer auffordern, eine Priorität für diese Anfragen zu planen.

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

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 stellt den Kanal ein.
  6. Die TV App übergibt dann eine Anfrage zum Starten der Aufnahme an den TV Input Manager.
  7. Der TV-Eingabedienst empfängt diese Anfrage und startet die Aufzeichnung.
  8. Der TV-Eingabedienst speichert die eigentlichen 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 Input Service die Anfrage erhält, stoppt er die Aufzeichnung und fügt die zugehörigen Metadaten dem TV-Anbieter hinzu, damit die TV-App die Aufnahme den Nutzern auf Anfrage zeigen 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 für Live-TV ausführen, können Sie den elektronischen Programmführer, die Suche, die Jugendschutzeinstellungen und andere Anforderungen im Zusammenhang mit Eingaben von Dritten einsehen.
  • 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 und die Blockierung durch Eingabe eines PIN-Codes umgehen.

Die TV-App, der TV Input Manager, der TV-Anbieter und die TV-Eingabe sind gemeinsam für die Jugendschutzeinstellungen verantwortlich.

Die Jugendschutzeinstellungen sind obligatorisch und werden von CTS Verifier abgedeckt.

Einige Länder haben Altersfreigabesysteme definiert, die über die TVContentRating API für TV-Inputs 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 zur Anzeige vorgesehen und wird nicht verwendet, um Jugendschutzeinstellungen zu erzwingen.

TV-Eingangsmanager

Der TV Input Manager speichert alle blockierten 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, werden alle blockierten 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 anhand der Referenz-Live-TV-Anwendung durch, 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

HDMI-CEC ermöglicht die Steuerung eines anderen Geräts, wodurch über eine einzige Fernbedienung mehrere Geräte in einem Heimkino gesteuert werden können. Er wird von Android TV verwendet, um die Einrichtung zu beschleunigen und verschiedene TV-Eingänge über die zentrale TV-App aus der Ferne zu steuern. Zum Beispiel kann er Eingänge wechseln oder Geräte ein- oder ausschalten.

Das Android TIF implementiert HDMI-CEC als HDMI-Steuerungsdienst, sodass Gerätehersteller nur Low-Level-Treiber entwickeln müssen, die mit dem schlanken Android TV HAL interagieren und somit die komplexere Geschäftslogik überspringen. Mit einer Standardimplementierung versucht Android, Kompatibilitätsprobleme zu minimieren, indem es fragmentierte Implementierungen und die Unterstützung selektiver Funktionen reduziert. Der HDMI-Steuerungsdienst 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 in 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 den HDMI-CEC HAL.
  3. Die HAL benachrichtigt alle ActiveSourceChangeListeners.
  4. Der HDMI-Kontrolldienst 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-Eingabe-Manager-Sitzung übergibt diese Informationen an den HDMI-TV-Eingang.
  8. Der HDMI-Eingang des Fernsehers fordert die Einstellung der Sideband-Oberfläche an.
  9. Der TV Input Manager Service generiert einen entsprechenden Befehl zur Routingsteuerung 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 ist im Fokus und erhält alle Schlüssel.
  2. Die TV App übergibt Schlüssel wie 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 konzentriert sich auf die TV-App und verarbeitet Nutzeraktionen.

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