TV-Eingangsframework

HAL-Symbol für Android TV

Das Android TV Input Framework (TIF) vereinfacht die Bereitstellung von Live-Inhalten an Android TV. Das Android TIF bietet eine Standard-API für Hersteller, um Eingabemodule zur Steuerung von Android TV zu erstellen, und ermöglicht die Live-TV-Suche und Empfehlungen über Metadaten, die von TV Input veröffentlicht werden.

Das Rahmenwerk zielt nicht darauf ab, TV-Standards oder regionale Anforderungen zu implementieren, erleichtert es jedoch den Geräteherstellern, regionale Standards für digitale Fernsehübertragungen 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 enthält 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 geliefert 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 Benutzerinteraktion verarbeitet
  • TV Input Manager ( android.media.tv.TvInputManager ): Ermöglicht den TV-Eingängen die Kommunikation mit der TV-App
  • TV-Eingang: eine App, die physische oder virtuelle Tuner und Eingangsports darstellt
  • TV-Eingangs-HAL ( tv_input -Modul): eine Hardwaredefinition, die System-TV-Eingängen den Zugriff auf TV-spezifische Hardware ermöglicht, wenn sie implementiert ist
  • Kindersicherung: Die Technologie, die das Blockieren von Kanälen und Programmen ermöglicht
  • HDMI-CEC: Die Technologie zur Fernsteuerung verschiedener Geräte über HDMI
  • Tuner-Framework: Ein Framework für die TV-Eingabe eines eingebauten Tuners
  • MediaCas: ein Framework für bedingten Zugriff
  • Tuner-Ressourcen-Manager: Ein Dienst zur Verwaltung der Hardware-Ressourcen für TV-Eingabe, MediaCas- und integrierte Tuner-Eingabe

Diese Komponenten werden unten im Detail behandelt. Im folgenden Diagramm finden Sie eine detaillierte Ansicht der Architektur des Android TV Input Framework.

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

Fließen

So wird die Architektur ausgeübt:

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

Berechtigungen

  • Nur signatureOrSystem TV Inputs und TV App haben vollen Zugriff auf die TV-Provider-Datenbank und können KeyEvents empfangen.
  • Nur System-TV-Eingänge können über den TV Input Manager-Dienst auf die TV-Eingangs-HAL zugreifen. Auf TV-Eingänge wird über TV Input Manager-Sitzungen eins zu eins zugegriffen.
  • TV-Eingänge von Drittanbietern haben paketgesperrten Zugriff auf die Datenbank des TV-Anbieters und können nur auf übereinstimmende Paketzeilen LESEN/SCHREIBEN.
  • TV-Eingänge von Drittanbietern können entweder ihre eigenen Inhalte oder Inhalte von Passthrough-TV-Eingängen eines Geräteherstellers wie HDMI1 anzeigen. Sie können keine Inhalte von Nicht-Passthrough-TV-Eingängen wie einem integrierten oder IPTV-Tuner anzeigen.
  • TV_INPUT_HARDWARE Berechtigung für eine Hardware-TV-Eingabe-App signalisiert dem TV Input Manager-Dienst, den TV Input-Dienst beim Booten zu benachrichtigen, damit er den TV Input Manager-Dienst aufruft und seine TV-Eingänge hinzufügt. Diese Berechtigung ermöglicht es einer Hardware-TV-Eingangs-App, mehrere TV-Eingänge pro TV-Eingangsdienst zu unterstützen und ihre unterstützten TV-Eingänge dynamisch hinzuzufügen und zu entfernen.

TV-Anbieter

Die Datenbank des TV-Anbieters speichert die Kanäle und Programme von TV-Eingängen. Der TV-Anbieter veröffentlicht und verwaltet auch die zugehörigen Berechtigungen, sodass TV-Inputs nur ihre eigenen Aufzeichnungen sehen können. Beispielsweise kann ein bestimmter TV-Eingang nur die Kanäle und Programme sehen, die er bereitgestellt hat, und es ist ihm untersagt, auf die Kanäle und Programme anderer TV-Eingänge zuzugreifen.

Der TV-Anbieter ordnet „Broadcast-Genre“ intern dem „kanonischen Genre“ zu. TV-Eingaben sind dafür verantwortlich, „Broadcast Genre“ mit dem Wert im zugrunde liegenden Broadcast-Standard zu füllen, und das Feld „Canonical Genre“ wird automatisch mit dem korrekt zugeordneten Genre aus android.provider.TvContract.Genres . Beim Übertragungsstandard ATSC A/65 und einem Programm mit dem Genre 0x25 (was „Sport“ bedeutet) füllt der TV-Eingang beispielsweise das „Broadcast-Genre“ mit der Zeichenfolge „Sport“ und der TV-Anbieter das Feld „Canonical Genre“ mit der zugeordnete Wert android.provider.TvContract.Genres.SPORTS .

Siehe das Diagramm unten für eine detaillierte Ansicht des TV-Anbieters.

Android-TV-Anbieter
Abbildung 2. Android-TV-Anbieter

Nur Apps in der privilegierten Systempartition können die gesamte Datenbank des TV-Anbieters lesen.

Passthrough-TV-Eingänge speichern keine Kanäle und Programme.

Zusätzlich zu den Standardfeldern für Kanäle und Programme bietet die TV-Provider-Datenbank auch ein Feld vom Typ BLOB, COLUMN_INTERNAL_PROVIDER_DATA , in jeder Tabelle, die TV-Eingänge verwenden können, um beliebige Daten zu speichern. Diese BLOB-Daten können kundenspezifische Informationen enthalten, wie z. B. die Frequenz des zugeordneten Tuners, und können in einem Protokollpuffer oder in anderer Form bereitgestellt werden. Ein durchsuchbares Feld ist verfügbar, um bestimmte Kanäle für die Suche nicht verfügbar zu machen (z. B. um länderspezifische Anforderungen für den Inhaltsschutz zu erfüllen).

Beispiele für Datenbankfelder

Der TV-Anbieter unterstützt strukturierte Daten in Kanal- ( android.provider.TvContract.Channels ) und Programm- ( android.provider.TvContract.Programs ) Tabellen. Diese Tabellen werden von TV-Eingängen und System-Apps wie der TV-App ausgefüllt und aufgerufen. Diese Tabellen haben vier Arten von Feldern:

  • Anzeige: Anzeigefelder enthalten Informationen, die Apps möglicherweise für den Benutzer sichtbar machen möchten, z. B. den Namen ( COLUMN_DISPLAY_NAME ) oder die Nummer ( COLUMN_DISPLAY_NUMBER ) eines Kanals oder den Titel des angesehenen Programms.
  • Metadaten: Es gibt drei Felder zur Identifizierung von Inhalten gemäß relevanten Standards, wie die Transportstrom-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-Eingängen vorgesehen sind.
    Einige Felder, wie COLUMN_INTERNAL_PROVIDER_DATA , sind anpassbare BLOB-Felder, in denen ein TV-Eingang beliebige Metadaten über seinen Kanal oder sein Programm speichern kann.
  • Flag: Flag-Felder geben an, ob ein Kanal vom Suchen, Durchsuchen oder Ansehen ausgeschlossen werden soll. Dies kann nur auf Kanalebene eingestellt werden. Alle Programme richten sich nach der Einstellung am Kanal.
    • COLUMN_SEARCHABLE : Das Einschränken der Suche auf einige Kanäle kann in bestimmten Regionen erforderlich sein. COLUMN_SEARCHABLE = 0 bedeutet, dass der Kanal nicht in den Suchergebnissen angezeigt werden soll.
    • COLUMN_BROWSABLE : Nur für Systemanwendungen sichtbar. Einschränken des Durchsuchens des Kanals durch Anwendungen. COLUMN_BROWSABLE = 0 bedeutet, dass der Kanal nicht in die Kanalliste aufgenommen werden soll.
    • COLUMN_LOCKED : Nur für Systemanwendungen sichtbar. Einschränken der Anzeige des Kanals durch ungültige Konten ohne Eingabe des PIN-Codes. COLUMN_LOCKED = 1 bedeutet, dass der Kanal durch die Kindersicherung geschützt werden soll.

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

Berechtigungen und Zugriffskontrolle

Alle Felder sind für jeden sichtbar, der Zugriff auf die entsprechende Zeile hat. Keine Felder sind für Benutzer direkt zugänglich; Sie sehen nur, was die TV-App, System-Apps oder TV-Eingänge anzeigen.

  • Jede Zeile hat PACKAGE_NAME , das Paket (App), das diese Zeile besitzt, überprüft auf Query, Insert, Update über TvProvider.java. Ein TV-Eingang kann nur auf die von ihm geschriebenen Informationen zugreifen und ist von den Informationen anderer TV-Eingänge abgeschottet.
  • LESEN-, SCHREIBEN-Berechtigungen über AndroidManifest.xml (Benutzereinwilligung erforderlich), um verfügbare Kanäle zu bestimmen.
  • Nur signatureOrSystem -Apps können die ACCESS_ALL_EPG_DATA erwerben, um auf die gesamte Datenbank zuzugreifen.

TV-Eingangsmanager

Der TV Input Manager stellt eine zentrale System-API für das gesamte Android TV Input Framework bereit. Es vermittelt die Interaktion zwischen Apps und TV-Eingängen und bietet eine Kindersicherungsfunktion. 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 deren Status überprüfen
  • Erstellen Sie Sitzungen und verwalten Sie Zuhörer

Für Sitzungen kann ein TV-Eingang von der TV-App nur auf URIs abgestimmt werden, die sie der Datenbank des TV-Anbieters hinzugefügt hat, mit Ausnahme von Passthrough-TV-Eingängen, auf die mithilfe von TvContract.buildChannelUriForPassthroughInput() abgestimmt werden kann. Die Lautstärke eines TV-Eingangs kann ebenfalls eingestellt sein. Vom Gerätehersteller bereitgestellte und signierte TV-Eingänge (Signatur-Apps) oder andere in der Systempartition installierte Apps haben Zugriff auf die gesamte Datenbank des TV-Anbieters. Dieser Zugriff kann verwendet werden, um Apps zu erstellen, um alle verfügbaren TV-Kanäle und -Programme zu durchsuchen und zu durchsuchen.

Eine App kann einen TvInputCallback mit dem 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. Beispielsweise kann eine TV-App 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 TV Inputs. Die Standardschnittstelle von TV Input Manager und TV Input ermöglicht es mehreren Geräteherstellern, ihre eigenen TV-Apps zu erstellen, während alle TV-Eingänge von Drittanbietern auf allen TV-Apps funktionieren.

TV-Eingänge

TV-Eingänge sind Android-Apps in dem Sinne, dass sie über eine AndroidManifest.xml verfügen und installiert werden (über Play, vorinstalliert oder quergeladen). Android TV unterstützt vorinstallierte System-Apps, vom Gerätehersteller signierte Apps und TV-Eingänge von Drittanbietern.

Einige Eingänge, wie der HDMI-Eingang oder der eingebaute Tuner-Eingang, 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 der neue Eingang in der TV-App ausgewählt werden.

Passthrough-Eingabebeispiel

Android TV-Systemeingang
Abbildung 3. Eingang des Android-TV-Systems

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

Beispiel für eingebauten Tuner

Integrierter Tuner-Eingang für Android TV
Abbildung 4. Integrierter Tuner-Eingang 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.

Eingabebeispiel eines Drittanbieters

Eingang von Drittanbietern für Android TV
Abbildung 5. Eingabe von Drittanbietern für 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-Video-Feed zugreifen kann, muss er den TV Input Manager durchlaufen und den vom Gerätehersteller bereitgestellten HDMI-TV-Eingang verwenden.

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

Beispiel Bild-in-Bild (PIP).

Android TV KeyEvents
Abbildung 6. Android TV KeyEvents

Das obige Diagramm zeigt, wie Tasten auf einer Fernbedienung an einen bestimmten TV-Eingang für die Bild-in-Bild-Anzeige (PIP) weitergeleitet werden. Diese Tastendrücke werden vom vom Gerätehersteller bereitgestellten Hardwaretreiber interpretiert, der Hardware-Scancodes in Android-Keycodes konvertiert und sie an die standardmäßigen Android- Eingabepipeline -Funktionen InputReader und InputDispatcher als KeyEvents übergibt . Diese wiederum lösen Ereignisse auf der TV-App aus, wenn diese im Fokus ist.

Nur System-TV-Eingänge sind berechtigt, InputEvents zu empfangen, und nur, wenn sie die RECEIVE_INPUT_EVENT haben. Die TV-Eingabe ist dafür verantwortlich, zu bestimmen, welche InputEvents konsumiert werden sollen, und sollte es der TV-App ermöglichen, die Schlüssel zu verarbeiten, die sie nicht konsumieren muss.

Die TV-App ist dafür verantwortlich, zu wissen, welcher System-TV-Eingang aktiv ist, d. h. vom Benutzer ausgewählt, und eingehende KeyEvents zu disambiguieren und sie an die richtige TV Input Manager-Sitzung weiterzuleiten, indem sie dispatchInputEvent() aufruft, um das Ereignis an den zugehörigen TV-Eingang weiterzuleiten .

MHEG-5-Eingabebeispiel

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

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

Es zeigt den Ablauf einer Red-Button-App, die in Europa üblich ist, um Benutzern den Zugriff auf interaktive Apps auf ihren Fernsehern zu ermöglichen. Über diesen Transportstrom kann eine App ausgeliefert werden. Wenn auf die Schaltfläche geklickt wird, können Benutzer mit diesen Broadcast-Apps interagieren. Beispielsweise können Sie diese Broadcast-Apps verwenden, um auf verwandte Webseiten oder Sportergebnisse zuzugreifen.

Sehen Sie sich den Abschnitt Broadcast-App an, um zu erfahren, wie Broadcast-Apps mit der TV-App interagieren.

In diesem Beispiel:

  1. Die TV-App steht im Fokus und erhält alle Tasten.
  2. KeyEvents (z. B. die rote Taste) werden als InputEvents.
  3. Der System-TV-Eingang integriert sich in den MHEG-5-Stack und verfügt über die RECEIVE_INPUT_EVENT -Systemberechtigung.
  4. Beim Empfang des Aktivierungsschlüsselcodes (z. B. rote Taste) aktiviert der TV-Eingang die Broadcast-App.
  5. Die TV-Eingabe verbraucht KeyEvents als InputEvents und die Broadcast-App steht im Mittelpunkt und verarbeitet InputEvents , bis sie geschlossen werden.

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

TV-Eingang HAL

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

TV-App

Die System-TV-App präsentiert dem Benutzer 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, und Sie können im Artikel Referenz-TV-App damit beginnen.

Gerätehersteller können ihre TV-Apps erweitern, um gerätehersteller- oder länderspezifische Funktionen zu implementieren, dies ist jedoch nicht im Umfang von TIF oder der Referenz-TV-App.

Die System-TV-App muss mindestens die folgenden Aufgaben erledigen:

Einrichtung und Konfiguration

  • TV-Eingänge automatisch erkennen
  • Lassen Sie die TV-Eingänge die Kanaleinrichtung initiieren
  • Steuern Sie die Jugendschutzeinstellungen
  • Kanäle bearbeiten

Anzeigen

  • Greifen Sie auf alle TV-Kanäle zu und navigieren Sie zu ihnen
  • Greifen Sie auf die Informationsleiste des Fernsehprogramms zu
  • Daten des elektronischen Programmführers (EPG) anzeigen
  • Unterstützt mehrere Audio- und Untertitelspuren
  • Stellen Sie die PIN-Herausforderung für die Kindersicherung bereit
  • TV Input UI-Overlay für TV-Standard zulassen (HbbTV usw.)
  • Füllen Sie Suchergebnisse für TV-Kanäle und -Programme aus
  • App-Verknüpfungskarten anzeigen
  • Unterstützung von Timeshifting-APIs
  • Behandeln Sie die DVR-Funktionalität und unterstützen Sie APIs für die TV-Aufzeichnung

Dieser Funktionsumfang wird im Einklang mit neuen Android-Versionen erweitert, bei denen die Plattform-TIF-APIs 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, sodass installierte Apps Softwarekanäle in das Live-TV-Erlebnis einspeisen können. Um eine kompatible Android-Geräteimplementierung sicherzustellen, hat die System-TV-App einige Verantwortlichkeiten hinsichtlich der Bereitstellung von TV-Eingängen und -Kanälen von Drittanbietern für den Benutzer. Die Referenz-Live-TV-App bietet eine kompatible Implementierung; Wenn die System-TV-App ersetzt wird, müssen Gerätehersteller sicherstellen, dass ihre eigenen Apps eine ähnliche Kompatibilität bieten, um die Erwartungen der Entwickler auf allen Android-TV-Geräten zu erfüllen.

Die System-TV-App muss neben dem standardmäßigen Live-TV-Dienst des Geräts Eingaben von Drittanbietern anzeigen. Das Versprechen der Entwickler-APIs ist, dass Benutzer Kanäle (einmal installiert) innerhalb ihres Standard-TV-Erlebnisses finden können.

Die visuelle Unterscheidung zwischen integrierten Kanälen und Kanälen von Drittanbietern ist zulässig, wie im Abschnitt „TV-App“ der Android-CDD definiert.

Die folgenden Abschnitte zeigen, wie die Live-TV-Anwendung die CDD-Anforderungen erfüllt.

Neue Kanaleinstellung

Das Hinzufügen neuer Eingaben/Kanäle von Drittanbietern beginnt damit, dass der Benutzer eine TV-Eingabe aus einem Anwendungsspeicher wie Google Play findet und installiert.

Einige TV-Eingänge von Drittanbietern fügen der TvProvider-Datenbank automatisch Kanäle hinzu. Die meisten bieten jedoch eine Setup-Aktivität, mit der der Benutzer seine Kanäle einrichten, Anmeldedaten bereitstellen und andere Aktionen ausführen kann. Die System-TV-App muss sicherstellen, dass der Benutzer diese Setup-Aktivität aktivieren kann, weshalb das CDD Eingaben von Drittanbietern als minimale Navigationsaktionen von der Haupt-TV-App weg erfordert.

Die Referenz-Live-TV-App bietet das Kanalquellenmenü für den Zugriff auf Eingänge.

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

Gehen Sie in den Einstellungen zu Kanalquelle
Abbildung 9. Gehen Sie in den Einstellungen zu Kanalquellen .

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

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

Darüber hinaus wird nach der Installation eines neuen TvInput oben im Menü der TV-App eine Benachrichtigungskarte angezeigt, um den Benutzer direkt zum Setup zu führen:

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

Wenn der Benutzer über die Benachrichtigung handelt, kann er seine Quellen wie in Abbildung 10 dargestellt einrichten.

Siehe Definieren Sie Ihren TV-Eingabedienst für Entwicklererwartungen in diesem Bereich.

Passen Sie die Kanalliste an

Gerätehersteller können eine Benutzeroberfläche bereitstellen, um bestimmte Kanäle auszublenden und es Benutzern zu ermöglichen, ihre eigenen EPGs zu verwalten. Live-TV beinhaltet diese Einrichtung.

Öffnen Sie die Kanalliste in den Einstellungen.
Abbildung 13. Öffnen Sie die Kanalliste in den Einstellungen .

Passen Sie Ihre Kanalliste an.
Abbildung 14. Passen Sie Ihre Kanalliste an.

EPG

Input-Entwickler von Drittanbietern müssen sich darauf verlassen können, dass Benutzer während der allgemeinen Nutzung auf allen kompatiblen Android TV-Geräten problemlos zu ihren Kanälen navigieren können.

Kanäle von Drittanbietern müssen als Teil des Standard-Live-TV-Erlebnis-EPG des Geräts präsentiert werden. Visuelle Trennung oder getrennte Kategorien für Drittkanäle können verwendet werden (siehe Abschnitt TV-App der Android-CDD) – entscheidend ist, dass Benutzer 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 die beste Benutzererfahrung zu gewährleisten. Live TV bietet eine Implementierung (siehe com.android.tv.search.TvProviderSearch ), die Ergebnisse aus Eingaben von Drittanbietern (erforderlich für Plattformkompatibilität) sowie integrierte Eingaben bereitstellt.

Zeitverschiebung

Für Geräte mit Android 6.0 und höher muss die TV-App die Time-Shifting-APIs des Android-Frameworks unterstützen. Darüber hinaus müssen Hersteller Wiedergabesteuerungen in der TV-App implementieren, die es Benutzern ermöglichen, die Wiedergabe anzuhalten, fortzusetzen, zurückzuspulen und vorzuspulen.

Für TV-Eingänge, die Zeitverschiebung unterstützen, muss die TV-App Wiedergabesteuerungen anzeigen.

Wiedergabesteuerung
Abbildung 15. Wiedergabesteuerung

DVR

Für Geräte mit Android 7.0 und höher muss die TV-App die TV-Aufzeichnungs-APIs des Android-Frameworks unterstützen, um aufgezeichnete Programme zu unterstützen, aufzulisten und wiederzugeben.

Dadurch können Gerätehersteller ihre DVR-Subsysteme in TIF einbinden und den Integrationsaufwand für die Aktivierung oder Integration von DVR-Funktionalität auf einem TV-Gerät drastisch reduzieren. Es ermöglicht auch Drittanbietern, Aftermarket-DVR-Systeme bereitzustellen, die an ein Android-TV-Gerät angeschlossen werden können.

Neben der Aufzeichnung von Live-Inhalten behandelt die TV-App auch Ressourcenkonflikte. Verfügt das Gerät beispielsweise über zwei Tuner, kann es zwei Sendungen gleichzeitig aufnehmen. Wenn der Benutzer darum bittet, drei aufzuzeichnen, muss die TV-App den Konflikt behandeln und sollte entweder eine Benachrichtigung anzeigen oder anfordern, dass der Benutzer eine Priorität für diese Anforderungen plant.

TV-Apps können auch eine ausgefeiltere Logik implementieren, z. B. einen Benutzer fragen, ob er alle zukünftigen Episoden einer Serie aufnehmen möchte, wenn er die Aufnahme einer Episode anfordert.

Sehen Sie sich das folgende Diagramm an, um einen Einblick in eine mögliche DVR-Implementierung in Android TV zu erhalten.

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

  1. Der TV-Eingabedienst teilt der TV-App mit, wie viele Tuner verfügbar sind, damit die TV-App mit möglichen Ressourcenkonflikten umgehen kann.
  2. Die TV-App empfängt eine benutzerinitiierte Anfrage zum Aufzeichnen eines Fernsehprogramms.
  3. Die TV-App speichert den Aufnahmeplan in ihrer internen Datenbank.
  4. Wenn es Zeit zum Aufnehmen ist, leitet die TV-App eine Anfrage zum Einstellen des mit der Aufnahme verknüpften Kanals weiter.
  5. Der TV-Eingabedienst empfängt diese Anforderung, antwortet, ob geeignete Ressourcen vorhanden sind oder nicht, und stellt den Kanal ein.
  6. Dann leitet die TV-App eine Anfrage zum Starten der Aufnahme an den TV Input Manager weiter.
  7. Der TV Input Service empfängt diese Anfrage und startet die Aufzeichnung.
  8. Der TV Input Service speichert die eigentlichen Videodaten in seinem Speicher, der ein externer Speicher oder ein Cloud-Speicher sein kann.
  9. Wenn es an der Zeit ist, die Aufzeichnung zu beenden, leitet die TV-App die Anforderung zum Beenden der Aufzeichnung an den TV Input Manager weiter.
  10. Sobald der TV Input Service die Anfrage erhält, stoppt er die Aufzeichnung und fügt dem TV-Anbieter die zugehörigen Metadaten hinzu, damit die TV-App die Aufzeichnung den Benutzern auf Anfrage zeigen kann.

Weitere Informationen zur Implementierung von Aufzeichnungsfunktionen in Ihrem TV-Eingangsdienst finden Sie in diesem Artikel zur TV-Aufzeichnung .

Nützliche Ressourcen

  • Die Android CDD und die dokumentierten Entwickler-APIs sind die endgültigen Referenzen.
  • CTS Verifier übt die APIs als Teil des Kompatibilitätstestprogramms aus. Dies gegen Live-TV auszuführen, kann eine nützliche Methode sein, um den EPG, die Suche, die Kindersicherung und andere Anforderungen im Zusammenhang mit Eingaben von Drittanbietern anzuzeigen.
  • Siehe Definieren Sie Ihren TV-Eingabedienst für Entwicklererwartungen in diesem Bereich.

Elterliche Kontrolle

Mit der Kindersicherung kann ein Benutzer unerwünschte Kanäle und Programme blockieren, aber die Blockierung umgehen, indem er einen PIN-Code eingibt.

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

Die Kindersicherung ist obligatorisch und wird von CTS Verifier abgedeckt.

Eine Reihe von Ländern hat Bewertungssysteme definiert, die TV Inputs über die TVContentRating API verwenden kann. Darüber hinaus können TV-Eingänge ihre eigenen benutzerdefinierten Bewertungssysteme registrieren, wie der CTS Verifier-Test zeigt, der eine „gefälschte“ Bewertung einführt. Für Länder, in denen ein Standard-Bewertungssystem existiert, werden Gerätehersteller ermutigt, das TV Input Framework Parental Control mit allen anderen Mechanismen zu kombinieren, die sie möglicherweise enthalten.

TV-Anbieter

Jede Kanalzeile hat ein COLUMN_LOCKED -Feld, das verwendet wird, um bestimmte Kanäle für die Anzeige zu sperren, ohne einen PIN-Code einzugeben. Das Programmfeld COLUMN_CONTENT_RATING ist für die Anzeige vorgesehen und dient nicht der Durchsetzung der Kindersicherung.

TV-Eingangsmanager

Der TV Input Manager speichert jedes blockierte TvContentRating und antwortet auf isRatingBlocked() , um mitzuteilen, ob Inhalte mit der gegebenen Bewertung blockiert werden sollten.

TV-Eingang

Der TV Input prüft, ob der aktuelle Inhalt blockiert werden soll, indem isRatingBlocked() im TV Input Manager aufgerufen wird, wenn sich die Altersfreigabe des angezeigten Inhalts geändert hat (bei Programm- oder Kanalwechsel) oder sich die Kindersicherungseinstellungen geändert haben (bei ACTION_BLOCKED_RATINGS_CHANGED und ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) . Wenn der Inhalt gesperrt werden soll, deaktiviert der TV-Eingang Audio und Video und benachrichtigt die TV-App, dass der aktuelle Inhalt gesperrt ist, indem er notifyContentBlocked(TvContentRating) . Wenn der Inhalt nicht blockiert werden soll, aktiviert der TV-Eingang Audio und Video und teilt der TV-App mit, dass der aktuelle Inhalt erlaubt ist, indem er notifyContentAllowed() .

TV-App

Um die Kindersicherungs-APIs zu berücksichtigen und daher eine kompatible Plattform zu schaffen, muss die System-TV-App den Benutzern eine Möglichkeit bieten, die Kindersicherung zu verwalten, einschließlich für alle benutzerdefinierten Bewertungen, die von bestimmten Apps registriert werden.

Die TV-App zeigt eine PIN-Code-UI, wenn sie durch eine TV-Eingabe benachrichtigt wird, dass der aktuelle Inhalt gesperrt ist, oder wenn der Benutzer versucht, einen gesperrten Kanal anzusehen.

Die TV-App speichert die Einstellungen der Kindersicherung nicht direkt. Wenn der Benutzer die Kindersicherungseinstellungen ändert, wird jede gesperrte TvContentRating vom TV Input Manager gespeichert, und gesperrte Kanäle werden vom TV-Anbieter gespeichert.

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

Gerätehersteller werden aufgefordert:

  • Führen Sie den CTS Verifier-Kindersicherungstest mit der Live-TV-Referenzanwendung 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 Quelle ContentRatingsManager und RatingSystemsFragment an und erfahren Sie, wie sie mit benutzerdefinierten Bewertungen umgehen.

HDMI-CEC

HDMI-CEC ermöglicht es einem Gerät, ein anderes zu steuern, wodurch eine einzige Fernbedienung mehrere Geräte in einem Heimkino steuern kann. Es 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. Beispielsweise kann es Eingänge umschalten, Geräte ein- oder ausschalten und vieles mehr.

Das Android TIF implementiert HDMI-CEC als HDMI Control Service, sodass Gerätehersteller lediglich Low-Level-Treiber entwickeln müssen, die mit dem leichtgewichtigen Android TV HAL interagieren und komplexere Geschäftslogik überspringen. Durch die Bereitstellung einer Standardimplementierung versucht Android, Kompatibilitätsprobleme zu mindern, indem fragmentierte Implementierungen und selektive Funktionsunterstützung reduziert werden. Der HDMI-Steuerungsdienst verwendet die vorhandenen Android-Dienste, einschließlich Eingabe und Stromversorgung.

Dies bedeutet, dass bestehende HDMI-CEC-Implementierungen neu gestaltet werden müssen, um mit dem Android-TIF zusammenzuarbeiten. Wir empfehlen, dass die Hardwareplattform einen Mikroprozessor enthält, um CEC-Einschalt- 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 gegenwärtig aktiven Quelle, auf eine andere Quelle umzuschalten.
  2. Der Treiber übergibt den Befehl an die HDMI-CEC HAL.
  3. Die HAL benachrichtigt alle ActiveSourceChangeListeners .
  4. Der HDMI-Steuerungsdienst wird über ActiveSourceChangeListener über die Änderung der Quelle benachrichtigt.
  5. Der TV Input Manager-Dienst generiert eine Absicht für die TV-App, die Quelle zu wechseln.
  6. Die TV-App erstellt dann eine TV Input Manager-Sitzung für den TV-Eingang, auf den umgeschaltet wird, und ruft setMain in dieser Sitzung auf.
  7. Die TV Input Manager Session leitet diese Informationen an den HDMI TV Input weiter.
  8. Der HDMI-TV-Eingang fordert zum Einstellen der Seitenbandoberfläche auf.
  9. Der TV Input Manager Service generiert einen entsprechenden Routing-Steuerbefehl zurück an den HDMI Control Service, wenn die Oberfläche eingestellt ist.

Richtlinien zur TV-Integration

Broadcast-App

Da jedes Land sendespezifische Anforderungen hat (MHEG, Teletext, HbbTV und mehr), wird von den Herstellern erwartet, dass sie ihre eigenen Lösungen für die Broadcast-App liefern, zum Beispiel:

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

In der Version von Android L erwartet Android TV, dass Gerätehersteller Systemintegratoren oder die Android-Lösungen für regionale TV-Stacks verwenden, die Oberfläche an TV-Software-Stacks übergeben oder den erforderlichen Schlüsselcode für die Interaktion mit Legacy-Stacks übergeben.

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

  1. Die TV-App steht im Fokus und empfängt alle Schlüssel.
  2. Die TV-App übergibt Tasten (z. B. rote Taste) an das TV-Eingabegerät.
  3. Das TV-Eingabegerät lässt sich intern in den Legacy-TV-Stack integrieren.
  4. Beim Empfang eines Aktivierungsschlüsselcodes (z. B. rote Taste) aktiviert das TV-Eingabegerät Broadcast-Apps.
  5. Eine Broadcast-App übernimmt den Fokus in der TV-App und verarbeitet Benutzeraktionen.

Für die Sprachsuche/Empfehlung kann die Broadcast-App die In-App-Suche für die Sprachsuche unterstützen.